Merge branch 'develop' into chore/ctb-editor

This commit is contained in:
Alexandre BODIN 2025-04-29 16:45:41 +02:00
commit 76db82f48f
92 changed files with 672 additions and 711 deletions

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin-test-utils",
"version": "5.12.5",
"version": "5.12.6",
"private": true,
"description": "Test utilities for the Strapi administration panel",
"license": "MIT",
@ -84,10 +84,10 @@
"devDependencies": {
"@reduxjs/toolkit": "1.9.7",
"@testing-library/jest-dom": "6.4.5",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"jest-environment-jsdom": "29.6.1",
"styled-components": "6.1.8",
"tsconfig": "5.12.5"
"tsconfig": "5.12.6"
},
"peerDependencies": {
"@reduxjs/toolkit": "^1.9.7",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/cloud-cli",
"version": "5.12.5",
"version": "5.12.6",
"description": "Commands to interact with the Strapi Cloud",
"keywords": [
"strapi",
@ -47,7 +47,7 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"axios": "1.8.4",
"boxen": "5.1.2",
"chalk": "4.1.2",
@ -72,8 +72,8 @@
"@types/cli-progress": "3.11.5",
"@types/eventsource": "1.1.15",
"@types/lodash": "^4.14.191",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -9,7 +9,7 @@ export const CONFIG_FILENAME = 'config.json';
export type LocalConfig = {
token?: string;
deviceId?: string;
installId?: string;
};
async function checkDirectoryExists(directoryPath: string) {

View File

@ -35,8 +35,8 @@ const cloudCommands = [
async function initCloudCLIConfig() {
const localConfig = await getLocalConfig();
if (!localConfig.deviceId) {
localConfig.deviceId = crypto.randomUUID();
if (!localConfig.installId) {
localConfig.installId = crypto.randomUUID();
}
await saveLocalConfig(localConfig);

View File

@ -119,7 +119,7 @@ export async function cloudApiFactory(
): Promise<CloudApiService> {
const localConfig = await getLocalConfig();
const customHeaders = {
'x-device-id': localConfig.deviceId,
'x-device-id': localConfig.installId,
'x-app-version': packageJson.version,
'x-os-name': os.type(),
'x-os-version': os.version(),

View File

@ -1,6 +1,6 @@
{
"name": "create-strapi-app",
"version": "5.12.5",
"version": "5.12.6",
"description": "Generate a new Strapi application.",
"keywords": [
"create-strapi-app",
@ -50,7 +50,7 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/cloud-cli": "5.12.5",
"@strapi/cloud-cli": "5.12.6",
"async-retry": "1.3.3",
"chalk": "4.1.2",
"commander": "8.3.0",
@ -69,8 +69,8 @@
"@types/async-retry": "^1",
"@types/fs-extra": "11.0.4",
"@types/inquirer": "8.2.5",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -10,7 +10,7 @@ import { handleCloudLogin } from './cloud';
import { createStrapi } from './create-strapi';
import { checkNodeRequirements } from './utils/check-requirements';
import { checkInstallPath } from './utils/check-install-path';
import { machineID } from './utils/machine-id';
import { installID } from './utils/install-id';
import { trackError } from './utils/usage';
import { addDatabaseDependencies, getDatabaseInfos } from './utils/database';
@ -124,6 +124,10 @@ async function run(args: string[]): Promise<void> {
const tmpPath = join(os.tmpdir(), `strapi${crypto.randomBytes(6).toString('hex')}`);
const randomUUID = crypto.randomUUID();
const uuid = (process.env.STRAPI_UUID_PREFIX || '') + randomUUID;
const installId = installID(uuid);
const scope: Scope = {
rootPath,
name: basename(rootPath),
@ -139,9 +143,9 @@ async function run(args: string[]): Promise<void> {
packageJsonStrapi: {
template: options.template,
},
uuid: (process.env.STRAPI_UUID_PREFIX || '') + crypto.randomUUID(),
uuid,
docker: process.env.DOCKER === 'true',
deviceId: machineID(),
installId,
tmpPath,
gitInit: true,
devDependencies: {},

View File

@ -56,7 +56,7 @@ export interface Scope {
runApp?: boolean;
isQuickstart?: boolean;
uuid?: string;
deviceId?: string;
installId?: string;
database: DatabaseInfo;
tmpPath?: string;
packageJsonStrapi?: Record<string, unknown>;

View File

@ -0,0 +1,13 @@
import crypto from 'crypto';
import { machineIdSync } from 'node-machine-id';
export function installID(projectId?: string) {
try {
const machineId = machineIdSync();
return projectId
? crypto.createHash('sha256').update(`${machineId}-${projectId}`).digest('hex')
: crypto.randomUUID();
} catch {
return crypto.randomUUID();
}
}

View File

@ -1,12 +0,0 @@
import { randomUUID } from 'crypto';
import { machineIdSync } from 'node-machine-id';
export function machineID() {
try {
const deviceId = machineIdSync();
return deviceId;
} catch (error) {
const deviceId = randomUUID();
return deviceId;
}
}

View File

@ -22,6 +22,7 @@ export async function createPackageJSON(scope: Scope) {
strapi: {
...(scope.packageJsonStrapi ?? {}),
uuid: scope.uuid,
installId: scope.installId,
},
engines,
};

View File

@ -81,7 +81,7 @@ export async function trackError({ scope, error }: { scope: Scope; error?: Track
try {
return await trackEvent('didNotCreateProject', {
deviceId: scope.deviceId,
deviceId: scope.installId,
...properties,
});
} catch (err) {
@ -103,7 +103,7 @@ export async function trackUsage({
try {
return await trackEvent(event, {
deviceId: scope.deviceId,
deviceId: scope.installId,
...properties,
});
} catch (err) {

View File

@ -1,6 +1,6 @@
{
"name": "create-strapi",
"version": "5.12.5",
"version": "5.12.6",
"description": "Generate a new Strapi application.",
"keywords": [
"create-strapi",
@ -36,7 +36,7 @@
"bin/"
],
"dependencies": {
"create-strapi-app": "5.12.5"
"create-strapi-app": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -61,4 +61,4 @@ class Widgets {
}
export { Widgets };
export type { WidgetArgs };
export type { WidgetArgs, Widget };

View File

@ -238,7 +238,10 @@ const AuthProvider = ({
const matchingPermissions = actualUserPermissions.filter(
(permission) =>
permissions.findIndex(
(perm) => perm.action === permission.action && perm.subject === permission.subject
(perm) =>
perm.action === permission.action &&
// Only check the subject if it's provided
(perm.subject == undefined || perm.subject === permission.subject)
) >= 0
);

View File

@ -6,6 +6,7 @@ import { useInitQuery, useTelemetryPropertiesQuery } from '../services/admin';
import { useAppInfo } from './AppInfo';
import { useAuth } from './Auth';
import { useStrapiApp } from './StrapiApp';
export interface TelemetryProperties {
useTypescriptOnServer?: boolean;
@ -39,6 +40,7 @@ export interface TrackingProviderProps {
const TrackingProvider = ({ children }: TrackingProviderProps) => {
const token = useAuth('App', (state) => state.token);
const getAllWidgets = useStrapiApp('TrackingProvider', (state) => state.widgets.getAll);
const { data: initData } = useInitQuery();
const { uuid } = initData ?? {};
@ -57,7 +59,11 @@ const TrackingProvider = ({ children }: TrackingProviderProps) => {
event,
userId: '',
eventPropeties: {},
groupProperties: { ...data, projectId: uuid },
groupProperties: {
...data,
projectId: uuid,
registeredWidgets: getAllWidgets().map((widget) => widget.uid),
},
}),
headers: {
'Content-Type': 'application/json',
@ -68,7 +74,7 @@ const TrackingProvider = ({ children }: TrackingProviderProps) => {
// silence is golden
}
}
}, [data, uuid]);
}, [data, uuid, getAllWidgets]);
const value = React.useMemo(
() => ({

View File

@ -69,6 +69,7 @@ export type {
Entity,
} from '../../shared/contracts/shared';
export type { RBACContext, RBACMiddleware } from './core/apis/rbac';
export type { Widget as WidgetType } from './core/apis/Widgets';
/**
* Utils

View File

@ -38,7 +38,6 @@ const AdminLayout = () => {
const { showReleaseNotification } = useConfiguration('AuthenticatedApp');
const { data: appInfo, isLoading: isLoadingAppInfo } = useInformationQuery();
const [tagName, setTagName] = React.useState<string>(strapiVersion);
React.useEffect(() => {

View File

@ -2,7 +2,8 @@ import * as React from 'react';
import { Box, Flex, Grid, Main, Typography } from '@strapi/design-system';
import { CheckCircle, Pencil, PuzzlePiece } from '@strapi/icons';
import { MessageDescriptor, useIntl } from 'react-intl';
import { useIntl } from 'react-intl';
import { Link as ReactRouterLink } from 'react-router-dom';
import { Layouts } from '../../components/Layouts/Layout';
import { Page } from '../../components/PageHelpers';
@ -14,21 +15,50 @@ import { useStrapiApp } from '../../features/StrapiApp';
import { LastEditedWidget, LastPublishedWidget } from './components/ContentManagerWidgets';
import { GuidedTour } from './components/GuidedTour';
import type { WidgetType } from '@strapi/admin/strapi-admin';
/* -------------------------------------------------------------------------------------------------
* WidgetRoot
* -----------------------------------------------------------------------------------------------*/
interface RootProps {
title: MessageDescriptor;
icon?: typeof import('@strapi/icons').PuzzlePiece;
interface WidgetRootProps extends Pick<WidgetType, 'title' | 'icon' | 'permissions' | 'link'> {
children: React.ReactNode;
}
export const WidgetRoot = ({ title, icon = PuzzlePiece, children }: RootProps) => {
export const WidgetRoot = ({
title,
icon = PuzzlePiece,
permissions = [],
children,
link,
}: WidgetRootProps) => {
const { formatMessage } = useIntl();
const id = React.useId();
const Icon = icon;
const [permissionStatus, setPermissionStatus] = React.useState<
'loading' | 'granted' | 'forbidden'
>('loading');
const checkUserHasPermissions = useAuth('WidgetRoot', (state) => state.checkUserHasPermissions);
React.useEffect(() => {
const checkPermissions = async () => {
const matchingPermissions = await checkUserHasPermissions(permissions);
const shouldGrant = matchingPermissions.length >= permissions.length;
setPermissionStatus(shouldGrant ? 'granted' : 'forbidden');
};
if (
// TODO: remove unstable check once widgets API is stable
!window.strapi.future.isEnabled('unstableWidgetsApi') ||
!permissions ||
permissions.length === 0
) {
setPermissionStatus('granted');
} else {
checkPermissions();
}
}, [checkUserHasPermissions, permissions]);
return (
<Flex
width="100%"
@ -43,14 +73,29 @@ export const WidgetRoot = ({ title, icon = PuzzlePiece, children }: RootProps) =
padding={6}
aria-labelledby={id}
>
<Flex direction="row" alignItems="center" gap={2} tag="header">
<Icon fill="neutral500" aria-hidden />
<Typography textColor="neutral500" variant="sigma" tag="h2" id={id}>
{formatMessage(title)}
</Typography>
<Flex direction="row" gap={2} justifyContent="space-between" width="100%" tag="header">
<Flex gap={2}>
<Icon fill="neutral500" aria-hidden />
<Typography textColor="neutral500" variant="sigma" tag="h2" id={id}>
{formatMessage(title)}
</Typography>
</Flex>
{link && (
<Typography
tag={ReactRouterLink}
variant="omega"
textColor="primary600"
style={{ textDecoration: 'none' }}
to={link.href}
>
{formatMessage(link.label)}
</Typography>
)}
</Flex>
<Box width="100%" height="261px" overflow="auto" tag="main">
{children}
{permissionStatus === 'loading' && <Widget.Loading />}
{permissionStatus === 'forbidden' && <Widget.NoPermissions />}
{permissionStatus === 'granted' && children}
</Box>
</Flex>
);
@ -86,6 +131,7 @@ const UnstableHomePageCe = () => {
const { formatMessage } = useIntl();
const user = useAuth('HomePageCE', (state) => state.user);
const displayName = user?.firstname ?? user?.username ?? user?.email;
const getAllWidgets = useStrapiApp('UnstableHomepageCe', (state) => state.widgets.getAll);
return (
@ -110,7 +156,12 @@ const UnstableHomePageCe = () => {
{getAllWidgets().map((widget) => {
return (
<Grid.Item col={6} s={12} key={widget.uid}>
<WidgetRoot title={widget.title} icon={widget.icon}>
<WidgetRoot
title={widget.title}
icon={widget.icon}
permissions={widget.permissions}
link={widget.link}
>
<WidgetComponent component={widget.component} />
</WidgetRoot>
</Grid.Item>

View File

@ -1,5 +1,3 @@
import React from 'react';
import { Box, IconButton, Status, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';
import { Pencil } from '@strapi/icons';
import { useIntl } from 'react-intl';

View File

@ -15,7 +15,7 @@ const homepageService = adminApi
Homepage.GetRecentDocuments.Response['data'],
Homepage.GetRecentDocuments.Request['query']
>({
query: (params) => `/admin/homepage/recent-documents?action=${params.action}`,
query: (params) => `/content-manager/homepage/recent-documents?action=${params.action}`,
transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,
providesTags: (res, _err, { action }) => [
{ type: 'RecentDocumentList' as const, id: action },

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi Admin",
"repository": {
"type": "git",
@ -86,10 +86,10 @@
"@reduxjs/toolkit": "1.9.7",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/permissions": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/typescript-utils": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/permissions": "5.12.6",
"@strapi/types": "5.12.6",
"@strapi/typescript-utils": "5.12.6",
"@strapi/utils": "5.12.6",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",
@ -143,8 +143,8 @@
"zod": "3.24.2"
},
"devDependencies": {
"@strapi/admin-test-utils": "5.12.5",
"@strapi/data-transfer": "5.12.5",
"@strapi/admin-test-utils": "5.12.6",
"@strapi/data-transfer": "5.12.6",
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
"@types/fs-extra": "11.0.4",
"@types/invariant": "2.2.36",

View File

@ -10,7 +10,6 @@ import transfer from './transfer';
import user from './user';
import webhooks from './webhooks';
import contentApi from './content-api';
import { createHomepageController } from './homepage';
export default {
admin,
@ -23,5 +22,4 @@ export default {
user,
webhooks,
'content-api': contentApi,
homepage: createHomepageController,
};

View File

@ -1,15 +0,0 @@
import type { Plugin } from '@strapi/types';
const info = { pluginName: 'admin', type: 'admin' };
export default [
{
method: 'GET',
info,
path: '/homepage/recent-documents',
handler: 'homepage.getRecentDocuments',
config: {
policies: ['admin::isAuthenticatedAdmin'],
},
},
] satisfies Plugin.LoadedPlugin['routes'][string]['routes'];

View File

@ -7,7 +7,6 @@ import webhooks from './webhooks';
import apiTokens from './api-tokens';
import contentApi from './content-api';
import transfer from './transfer';
import homepage from './homepage';
const routes = {
admin: {
@ -22,7 +21,6 @@ const routes = {
...apiTokens,
...contentApi,
...transfer,
...homepage,
],
},
};

View File

@ -1,222 +0,0 @@
import type { Core, Modules, Schema } from '@strapi/types';
import { contentTypes } from '@strapi/utils';
import type { GetRecentDocuments, RecentDocument } from '../../../shared/contracts/homepage';
/**
* TODO: Remove this service when the future flag for the widget api is removed
*/
const createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {
const MAX_DOCUMENTS = 4;
const metadataService = strapi.plugin('content-manager').service('document-metadata');
const permissionService = strapi.admin.services.permission as typeof import('./permission');
type ContentTypeConfiguration = {
uid: RecentDocument['contentTypeUid'];
settings: { mainField: string };
};
const getConfiguration = async (
contentTypeUids: RecentDocument['contentTypeUid'][]
): Promise<ContentTypeConfiguration[]> => {
/**
* Don't use the strapi.store util because we need to make
* more precise queries than exact key matches, in order to make as few queries as possible.
*/
const coreStore = strapi.db.query('strapi::core-store');
const rawConfigurations = await coreStore.findMany({
where: {
key: {
$in: contentTypeUids.map(
(contentType) => `plugin_content_manager_configuration_content_types::${contentType}`
),
},
},
});
return rawConfigurations.map((rawConfiguration) => {
return JSON.parse(rawConfiguration.value);
});
};
const getPermittedContentTypes = async () => {
const readPermissions = await permissionService.findMany({
where: {
role: { users: { id: strapi.requestContext.get()?.state?.user.id } },
action: 'plugin::content-manager.explorer.read',
},
});
return readPermissions
.map((permission) => permission.subject)
.filter(Boolean) as RecentDocument['contentTypeUid'][];
};
type ContentTypeMeta = {
fields: string[];
mainField: string;
contentType: Schema.ContentType;
hasDraftAndPublish: boolean;
uid: RecentDocument['contentTypeUid'];
};
const getContentTypesMeta = (
allowedContentTypeUids: RecentDocument['contentTypeUid'][],
configurations: ContentTypeConfiguration[]
): ContentTypeMeta[] => {
return allowedContentTypeUids.map((uid) => {
const configuration = configurations.find((config) => config.uid === uid);
const contentType = strapi.contentType(uid);
const fields = ['documentId', 'updatedAt'];
// Add fields required to get the status if D&P is enabled
const hasDraftAndPublish = contentTypes.hasDraftAndPublish(contentType);
if (hasDraftAndPublish) {
fields.push('publishedAt');
}
// Only add the main field if it's defined
if (configuration?.settings.mainField) {
fields.push(configuration.settings.mainField);
}
// Only add locale if it's localized
const isLocalized = (contentType.pluginOptions?.i18n as any)?.localized;
if (isLocalized) {
fields.push('locale');
}
return {
fields,
mainField: configuration!.settings.mainField,
contentType,
hasDraftAndPublish,
uid,
};
});
};
const formatDocuments = (documents: Modules.Documents.AnyDocument[], meta: ContentTypeMeta) => {
return documents.map((document) => {
return {
documentId: document.documentId,
locale: document.locale ?? null,
updatedAt: new Date(document.updatedAt),
title: document[meta.mainField ?? 'documentId'],
publishedAt:
meta.hasDraftAndPublish && document.publishedAt ? new Date(document.publishedAt) : null,
contentTypeUid: meta.uid,
contentTypeDisplayName: meta.contentType.info.displayName,
kind: meta.contentType.kind,
};
});
};
const addStatusToDocuments = async (documents: RecentDocument[]): Promise<RecentDocument[]> => {
return Promise.all(
documents.map(async (recentDocument) => {
const hasDraftAndPublish = contentTypes.hasDraftAndPublish(
strapi.contentType(recentDocument.contentTypeUid)
);
/**
* Tries to query the other version of the document if draft and publish is enabled,
* so that we know when to give the "modified" status.
*/
const { availableStatus } = await metadataService.getMetadata(
recentDocument.contentTypeUid,
recentDocument,
{
availableStatus: hasDraftAndPublish,
availableLocales: false,
}
);
const status: RecentDocument['status'] = metadataService.getStatus(
recentDocument,
availableStatus
);
return {
...recentDocument,
status: hasDraftAndPublish ? status : undefined,
};
})
);
};
const permissionCheckerService = strapi.plugin('content-manager').service('permission-checker');
const getPermissionChecker = (uid: string) =>
permissionCheckerService.create({
userAbility: strapi.requestContext.get()?.state.userAbility,
model: uid,
});
return {
async getRecentlyPublishedDocuments(): Promise<GetRecentDocuments.Response['data']> {
const permittedContentTypes = await getPermittedContentTypes();
const allowedContentTypeUids = permittedContentTypes.filter((uid) => {
return contentTypes.hasDraftAndPublish(strapi.contentType(uid));
});
// Fetch the configuration for each content type in a single query
const configurations = await getConfiguration(allowedContentTypeUids);
// Get the necessary metadata for the documents
const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
// Now actually fetch and format the documents
const recentDocuments = await Promise.all(
contentTypesMeta.map(async (meta) => {
const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
limit: MAX_DOCUMENTS,
sort: 'publishedAt:desc',
fields: meta.fields,
status: 'published',
});
const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
return formatDocuments(docs, meta);
})
);
const overallRecentDocuments = recentDocuments
.flat()
.sort((a, b) => {
if (!a.publishedAt || !b.publishedAt) return 0;
return b.publishedAt.valueOf() - a.publishedAt.valueOf();
})
.slice(0, MAX_DOCUMENTS);
return addStatusToDocuments(overallRecentDocuments);
},
async getRecentlyUpdatedDocuments(): Promise<GetRecentDocuments.Response['data']> {
const allowedContentTypeUids = await getPermittedContentTypes();
// Fetch the configuration for each content type in a single query
const configurations = await getConfiguration(allowedContentTypeUids);
// Get the necessary metadata for the documents
const contentTypesMeta = getContentTypesMeta(allowedContentTypeUids, configurations);
// Now actually fetch and format the documents
const recentDocuments = await Promise.all(
contentTypesMeta.map(async (meta) => {
const permissionQuery = await getPermissionChecker(meta.uid).sanitizedQuery.read({
limit: MAX_DOCUMENTS,
sort: 'updatedAt:desc',
fields: meta.fields,
});
const docs = await strapi.documents(meta.uid).findMany(permissionQuery);
return formatDocuments(docs, meta);
})
);
const overallRecentDocuments = recentDocuments
.flat()
.sort((a, b) => {
return b.updatedAt.valueOf() - a.updatedAt.valueOf();
})
.slice(0, MAX_DOCUMENTS);
return addStatusToDocuments(overallRecentDocuments);
},
};
};
export { createHomepageService };

View File

@ -13,7 +13,6 @@ import * as action from './action';
import * as apiToken from './api-token';
import * as transfer from './transfer';
import * as projectSettings from './project-settings';
import { createHomepageService } from './homepage';
// TODO: TS - Export services one by one as this export is cjs
export default {
@ -31,5 +30,4 @@ export default {
'api-token': apiToken,
transfer,
'project-settings': projectSettings,
homepage: createHomepageService,
};

View File

@ -9,7 +9,6 @@ import * as token from '../services/token';
import * as apiToken from '../services/api-token';
import * as projectSettings from '../services/project-settings';
import * as transfer from '../services/transfer';
import { createHomepageService } from '../services/homepage';
type S = {
role: typeof role;
@ -23,7 +22,6 @@ type S = {
'api-token': typeof apiToken;
'project-settings': typeof projectSettings;
transfer: typeof transfer;
homepage: ReturnType<typeof createHomepageService>;
};
type Resolve<T> = T extends (...args: unknown[]) => unknown ? T : { [K in keyof T]: T[K] };

View File

@ -439,6 +439,7 @@ const Component = ({
<Accordion.Trigger>{displayValue}</Accordion.Trigger>
<Accordion.Actions>
<IconButton
disabled={disabled}
variant="ghost"
onClick={onDeleteComponent}
label={formatMessage({
@ -449,6 +450,7 @@ const Component = ({
<Trash />
</IconButton>
<IconButton
disabled={disabled}
ref={composedAccordionRefs}
variant="ghost"
onClick={(e) => e.stopPropagation()}

View File

@ -2,25 +2,29 @@ import * as Homepage from '../../../shared/contracts/homepage';
import { contentManagerApi } from './api';
const homepageService = contentManagerApi.injectEndpoints({
/**
* TODO: Remove overrideExisting when we remove the future flag
* and delete the old homepage service in the admin
*/
overrideExisting: true,
endpoints: (builder) => ({
getRecentDocuments: builder.query<
Homepage.GetRecentDocuments.Response['data'],
Homepage.GetRecentDocuments.Request['query']
>({
query: (params) => `/admin/homepage/recent-documents?action=${params.action}`,
transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,
providesTags: (res, _err, { action }) => [
{ type: 'RecentDocumentList' as const, id: action },
],
const homepageService = contentManagerApi
.enhanceEndpoints({
addTagTypes: ['RecentDocumentList'],
})
.injectEndpoints({
/**
* TODO: Remove overrideExisting when we remove the future flag
* and delete the old homepage service in the admin
*/
overrideExisting: true,
endpoints: (builder) => ({
getRecentDocuments: builder.query<
Homepage.GetRecentDocuments.Response['data'],
Homepage.GetRecentDocuments.Request['query']
>({
query: (params) => `/content-manager/homepage/recent-documents?action=${params.action}`,
transformResponse: (response: Homepage.GetRecentDocuments.Response) => response.data,
providesTags: (res, _err, { action }) => [
{ type: 'RecentDocumentList' as const, id: action },
],
}),
}),
}),
});
});
const { useGetRecentDocumentsQuery } = homepageService;

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/content-manager",
"version": "5.12.5",
"version": "5.12.6",
"description": "A powerful UI to easily manage your data.",
"repository": {
"type": "git",
@ -66,8 +66,8 @@
"@sindresorhus/slugify": "1.1.0",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/types": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/types": "5.12.6",
"@strapi/utils": "5.12.6",
"codemirror5": "npm:codemirror@^5.65.11",
"date-fns": "2.30.0",
"fractional-indexing": "3.2.0",
@ -102,8 +102,8 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/database": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/database": "5.12.6",
"@testing-library/react": "15.0.7",
"@types/jest": "29.5.2",
"@types/lodash": "^4.14.191",

View File

@ -7,6 +7,7 @@ import singleTypes from './single-types';
import uid from './uid';
import history from '../history';
import preview from '../preview';
import homepage from '../homepage';
export default {
'collection-types': collectionTypes,
@ -18,4 +19,5 @@ export default {
uid,
...(history.controllers ? history.controllers : {}),
...(preview.controllers ? preview.controllers : {}),
...homepage.controllers,
};

View File

@ -1,11 +1,10 @@
import type { Core } from '@strapi/types';
import * as yup from 'yup';
import { errors } from '@strapi/utils';
import { getService } from '../utils';
import type { GetRecentDocuments } from '../../../shared/contracts/homepage';
import type { GetRecentDocuments } from '../../../../shared/contracts/homepage';
const createHomepageController = () => {
const homepageService = getService('homepage');
const homepageService = strapi.plugin('content-manager').service('homepage');
const recentDocumentParamsSchema = yup.object().shape({
action: yup

View File

@ -0,0 +1,10 @@
import type { Plugin } from '@strapi/types';
import { createHomepageController } from './homepage';
export const controllers = {
homepage: createHomepageController,
/**
* Casting is needed because the types aren't aware that Strapi supports
* passing a controller factory as the value, instead of a controller object directly
*/
} as unknown as Plugin.LoadedPlugin['controllers'];

View File

@ -0,0 +1,9 @@
import { routes } from './routes';
import { controllers } from './controllers';
import { services } from './services';
export default {
routes,
controllers,
services,
};

View File

@ -0,0 +1,20 @@
import type { Plugin } from '@strapi/types';
const info = { pluginName: 'content-manager', type: 'admin' };
const homepageRouter: Plugin.LoadedPlugin['routes'][string] = {
type: 'admin',
routes: [
{
method: 'GET',
info,
path: '/homepage/recent-documents',
handler: 'homepage.getRecentDocuments',
config: {
policies: ['admin::isAuthenticatedAdmin'],
},
},
],
};
export { homepageRouter };

View File

@ -0,0 +1,10 @@
import type { Plugin } from '@strapi/types';
import { homepageRouter } from './homepage';
/**
* The routes will be merged with the other Content Manager routers,
* so we need to avoid conficts in the router name, and to prefix the path for each route.
*/
export const routes = {
homepage: homepageRouter,
} satisfies Plugin.LoadedPlugin['routes'];

View File

@ -1,7 +1,7 @@
import type { Core, Modules, Schema } from '@strapi/types';
import { contentTypes } from '@strapi/utils';
import type { GetRecentDocuments, RecentDocument } from '../../../shared/contracts/homepage';
import type { GetRecentDocuments, RecentDocument } from '../../../../shared/contracts/homepage';
const createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {
const MAX_DOCUMENTS = 4;

View File

@ -0,0 +1,7 @@
import type { Plugin } from '@strapi/types';
import { createHomepageService } from './homepage';
export const services = {
homepage: createHomepageService,
} satisfies Plugin.LoadedPlugin['services'];

View File

@ -22,8 +22,6 @@ const createPreviewService = ({ strapi }: { strapi: Core.Strapi }) => {
strapi.log.error(`Failed to get preview URL: ${error}`);
throw new errors.ApplicationError('Failed to get preview URL');
}
return;
},
};
};

View File

@ -1,9 +1,11 @@
import admin from './admin';
import history from '../history';
import preview from '../preview';
import homepage from '../homepage';
export default {
admin,
...(history.routes ? history.routes : {}),
...(preview.routes ? preview.routes : {}),
...homepage.routes,
};

View File

@ -9,6 +9,7 @@ import populateBuilder from './populate-builder';
import uid from './uid';
import history from '../history';
import preview from '../preview';
import homepage from '../homepage';
import documentMetadata from './document-metadata';
import documentManager from './document-manager';
@ -26,4 +27,5 @@ export default {
uid,
...(history.services ? history.services : {}),
...(preview.services ? preview.services : {}),
...homepage.services,
};

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/content-releases",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi plugin for organizing and releasing content",
"repository": {
"type": "git",
@ -59,11 +59,11 @@
},
"dependencies": {
"@reduxjs/toolkit": "1.9.7",
"@strapi/database": "5.12.5",
"@strapi/database": "5.12.6",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/types": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/types": "5.12.6",
"@strapi/utils": "5.12.6",
"date-fns": "2.30.0",
"date-fns-tz": "2.0.1",
"formik": "2.4.5",
@ -75,9 +75,9 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/admin-test-utils": "5.12.5",
"@strapi/content-manager": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/admin-test-utils": "5.12.6",
"@strapi/content-manager": "5.12.6",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/content-type-builder",
"version": "5.12.5",
"version": "5.12.6",
"description": "Create and manage content types",
"repository": {
"type": "git",
@ -67,9 +67,9 @@
"@reduxjs/toolkit": "1.9.7",
"@sindresorhus/slugify": "1.1.0",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/generators": "5.12.5",
"@strapi/generators": "5.12.6",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"date-fns": "2.30.0",
"fs-extra": "11.2.0",
"immer": "9.0.21",
@ -82,8 +82,8 @@
"zod": "3.24.2"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/core",
"version": "5.12.5",
"version": "5.12.6",
"description": "Core of Strapi",
"homepage": "https://strapi.io",
"bugs": {
@ -56,14 +56,14 @@
"@koa/cors": "5.0.0",
"@koa/router": "12.0.2",
"@paralleldrive/cuid2": "2.2.2",
"@strapi/admin": "5.12.5",
"@strapi/database": "5.12.5",
"@strapi/generators": "5.12.5",
"@strapi/logger": "5.12.5",
"@strapi/permissions": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/typescript-utils": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/database": "5.12.6",
"@strapi/generators": "5.12.6",
"@strapi/logger": "5.12.6",
"@strapi/permissions": "5.12.6",
"@strapi/types": "5.12.6",
"@strapi/typescript-utils": "5.12.6",
"@strapi/utils": "5.12.6",
"bcryptjs": "2.4.3",
"boxen": "5.1.2",
"chalk": "4.1.2",
@ -126,9 +126,9 @@
"@types/node": "18.19.24",
"@types/node-schedule": "2.1.7",
"@types/statuses": "2.0.1",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"supertest": "6.3.3",
"tsconfig": "5.12.5"
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -60,6 +60,7 @@ export const loadConfiguration = (opts: StrapiOptions) => {
autoReload,
environment: process.env.NODE_ENV,
uuid: _.get(pkgJSON, 'strapi.uuid'),
installId: _.get(pkgJSON, 'strapi.installId'),
packageJsonStrapi: _.omit(_.get(pkgJSON, 'strapi', {}), 'uuid'),
info: {
...pkgJSON,

View File

@ -3,7 +3,7 @@ import { join, resolve } from 'path';
import crypto from 'crypto';
import type { Core } from '@strapi/types';
import { machineID } from '@strapi/utils';
import { generateInstallId } from '@strapi/utils';
interface LicenseInfo {
type: 'bronze' | 'silver' | 'gold';
@ -88,11 +88,17 @@ const fetchLicense = async (
key: string,
projectId: string
) => {
const { installId: installIdFromPackageJson } = strapi.config;
const response = await strapi
.fetch(`https://license.strapi.io/api/licenses/validate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key, projectId, deviceId: machineID() }),
body: JSON.stringify({
key,
projectId,
deviceId: generateInstallId(projectId, installIdFromPackageJson),
}), // NOTE: Doing nothing on the LR with the installId
})
.catch(throwError);

View File

@ -6,6 +6,7 @@ import type { Core } from '@strapi/types';
*/
const generateAdminUserHash = (strapi: Core.Strapi) => {
const ctx = strapi?.requestContext?.get();
if (!ctx?.state?.user?.email) {
return '';
}

View File

@ -4,7 +4,7 @@ import _ from 'lodash';
import isDocker from 'is-docker';
import ciEnv from 'ci-info';
import tsUtils from '@strapi/typescript-utils';
import { env, machineID } from '@strapi/utils';
import { env, generateInstallId } from '@strapi/utils';
import type { Core } from '@strapi/types';
import { generateAdminUserHash } from './admin-user-hash';
@ -40,8 +40,9 @@ const addPackageJsonStrapiMetadata = (metadata: Record<string, unknown>, strapi:
* Create a send function for event with all the necessary metadata
*/
export default (strapi: Core.Strapi): Sender => {
const { uuid } = strapi.config;
const deviceId = machineID();
const { uuid, installId: installIdFromPackageJson } = strapi.config;
const installId = generateInstallId(uuid, installIdFromPackageJson);
const serverRootPath = strapi.dirs.app.root;
const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin');
@ -75,7 +76,7 @@ export default (strapi: Core.Strapi): Sender => {
body: JSON.stringify({
event,
userId,
deviceId,
installId,
eventProperties: payload.eventProperties,
userProperties: userId ? { ...anonymousUserProperties, ...payload.userProperties } : {},
groupProperties: {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/data-transfer",
"version": "5.12.5",
"version": "5.12.6",
"description": "Data transfer capabilities for Strapi",
"keywords": [
"strapi",
@ -42,9 +42,9 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/logger": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/logger": "5.12.6",
"@strapi/types": "5.12.6",
"@strapi/utils": "5.12.6",
"chalk": "4.1.2",
"cli-table3": "0.6.5",
"commander": "8.3.0",
@ -61,7 +61,7 @@
"ws": "8.17.1"
},
"devDependencies": {
"@strapi/database": "5.12.5",
"@strapi/database": "5.12.6",
"@types/fs-extra": "11.0.4",
"@types/jest": "29.5.2",
"@types/koa": "2.13.4",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/database",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi's database layer",
"homepage": "https://strapi.io",
"bugs": {
@ -42,7 +42,7 @@
},
"dependencies": {
"@paralleldrive/cuid2": "2.2.2",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"ajv": "8.16.0",
"date-fns": "2.30.0",
"debug": "4.3.4",
@ -54,8 +54,8 @@
},
"devDependencies": {
"@types/fs-extra": "11.0.4",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/email",
"version": "5.12.5",
"version": "5.12.6",
"description": "Easily configure your Strapi application to send emails.",
"repository": {
"type": "git",
@ -58,8 +58,8 @@
"dependencies": {
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/provider-email-sendmail": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/provider-email-sendmail": "5.12.6",
"@strapi/utils": "5.12.6",
"koa2-ratelimit": "^1.1.3",
"lodash": "4.17.21",
"react-intl": "6.6.2",
@ -67,8 +67,8 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/react": "15.0.7",
"@types/koa": "2.13.4",
"@types/lodash": "^4.14.191",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/permissions",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi's permission layer.",
"repository": {
"type": "git",
@ -39,14 +39,14 @@
},
"dependencies": {
"@casl/ability": "6.5.0",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"lodash": "4.17.21",
"qs": "6.11.1",
"sift": "16.0.1"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/review-workflows",
"version": "5.12.5",
"version": "5.12.6",
"description": "Review workflows for your content",
"repository": {
"type": "git",
@ -59,7 +59,7 @@
"@reduxjs/toolkit": "1.9.7",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"fractional-indexing": "3.2.0",
"react-dnd": "16.0.1",
"react-dnd-html5-backend": "16.0.1",
@ -69,9 +69,9 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/content-manager": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/content-manager": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/react": "15.0.7",
"msw": "1.3.0",
"react": "18.3.1",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/strapi",
"version": "5.12.5",
"version": "5.12.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",
@ -110,24 +110,24 @@
},
"dependencies": {
"@pmmmwh/react-refresh-webpack-plugin": "0.5.15",
"@strapi/admin": "5.12.5",
"@strapi/cloud-cli": "5.12.5",
"@strapi/content-manager": "5.12.5",
"@strapi/content-releases": "5.12.5",
"@strapi/content-type-builder": "5.12.5",
"@strapi/core": "5.12.5",
"@strapi/data-transfer": "5.12.5",
"@strapi/database": "5.12.5",
"@strapi/email": "5.12.5",
"@strapi/generators": "5.12.5",
"@strapi/i18n": "5.12.5",
"@strapi/logger": "5.12.5",
"@strapi/permissions": "5.12.5",
"@strapi/review-workflows": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/typescript-utils": "5.12.5",
"@strapi/upload": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/cloud-cli": "5.12.6",
"@strapi/content-manager": "5.12.6",
"@strapi/content-releases": "5.12.6",
"@strapi/content-type-builder": "5.12.6",
"@strapi/core": "5.12.6",
"@strapi/data-transfer": "5.12.6",
"@strapi/database": "5.12.6",
"@strapi/email": "5.12.6",
"@strapi/generators": "5.12.6",
"@strapi/i18n": "5.12.6",
"@strapi/logger": "5.12.6",
"@strapi/permissions": "5.12.6",
"@strapi/review-workflows": "5.12.6",
"@strapi/types": "5.12.6",
"@strapi/typescript-utils": "5.12.6",
"@strapi/upload": "5.12.6",
"@strapi/utils": "5.12.6",
"@types/nodemon": "1.19.6",
"@vitejs/plugin-react-swc": "3.6.0",
"boxen": "5.1.2",
@ -181,11 +181,11 @@
"@types/node": "18.19.24",
"@types/webpack-bundle-analyzer": "4.7.0",
"@types/webpack-hot-middleware": "2.25.9",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"jest": "29.6.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"tsconfig": "5.12.5"
"tsconfig": "5.12.6"
},
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0",

View File

@ -11,8 +11,9 @@ const readPackageJSON = async (path: string) => {
try {
const packageObj = await fse.readJson(path);
const uuid = packageObj.strapi ? packageObj.strapi.uuid : null;
const installId = packageObj.strapi ? packageObj.strapi.installId : null;
return { uuid, packageObj };
return { uuid, installId, packageObj };
} catch (err) {
if (err instanceof Error) {
console.error(`${chalk.red('Error')}: ${err.message}`);
@ -40,7 +41,7 @@ const action = async () => {
process.exit(0);
}
const { uuid, packageObj } = (await readPackageJSON(packageJSONPath)) ?? {};
const { uuid, installId, packageObj } = (await readPackageJSON(packageJSONPath)) ?? {};
if ((packageObj.strapi && packageObj.strapi.telemetryDisabled) || !uuid) {
console.log(`${chalk.yellow('Warning:')} telemetry is already disabled`);
@ -66,7 +67,7 @@ const action = async () => {
process.exit(0);
}
await sendEvent('didOptOutTelemetry', uuid);
await sendEvent('didOptOutTelemetry', uuid, installId);
console.log(`${chalk.green('Successfully opted out of Strapi telemetry')}`);
process.exit(0);
};

View File

@ -11,6 +11,7 @@ import { sendEvent } from '../../utils/telemetry';
type PackageJson = {
strapi?: {
uuid?: string;
installId?: string;
telemetryDisabled?: boolean;
};
};
@ -94,7 +95,11 @@ const action = async () => {
process.exit(0);
}
await sendEvent('didOptInTelemetry', updatedPackageJSON.strapi.uuid);
await sendEvent(
'didOptInTelemetry',
updatedPackageJSON.strapi.uuid,
updatedPackageJSON.strapi?.installId
);
console.log(`${chalk.green('Successfully opted into and enabled Strapi telemetry')}`);
process.exit(0);
};

View File

@ -286,7 +286,7 @@ const loadersFactory = (defaultLoaders: Loaders = {} as Loaders) => {
const speed =
elapsedTime > 0 ? `(${readableBytes(((stageData?.bytes ?? 0) * 1000) / elapsedTime)}/s)` : '';
loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transfered (${size}) (${elapsed}) ${
loaders[stage].text = `${stage}: ${stageData?.count ?? 0} transferred (${size}) (${elapsed}) ${
!stageData?.endTime ? speed : ''
}`;

View File

@ -1,12 +1,12 @@
import { machineID } from '@strapi/utils';
import { generateInstallId } from '@strapi/utils';
export const sendEvent = async (event: string, uuid: string) => {
export const sendEvent = async (event: string, uuid: string, installId?: any) => {
try {
await fetch('https://analytics.strapi.io/api/v2/track', {
method: 'POST',
body: JSON.stringify({
event,
deviceId: machineID(),
deviceId: generateInstallId(uuid, installId),
groupProperties: { projectId: uuid },
}),
headers: {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/types",
"version": "5.12.5",
"version": "5.12.6",
"description": "Shared typescript types for Strapi internal use",
"keywords": [
"strapi"
@ -46,10 +46,10 @@
"@casl/ability": "6.5.0",
"@koa/cors": "5.0.0",
"@koa/router": "12.0.2",
"@strapi/database": "5.12.5",
"@strapi/logger": "5.12.5",
"@strapi/permissions": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/database": "5.12.6",
"@strapi/logger": "5.12.6",
"@strapi/permissions": "5.12.6",
"@strapi/utils": "5.12.6",
"commander": "8.3.0",
"koa": "2.15.4",
"koa-body": "6.0.1",
@ -64,9 +64,9 @@
"@types/koa": "2.13.4",
"@types/koa__router": "12.0.0",
"@types/node-schedule": "2.1.7",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"lodash": "4.17.21",
"tsconfig": "5.12.5",
"tsconfig": "5.12.6",
"typescript": "5.4.4",
"undici": "6.21.2"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/upload",
"version": "5.12.5",
"version": "5.12.6",
"description": "Makes it easy to upload images and files to your Strapi Application.",
"license": "SEE LICENSE IN LICENSE",
"author": {
@ -63,8 +63,8 @@
"@mux/mux-player-react": "3.1.0",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/provider-upload-local": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/provider-upload-local": "5.12.6",
"@strapi/utils": "5.12.6",
"byte-size": "8.1.1",
"cropperjs": "1.6.1",
"date-fns": "2.30.0",
@ -86,8 +86,8 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/utils",
"version": "5.12.5",
"version": "5.12.6",
"description": "Shared utilities for the Strapi packages",
"keywords": [
"strapi",
@ -61,10 +61,10 @@
"@types/http-errors": "2.0.4",
"@types/koa": "2.13.4",
"@types/node": "18.19.24",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"koa": "2.15.4",
"koa-body": "6.0.1",
"tsconfig": "5.12.5"
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -4,7 +4,7 @@ export { default as setCreatorFields } from './set-creator-fields';
export { default as providerFactory } from './provider-factory';
export { default as traverseEntity } from './traverse-entity';
export { default as importDefault } from './import-default';
export { default as machineID } from './machine-id';
export { generateInstallId } from './install-id';
export { validateYupSchema, validateYupSchemaSync } from './validators';
export { isOperator, isOperatorOfType } from './operators';

View File

@ -0,0 +1,14 @@
import crypto from 'crypto';
import { machineIdSync } from 'node-machine-id';
export const generateInstallId = (projectId: string, installId: string) => {
if (installId) return installId;
try {
const machineId = machineIdSync();
return projectId
? crypto.createHash('sha256').update(`${machineId}-${projectId}`).digest('hex')
: crypto.randomUUID();
} catch (error) {
return crypto.randomUUID();
}
};

View File

@ -1,12 +0,0 @@
import { randomUUID } from 'crypto';
import { machineIdSync } from 'node-machine-id';
export default () => {
try {
const deviceId = machineIdSync();
return deviceId;
} catch (error) {
const deviceId = randomUUID();
return deviceId;
}
};

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/generators",
"version": "5.12.5",
"version": "5.12.6",
"description": "Interactive API generator.",
"keywords": [
"strapi",
@ -49,8 +49,8 @@
},
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/typescript-utils": "5.12.5",
"@strapi/utils": "5.12.5",
"@strapi/typescript-utils": "5.12.6",
"@strapi/utils": "5.12.6",
"chalk": "4.1.2",
"copyfiles": "2.4.1",
"fs-extra": "11.2.0",
@ -60,8 +60,8 @@
},
"devDependencies": {
"@types/fs-extra": "11.0.4",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-cloud",
"version": "5.12.5",
"version": "5.12.6",
"description": "Instructions to deploy your local project to Strapi Cloud",
"license": "MIT",
"author": {
@ -45,13 +45,13 @@
"react-intl": "6.6.2"
},
"devDependencies": {
"@strapi/strapi": "5.12.5",
"eslint-config-custom": "5.12.5",
"@strapi/strapi": "5.12.6",
"eslint-config-custom": "5.12.6",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-router-dom": "6.22.3",
"styled-components": "6.1.8",
"tsconfig": "5.12.5",
"tsconfig": "5.12.6",
"typescript": "5.4.4"
},
"peerDependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-color-picker",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi maintained Custom Fields",
"repository": {
"type": "git",
@ -63,7 +63,7 @@
"react-intl": "6.6.2"
},
"devDependencies": {
"@strapi/strapi": "5.12.5",
"@strapi/strapi": "5.12.6",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",
"react": "18.3.1",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-documentation",
"version": "5.12.5",
"version": "5.12.6",
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
"repository": {
"type": "git",
@ -59,10 +59,10 @@
},
"dependencies": {
"@reduxjs/toolkit": "1.9.7",
"@strapi/admin": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"bcryptjs": "2.4.3",
"cheerio": "^1.0.0",
"formik": "2.4.5",
@ -78,9 +78,9 @@
},
"devDependencies": {
"@apidevtools/swagger-parser": "^10.1.0",
"@strapi/admin-test-utils": "5.12.5",
"@strapi/strapi": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin-test-utils": "5.12.6",
"@strapi/strapi": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",
"@types/fs-extra": "11.0.4",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-graphql",
"version": "5.12.5",
"version": "5.12.6",
"description": "Adds GraphQL endpoint with default API methods.",
"repository": {
"type": "git",
@ -59,7 +59,7 @@
"@koa/cors": "5.0.0",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"graphql": "^16.8.1",
"graphql-depth-limit": "^1.1.0",
"graphql-playground-middleware-koa": "^1.6.21",
@ -71,19 +71,19 @@
"pluralize": "8.0.0"
},
"devDependencies": {
"@strapi/strapi": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/strapi": "5.12.6",
"@strapi/types": "5.12.6",
"@types/graphql-depth-limit": "1.1.5",
"@types/koa-bodyparser": "4.3.12",
"@types/koa__cors": "5.0.0",
"cross-env": "^7.0.3",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"koa": "2.15.4",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-router-dom": "6.22.3",
"styled-components": "6.1.8",
"tsconfig": "5.12.5",
"tsconfig": "5.12.6",
"typescript": "5.4.4"
},
"peerDependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/i18n",
"version": "5.12.5",
"version": "5.12.6",
"description": "Create read and update content in different languages, both from the Admin Panel and from the API",
"repository": {
"type": "git",
@ -59,7 +59,7 @@
"@reduxjs/toolkit": "1.9.7",
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"lodash": "4.17.21",
"qs": "6.11.1",
"react-intl": "6.6.2",
@ -67,10 +67,10 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/admin": "5.12.5",
"@strapi/admin-test-utils": "5.12.5",
"@strapi/content-manager": "5.12.5",
"@strapi/types": "5.12.5",
"@strapi/admin": "5.12.6",
"@strapi/admin-test-utils": "5.12.6",
"@strapi/content-manager": "5.12.6",
"@strapi/types": "5.12.6",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",
"msw": "1.3.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-sentry",
"version": "5.12.5",
"version": "5.12.6",
"description": "Send Strapi error events to Sentry",
"repository": {
"type": "git",
@ -58,7 +58,7 @@
"@strapi/icons": "2.0.0-rc.23"
},
"devDependencies": {
"@strapi/strapi": "5.12.5",
"@strapi/strapi": "5.12.6",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-router-dom": "6.22.3",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-users-permissions",
"version": "5.12.5",
"version": "5.12.6",
"description": "Protect your API with a full-authentication process based on JWT",
"repository": {
"type": "git",
@ -50,7 +50,7 @@
"dependencies": {
"@strapi/design-system": "2.0.0-rc.23",
"@strapi/icons": "2.0.0-rc.23",
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"bcryptjs": "2.4.3",
"formik": "2.4.5",
"grant": "^5.4.8",
@ -69,7 +69,7 @@
"yup": "0.32.9"
},
"devDependencies": {
"@strapi/strapi": "5.12.5",
"@strapi/strapi": "5.12.6",
"@testing-library/dom": "10.1.0",
"@testing-library/react": "15.0.7",
"@testing-library/user-event": "14.5.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-amazon-ses",
"version": "5.12.5",
"version": "5.12.6",
"description": "Amazon SES provider for strapi email",
"keywords": [
"email",
@ -44,12 +44,12 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"node-ses": "^3.0.3"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-mailgun",
"version": "5.12.5",
"version": "5.12.6",
"description": "Mailgun provider for strapi email plugin",
"keywords": [
"email",
@ -46,13 +46,13 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"form-data": "^4.0.0",
"mailgun.js": "10.2.1"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-nodemailer",
"version": "5.12.5",
"version": "5.12.6",
"description": "Nodemailer provider for Strapi 3",
"keywords": [
"strapi",
@ -62,8 +62,8 @@
},
"devDependencies": {
"@types/nodemailer": "6.4.7",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendgrid",
"version": "5.12.5",
"version": "5.12.6",
"description": "Sendgrid provider for strapi email",
"keywords": [
"email",
@ -45,11 +45,11 @@
},
"dependencies": {
"@sendgrid/mail": "8.1.3",
"@strapi/utils": "5.12.5"
"@strapi/utils": "5.12.6"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendmail",
"version": "5.12.5",
"version": "5.12.6",
"description": "Sendmail provider for strapi email",
"keywords": [
"email",
@ -43,13 +43,13 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"sendmail": "^1.6.1"
},
"devDependencies": {
"@types/sendmail": "1.4.4",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-aws-s3",
"version": "5.12.5",
"version": "5.12.6",
"description": "AWS S3 provider for strapi upload",
"keywords": [
"upload",
@ -55,8 +55,8 @@
},
"devDependencies": {
"@types/jest": "29.5.2",
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-cloudinary",
"version": "5.12.5",
"version": "5.12.6",
"description": "Cloudinary provider for strapi upload",
"keywords": [
"upload",
@ -44,13 +44,13 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"cloudinary": "^1.41.0",
"into-stream": "^5.1.0"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-local",
"version": "5.12.5",
"version": "5.12.6",
"description": "Local provider for strapi upload",
"keywords": [
"upload",
@ -45,16 +45,16 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"fs-extra": "11.2.0"
},
"devDependencies": {
"@strapi/types": "5.12.5",
"@strapi/types": "5.12.6",
"@types/fs-extra": "11.0.4",
"@types/jest": "29.5.2",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"memfs": "4.6.0",
"tsconfig": "5.12.5"
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "api-tests",
"version": "5.12.5",
"version": "5.12.6",
"private": true,
"dependencies": {
"dotenv": "16.4.5",

View File

@ -1,6 +1,6 @@
{
"name": "eslint-config-custom",
"version": "5.12.5",
"version": "5.12.6",
"private": true,
"main": "index.js"
}

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/logger",
"version": "5.12.5",
"version": "5.12.6",
"description": "Strapi's logger",
"homepage": "https://strapi.io",
"bugs": {
@ -44,8 +44,8 @@
"winston": "3.10.0"
},
"devDependencies": {
"eslint-config-custom": "5.12.5",
"tsconfig": "5.12.5"
"eslint-config-custom": "5.12.6",
"tsconfig": "5.12.6"
},
"engines": {
"node": ">=18.0.0 <=22.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "tsconfig",
"version": "5.12.5",
"version": "5.12.6",
"private": true,
"devDependencies": {
"@tsconfig/node18": "18.2.2"

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/upgrade",
"version": "5.12.5",
"version": "5.12.6",
"description": "CLI to upgrade Strapi applications effortless",
"keywords": [
"strapi",
@ -61,7 +61,7 @@
"watch": "run -T rollup -c -w"
},
"dependencies": {
"@strapi/utils": "5.12.5",
"@strapi/utils": "5.12.6",
"chalk": "4.1.2",
"cli-table3": "0.6.2",
"commander": "8.3.0",
@ -77,10 +77,10 @@
"simple-git": "3.21.0"
},
"devDependencies": {
"@strapi/types": "5.12.5",
"@strapi/types": "5.12.6",
"@types/fs-extra": "11.0.4",
"@types/jscodeshift": "0.12.0",
"eslint-config-custom": "5.12.5",
"eslint-config-custom": "5.12.6",
"rimraf": "5.0.5"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "scripts-front",
"version": "5.12.5",
"version": "5.12.6",
"private": true,
"scripts": {
"test:front": "jest --config jest.config.front.js"

View File

@ -120,7 +120,7 @@ describe('Homepage API', () => {
it('requires action param', async () => {
const response = await rq({
method: 'GET',
url: '/admin/homepage/recent-documents',
url: '/content-manager/homepage/recent-documents',
});
expect(response.statusCode).toBe(400);
@ -177,7 +177,7 @@ describe('Homepage API', () => {
const response = await rq({
method: 'GET',
url: '/admin/homepage/recent-documents?action=update',
url: '/content-manager/homepage/recent-documents?action=update',
});
// Assert the response
@ -237,13 +237,13 @@ describe('Homepage API', () => {
await strapi.documents(authorUid).update({
documentId: author.documentId,
data: {
name: `John Lennon`,
name: 'John Lennon',
},
});
const response = await rq({
method: 'GET',
url: '/admin/homepage/recent-documents?action=publish',
url: '/content-manager/homepage/recent-documents?action=publish',
});
expect(response.statusCode).toBe(200);

View File

@ -1,21 +1,81 @@
'use strict';
import { prop } from 'lodash/fp';
import { createTestBuilder } from 'api-tests/builder';
import { createStrapiInstance } from 'api-tests/strapi';
import { createRequest, createAuthRequest } from 'api-tests/request';
import { createUtils } from 'api-tests/utils';
const { prop } = require('lodash/fp');
const { createTestBuilder } = require('api-tests/builder');
const { createStrapiInstance } = require('api-tests/strapi');
const { createRequest, createAuthRequest } = require('api-tests/request');
const { createUtils } = require('api-tests/utils');
interface Article {
singularName: string;
pluralName: string;
displayName: string;
attributes: {
title: {
type: string;
};
price: {
type: string;
};
};
}
interface Entry {
name: string;
price: number;
documentId?: string;
}
interface Role {
id?: number;
name: string;
description: string;
permissions?: Permission[];
}
interface Permission {
action: string;
subject: string;
fields: null;
conditions: string[];
}
interface User {
id?: number;
firstname?: string;
lastName?: string;
lastname?: string;
firstName?: string;
email: string;
password?: string;
roles?: number[];
}
interface TestData {
models: {
article: Article;
};
entry: Entry;
role: Role;
permissions: Permission[];
userPassword: string;
users: User[];
}
interface Requests {
public: any;
admin: any;
[key: number]: any;
}
describe('Admin Permissions - Conditions', () => {
let strapi;
let utils;
let strapi: any;
let utils: any;
const builder = createTestBuilder();
const requests = {
const requests: Requests = {
public: null,
admin: null,
};
const localTestData = {
const localTestData: TestData = {
models: {
article: {
singularName: 'article',
@ -67,7 +127,7 @@ describe('Admin Permissions - Conditions', () => {
],
};
const createFixtures = async () => {
const createFixtures = async (): Promise<void> => {
// Login with admin and init admin tools
requests.admin = await createAuthRequest({ strapi });
requests.public = createRequest({ strapi });
@ -84,7 +144,7 @@ describe('Admin Permissions - Conditions', () => {
Object.assign(role, { permissions });
// Create users with the new roles & create associated auth requests
const users = [];
const users: User[] = [];
for (let i = 0; i < localTestData.users.length; i += 1) {
const userFixture = localTestData.users[i];
@ -105,10 +165,10 @@ describe('Admin Permissions - Conditions', () => {
Object.assign(localTestData, { role, permissions, users });
};
const getUserRequest = (idx) => requests[localTestData.users[idx].id];
const getUserRequest = (idx: number) => requests[localTestData.users[idx].id];
const getModelName = () => localTestData.models.article.singularName;
const deleteFixtures = async () => {
const deleteFixtures = async (): Promise<void> => {
// Delete users
const usersId = localTestData.users.map(prop('id'));
await utils.deleteUsersById(usersId);
@ -174,7 +234,7 @@ describe('Admin Permissions - Conditions', () => {
// The document should also be available in the homepage content manager widgets
const homepageRecentlyUpdatedRes = await rq({
method: 'GET',
url: '/admin/homepage/recent-documents?action=update',
url: '/content-manager/homepage/recent-documents?action=update',
});
expect(homepageRecentlyUpdatedRes.statusCode).toBe(200);
@ -198,7 +258,7 @@ describe('Admin Permissions - Conditions', () => {
// The document should not be available in the homepage content manager widgets
const homepageRecentlyUpdatedRes = await rq({
method: 'GET',
url: '/admin/homepage/recent-documents?action=update',
url: '/content-manager/homepage/recent-documents?action=update',
});
expect(homepageRecentlyUpdatedRes.statusCode).toBe(200);

336
yarn.lock
View File

@ -8617,18 +8617,18 @@ __metadata:
languageName: node
linkType: hard
"@strapi/admin-test-utils@npm:5.12.5, @strapi/admin-test-utils@workspace:*, @strapi/admin-test-utils@workspace:packages/admin-test-utils":
"@strapi/admin-test-utils@npm:5.12.6, @strapi/admin-test-utils@workspace:*, @strapi/admin-test-utils@workspace:packages/admin-test-utils":
version: 0.0.0-use.local
resolution: "@strapi/admin-test-utils@workspace:packages/admin-test-utils"
dependencies:
"@juggle/resize-observer": "npm:3.4.0"
"@reduxjs/toolkit": "npm:1.9.7"
"@testing-library/jest-dom": "npm:6.4.5"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
jest-environment-jsdom: "npm:29.6.1"
jest-styled-components: "npm:7.1.1"
styled-components: "npm:6.1.8"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
whatwg-fetch: "npm:3.6.2"
peerDependencies:
"@reduxjs/toolkit": ^1.9.7
@ -8638,7 +8638,7 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/admin@npm:5.12.5, @strapi/admin@workspace:packages/core/admin":
"@strapi/admin@npm:5.12.6, @strapi/admin@workspace:packages/core/admin":
version: 0.0.0-use.local
resolution: "@strapi/admin@workspace:packages/core/admin"
dependencies:
@ -8647,14 +8647,14 @@ __metadata:
"@radix-ui/react-context": "npm:1.0.1"
"@radix-ui/react-toolbar": "npm:1.0.4"
"@reduxjs/toolkit": "npm:1.9.7"
"@strapi/admin-test-utils": "npm:5.12.5"
"@strapi/data-transfer": "npm:5.12.5"
"@strapi/admin-test-utils": "npm:5.12.6"
"@strapi/data-transfer": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/permissions": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/typescript-utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/permissions": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/typescript-utils": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/dom": "npm:10.1.0"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
@ -8739,11 +8739,11 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/cloud-cli@npm:5.12.5, @strapi/cloud-cli@workspace:packages/cli/cloud":
"@strapi/cloud-cli@npm:5.12.6, @strapi/cloud-cli@workspace:packages/cli/cloud":
version: 0.0.0-use.local
resolution: "@strapi/cloud-cli@workspace:packages/cli/cloud"
dependencies:
"@strapi/utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
"@types/cli-progress": "npm:3.11.5"
"@types/eventsource": "npm:1.1.15"
"@types/lodash": "npm:^4.14.191"
@ -8752,7 +8752,7 @@ __metadata:
chalk: "npm:4.1.2"
cli-progress: "npm:3.12.0"
commander: "npm:8.3.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
eventsource: "npm:2.0.2"
fast-safe-stringify: "npm:2.1.1"
fs-extra: "npm:11.2.0"
@ -8765,7 +8765,7 @@ __metadata:
ora: "npm:5.4.1"
pkg-up: "npm:3.1.0"
tar: "npm:6.2.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
xdg-app-paths: "npm:8.3.0"
yup: "npm:0.32.9"
bin:
@ -8773,19 +8773,19 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/content-manager@npm:5.12.5, @strapi/content-manager@workspace:packages/core/content-manager":
"@strapi/content-manager@npm:5.12.6, @strapi/content-manager@workspace:packages/core/content-manager":
version: 0.0.0-use.local
resolution: "@strapi/content-manager@workspace:packages/core/content-manager"
dependencies:
"@radix-ui/react-toolbar": "npm:1.0.4"
"@reduxjs/toolkit": "npm:1.9.7"
"@sindresorhus/slugify": "npm:1.1.0"
"@strapi/admin": "npm:5.12.5"
"@strapi/database": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/database": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
"@types/jest": "npm:29.5.2"
"@types/lodash": "npm:^4.14.191"
@ -8837,19 +8837,19 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/content-releases@npm:5.12.5, @strapi/content-releases@workspace:packages/core/content-releases":
"@strapi/content-releases@npm:5.12.6, @strapi/content-releases@workspace:packages/core/content-releases":
version: 0.0.0-use.local
resolution: "@strapi/content-releases@workspace:packages/core/content-releases"
dependencies:
"@reduxjs/toolkit": "npm:1.9.7"
"@strapi/admin": "npm:5.12.5"
"@strapi/admin-test-utils": "npm:5.12.5"
"@strapi/content-manager": "npm:5.12.5"
"@strapi/database": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/admin-test-utils": "npm:5.12.6"
"@strapi/content-manager": "npm:5.12.6"
"@strapi/database": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/dom": "npm:10.1.0"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
@ -8881,7 +8881,7 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/content-type-builder@npm:5.12.5, @strapi/content-type-builder@workspace:packages/core/content-type-builder":
"@strapi/content-type-builder@npm:5.12.6, @strapi/content-type-builder@workspace:packages/core/content-type-builder":
version: 0.0.0-use.local
resolution: "@strapi/content-type-builder@workspace:packages/core/content-type-builder"
dependencies:
@ -8891,12 +8891,12 @@ __metadata:
"@dnd-kit/utilities": "npm:3.2.2"
"@reduxjs/toolkit": "npm:1.9.7"
"@sindresorhus/slugify": "npm:1.1.0"
"@strapi/admin": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/generators": "npm:5.12.5"
"@strapi/generators": "npm:5.12.6"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/dom": "npm:10.1.0"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
@ -8928,22 +8928,22 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/core@npm:5.12.5, @strapi/core@workspace:packages/core/core":
"@strapi/core@npm:5.12.6, @strapi/core@workspace:packages/core/core":
version: 0.0.0-use.local
resolution: "@strapi/core@workspace:packages/core/core"
dependencies:
"@koa/cors": "npm:5.0.0"
"@koa/router": "npm:12.0.2"
"@paralleldrive/cuid2": "npm:2.2.2"
"@strapi/admin": "npm:5.12.5"
"@strapi/database": "npm:5.12.5"
"@strapi/generators": "npm:5.12.5"
"@strapi/logger": "npm:5.12.5"
"@strapi/permissions": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/database": "npm:5.12.6"
"@strapi/generators": "npm:5.12.6"
"@strapi/logger": "npm:5.12.6"
"@strapi/permissions": "npm:5.12.6"
"@strapi/ts-zen": "npm:^0.2.0"
"@strapi/types": "npm:5.12.5"
"@strapi/typescript-utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/typescript-utils": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@swc/core": "npm:1.9.3"
"@types/bcryptjs": "npm:2.4.3"
"@types/configstore": "npm:5.0.1"
@ -8973,7 +8973,7 @@ __metadata:
debug: "npm:4.3.4"
delegates: "npm:1.0.0"
dotenv: "npm:16.4.5"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
execa: "npm:5.1.1"
fs-extra: "npm:11.2.0"
glob: "npm:10.3.10"
@ -9002,21 +9002,21 @@ __metadata:
semver: "npm:7.5.4"
statuses: "npm:2.0.1"
supertest: "npm:6.3.3"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
typescript: "npm:5.4.4"
undici: "npm:6.21.2"
yup: "npm:0.32.9"
languageName: unknown
linkType: soft
"@strapi/data-transfer@npm:5.12.5, @strapi/data-transfer@workspace:packages/core/data-transfer":
"@strapi/data-transfer@npm:5.12.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/database": "npm:5.12.5"
"@strapi/logger": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/database": "npm:5.12.6"
"@strapi/logger": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
"@types/jest": "npm:29.5.2"
"@types/koa": "npm:2.13.4"
@ -9049,22 +9049,22 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/database@npm:5.12.5, @strapi/database@workspace:packages/core/database":
"@strapi/database@npm:5.12.6, @strapi/database@workspace:packages/core/database":
version: 0.0.0-use.local
resolution: "@strapi/database@workspace:packages/core/database"
dependencies:
"@paralleldrive/cuid2": "npm:2.2.2"
"@strapi/utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
ajv: "npm:8.16.0"
date-fns: "npm:2.30.0"
debug: "npm:4.3.4"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
fs-extra: "npm:11.2.0"
knex: "npm:3.0.1"
lodash: "npm:4.17.21"
semver: "npm:7.5.4"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
umzug: "npm:3.8.1"
languageName: unknown
linkType: soft
@ -9107,16 +9107,16 @@ __metadata:
languageName: node
linkType: hard
"@strapi/email@npm:5.12.5, @strapi/email@workspace:packages/core/email":
"@strapi/email@npm:5.12.6, @strapi/email@workspace:packages/core/email":
version: 0.0.0-use.local
resolution: "@strapi/email@workspace:packages/core/email"
dependencies:
"@strapi/admin": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/provider-email-sendmail": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/provider-email-sendmail": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
"@types/koa": "npm:2.13.4"
"@types/lodash": "npm:^4.14.191"
@ -9173,37 +9173,37 @@ __metadata:
languageName: node
linkType: hard
"@strapi/generators@npm:5.12.5, @strapi/generators@workspace:packages/generators/generators":
"@strapi/generators@npm:5.12.6, @strapi/generators@workspace:packages/generators/generators":
version: 0.0.0-use.local
resolution: "@strapi/generators@workspace:packages/generators/generators"
dependencies:
"@sindresorhus/slugify": "npm:1.1.0"
"@strapi/typescript-utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/typescript-utils": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
chalk: "npm:4.1.2"
copyfiles: "npm:2.4.1"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
fs-extra: "npm:11.2.0"
node-plop: "npm:0.26.3"
plop: "npm:4.0.1"
pluralize: "npm:8.0.0"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
"@strapi/i18n@npm:5.12.5, @strapi/i18n@workspace:packages/plugins/i18n":
"@strapi/i18n@npm:5.12.6, @strapi/i18n@workspace:packages/plugins/i18n":
version: 0.0.0-use.local
resolution: "@strapi/i18n@workspace:packages/plugins/i18n"
dependencies:
"@reduxjs/toolkit": "npm:1.9.7"
"@strapi/admin": "npm:5.12.5"
"@strapi/admin-test-utils": "npm:5.12.5"
"@strapi/content-manager": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/admin-test-utils": "npm:5.12.6"
"@strapi/content-manager": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
lodash: "npm:4.17.21"
@ -9238,13 +9238,13 @@ __metadata:
languageName: node
linkType: hard
"@strapi/logger@npm:5.12.5, @strapi/logger@workspace:packages/utils/logger":
"@strapi/logger@npm:5.12.6, @strapi/logger@workspace:packages/utils/logger":
version: 0.0.0-use.local
resolution: "@strapi/logger@workspace:packages/utils/logger"
dependencies:
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
lodash: "npm:4.17.21"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
winston: "npm:3.10.0"
languageName: unknown
linkType: soft
@ -9280,17 +9280,17 @@ __metadata:
languageName: node
linkType: hard
"@strapi/permissions@npm:5.12.5, @strapi/permissions@workspace:packages/core/permissions":
"@strapi/permissions@npm:5.12.6, @strapi/permissions@workspace:packages/core/permissions":
version: 0.0.0-use.local
resolution: "@strapi/permissions@workspace:packages/core/permissions"
dependencies:
"@casl/ability": "npm:6.5.0"
"@strapi/utils": "npm:5.12.5"
eslint-config-custom: "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
eslint-config-custom: "npm:5.12.6"
lodash: "npm:4.17.21"
qs: "npm:6.11.1"
sift: "npm:16.0.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9300,14 +9300,14 @@ __metadata:
dependencies:
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
eslint-config-custom: "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
eslint-config-custom: "npm:5.12.6"
react: "npm:18.3.1"
react-dom: "npm:18.3.1"
react-intl: "npm:6.6.2"
react-router-dom: "npm:6.22.3"
styled-components: "npm:6.1.8"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
typescript: "npm:5.4.4"
peerDependencies:
"@strapi/strapi": ^5.0.0
@ -9324,7 +9324,7 @@ __metadata:
dependencies:
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
react: "npm:18.3.1"
@ -9349,13 +9349,13 @@ __metadata:
dependencies:
"@apidevtools/swagger-parser": "npm:^10.1.0"
"@reduxjs/toolkit": "npm:1.9.7"
"@strapi/admin": "npm:5.12.5"
"@strapi/admin-test-utils": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/admin-test-utils": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
"@types/fs-extra": "npm:11.0.4"
@ -9403,14 +9403,14 @@ __metadata:
"@koa/cors": "npm:5.0.0"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/graphql-depth-limit": "npm:1.1.5"
"@types/koa-bodyparser": "npm:4.3.12"
"@types/koa__cors": "npm:5.0.0"
cross-env: "npm:^7.0.3"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
graphql: "npm:^16.8.1"
graphql-depth-limit: "npm:^1.1.0"
graphql-playground-middleware-koa: "npm:^1.6.21"
@ -9425,7 +9425,7 @@ __metadata:
react-dom: "npm:18.3.1"
react-router-dom: "npm:6.22.3"
styled-components: "npm:6.1.8"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
typescript: "npm:5.4.4"
peerDependencies:
"@strapi/strapi": ^5.0.0
@ -9443,7 +9443,7 @@ __metadata:
"@sentry/node": "npm:7.112.2"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
react: "npm:18.3.1"
react-dom: "npm:18.3.1"
react-router-dom: "npm:6.22.3"
@ -9463,8 +9463,8 @@ __metadata:
dependencies:
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/strapi": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/strapi": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/dom": "npm:10.1.0"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
@ -9502,10 +9502,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "@strapi/provider-email-amazon-ses@workspace:packages/providers/email-amazon-ses"
dependencies:
"@strapi/utils": "npm:5.12.5"
eslint-config-custom: "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
eslint-config-custom: "npm:5.12.6"
node-ses: "npm:^3.0.3"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9513,11 +9513,11 @@ __metadata:
version: 0.0.0-use.local
resolution: "@strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun"
dependencies:
"@strapi/utils": "npm:5.12.5"
eslint-config-custom: "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
eslint-config-custom: "npm:5.12.6"
form-data: "npm:^4.0.0"
mailgun.js: "npm:10.2.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9526,10 +9526,10 @@ __metadata:
resolution: "@strapi/provider-email-nodemailer@workspace:packages/providers/email-nodemailer"
dependencies:
"@types/nodemailer": "npm:6.4.7"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
lodash: "npm:4.17.21"
nodemailer: "npm:6.9.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9538,21 +9538,21 @@ __metadata:
resolution: "@strapi/provider-email-sendgrid@workspace:packages/providers/email-sendgrid"
dependencies:
"@sendgrid/mail": "npm:8.1.3"
"@strapi/utils": "npm:5.12.5"
eslint-config-custom: "npm:5.12.5"
tsconfig: "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
eslint-config-custom: "npm:5.12.6"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
"@strapi/provider-email-sendmail@npm:5.12.5, @strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail":
"@strapi/provider-email-sendmail@npm:5.12.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": "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
"@types/sendmail": "npm:1.4.4"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
sendmail: "npm:^1.6.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9565,9 +9565,9 @@ __metadata:
"@aws-sdk/s3-request-presigner": "npm:3.433.0"
"@aws-sdk/types": "npm:3.433.0"
"@types/jest": "npm:29.5.2"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
lodash: "npm:4.17.21"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
@ -9575,40 +9575,40 @@ __metadata:
version: 0.0.0-use.local
resolution: "@strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary"
dependencies:
"@strapi/utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
cloudinary: "npm:^1.41.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
into-stream: "npm:^5.1.0"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
"@strapi/provider-upload-local@npm:5.12.5, @strapi/provider-upload-local@workspace:packages/providers/upload-local":
"@strapi/provider-upload-local@npm:5.12.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/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
"@types/jest": "npm:29.5.2"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
fs-extra: "npm:11.2.0"
memfs: "npm:4.6.0"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
languageName: unknown
linkType: soft
"@strapi/review-workflows@npm:5.12.5, @strapi/review-workflows@workspace:packages/core/review-workflows":
"@strapi/review-workflows@npm:5.12.6, @strapi/review-workflows@workspace:packages/core/review-workflows":
version: 0.0.0-use.local
resolution: "@strapi/review-workflows@workspace:packages/core/review-workflows"
dependencies:
"@reduxjs/toolkit": "npm:1.9.7"
"@strapi/admin": "npm:5.12.5"
"@strapi/content-manager": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/content-manager": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/react": "npm:15.0.7"
fractional-indexing: "npm:3.2.0"
msw: "npm:1.3.0"
@ -9658,30 +9658,30 @@ __metadata:
languageName: node
linkType: hard
"@strapi/strapi@npm:5.12.5, @strapi/strapi@workspace:*, @strapi/strapi@workspace:packages/core/strapi":
"@strapi/strapi@npm:5.12.6, @strapi/strapi@workspace:*, @strapi/strapi@workspace:packages/core/strapi":
version: 0.0.0-use.local
resolution: "@strapi/strapi@workspace:packages/core/strapi"
dependencies:
"@pmmmwh/react-refresh-webpack-plugin": "npm:0.5.15"
"@strapi/admin": "npm:5.12.5"
"@strapi/cloud-cli": "npm:5.12.5"
"@strapi/content-manager": "npm:5.12.5"
"@strapi/content-releases": "npm:5.12.5"
"@strapi/content-type-builder": "npm:5.12.5"
"@strapi/core": "npm:5.12.5"
"@strapi/data-transfer": "npm:5.12.5"
"@strapi/database": "npm:5.12.5"
"@strapi/email": "npm:5.12.5"
"@strapi/generators": "npm:5.12.5"
"@strapi/i18n": "npm:5.12.5"
"@strapi/logger": "npm:5.12.5"
"@strapi/permissions": "npm:5.12.5"
"@strapi/review-workflows": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/cloud-cli": "npm:5.12.6"
"@strapi/content-manager": "npm:5.12.6"
"@strapi/content-releases": "npm:5.12.6"
"@strapi/content-type-builder": "npm:5.12.6"
"@strapi/core": "npm:5.12.6"
"@strapi/data-transfer": "npm:5.12.6"
"@strapi/database": "npm:5.12.6"
"@strapi/email": "npm:5.12.6"
"@strapi/generators": "npm:5.12.6"
"@strapi/i18n": "npm:5.12.6"
"@strapi/logger": "npm:5.12.6"
"@strapi/permissions": "npm:5.12.6"
"@strapi/review-workflows": "npm:5.12.6"
"@strapi/ts-zen": "npm:^0.2.0"
"@strapi/types": "npm:5.12.5"
"@strapi/typescript-utils": "npm:5.12.5"
"@strapi/upload": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/typescript-utils": "npm:5.12.6"
"@strapi/upload": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
"@types/jest": "npm:29.5.2"
"@types/lodash": "npm:^4.14.191"
@ -9705,7 +9705,7 @@ __metadata:
dotenv: "npm:16.4.5"
esbuild-loader: "npm:4.3.0"
esbuild-register: "npm:3.5.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
execa: "npm:5.1.1"
fork-ts-checker-webpack-plugin: "npm:8.0.0"
fs-extra: "npm:11.2.0"
@ -9728,7 +9728,7 @@ __metadata:
resolve-from: "npm:5.0.0"
semver: "npm:7.5.4"
style-loader: "npm:3.3.4"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
typescript: "npm:5.4.4"
vite: "npm:5.4.17"
webpack: "npm:^5.90.3"
@ -9757,29 +9757,29 @@ __metadata:
languageName: node
linkType: hard
"@strapi/types@npm:5.12.5, @strapi/types@workspace:packages/core/types":
"@strapi/types@npm:5.12.6, @strapi/types@workspace:packages/core/types":
version: 0.0.0-use.local
resolution: "@strapi/types@workspace:packages/core/types"
dependencies:
"@casl/ability": "npm:6.5.0"
"@koa/cors": "npm:5.0.0"
"@koa/router": "npm:12.0.2"
"@strapi/database": "npm:5.12.5"
"@strapi/logger": "npm:5.12.5"
"@strapi/permissions": "npm:5.12.5"
"@strapi/database": "npm:5.12.6"
"@strapi/logger": "npm:5.12.6"
"@strapi/permissions": "npm:5.12.6"
"@strapi/ts-zen": "npm:^0.2.0"
"@strapi/utils": "npm:5.12.5"
"@strapi/utils": "npm:5.12.6"
"@types/jest": "npm:29.5.2"
"@types/koa": "npm:2.13.4"
"@types/koa__router": "npm:12.0.0"
"@types/node-schedule": "npm:2.1.7"
commander: "npm:8.3.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
koa: "npm:2.15.4"
koa-body: "npm:6.0.1"
lodash: "npm:4.17.21"
node-schedule: "npm:2.1.1"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
typedoc: "npm:0.25.10"
typedoc-github-wiki-theme: "npm:1.1.0"
typedoc-plugin-markdown: "npm:3.17.1"
@ -9788,7 +9788,7 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/typescript-utils@npm:5.12.5, @strapi/typescript-utils@workspace:packages/utils/typescript":
"@strapi/typescript-utils@npm:5.12.6, @strapi/typescript-utils@workspace:packages/utils/typescript":
version: 0.0.0-use.local
resolution: "@strapi/typescript-utils@workspace:packages/utils/typescript"
dependencies:
@ -9837,15 +9837,15 @@ __metadata:
version: 0.0.0-use.local
resolution: "@strapi/upgrade@workspace:packages/utils/upgrade"
dependencies:
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@types/fs-extra": "npm:11.0.4"
"@types/jscodeshift": "npm:0.12.0"
chalk: "npm:4.1.2"
cli-table3: "npm:0.6.2"
commander: "npm:8.3.0"
esbuild-register: "npm:3.5.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
fast-glob: "npm:3.3.2"
fs-extra: "npm:11.2.0"
jscodeshift: "npm:17.1.2"
@ -9861,17 +9861,17 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/upload@npm:5.12.5, @strapi/upload@workspace:packages/core/upload":
"@strapi/upload@npm:5.12.6, @strapi/upload@workspace:packages/core/upload":
version: 0.0.0-use.local
resolution: "@strapi/upload@workspace:packages/core/upload"
dependencies:
"@mux/mux-player-react": "npm:3.1.0"
"@strapi/admin": "npm:5.12.5"
"@strapi/admin": "npm:5.12.6"
"@strapi/design-system": "npm:2.0.0-rc.23"
"@strapi/icons": "npm:2.0.0-rc.23"
"@strapi/provider-upload-local": "npm:5.12.5"
"@strapi/types": "npm:5.12.5"
"@strapi/utils": "npm:5.12.5"
"@strapi/provider-upload-local": "npm:5.12.6"
"@strapi/types": "npm:5.12.6"
"@strapi/utils": "npm:5.12.6"
"@testing-library/dom": "npm:10.1.0"
"@testing-library/react": "npm:15.0.7"
"@testing-library/user-event": "npm:14.5.2"
@ -9916,7 +9916,7 @@ __metadata:
languageName: unknown
linkType: soft
"@strapi/utils@npm:5.12.5, @strapi/utils@workspace:packages/core/utils":
"@strapi/utils@npm:5.12.6, @strapi/utils@workspace:packages/core/utils":
version: 0.0.0-use.local
resolution: "@strapi/utils@workspace:packages/core/utils"
dependencies:
@ -9925,7 +9925,7 @@ __metadata:
"@types/koa": "npm:2.13.4"
"@types/node": "npm:18.19.24"
date-fns: "npm:2.30.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
execa: "npm:5.1.1"
http-errors: "npm:2.0.0"
koa: "npm:2.15.4"
@ -9934,7 +9934,7 @@ __metadata:
node-machine-id: "npm:1.1.12"
p-map: "npm:4.0.0"
preferred-pm: "npm:3.1.2"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
yup: "npm:0.32.9"
zod: "npm:3.24.2"
languageName: unknown
@ -15213,18 +15213,18 @@ __metadata:
languageName: node
linkType: hard
"create-strapi-app@npm:5.12.5, create-strapi-app@workspace:*, create-strapi-app@workspace:packages/cli/create-strapi-app":
"create-strapi-app@npm:5.12.6, create-strapi-app@workspace:*, create-strapi-app@workspace:packages/cli/create-strapi-app":
version: 0.0.0-use.local
resolution: "create-strapi-app@workspace:packages/cli/create-strapi-app"
dependencies:
"@strapi/cloud-cli": "npm:5.12.5"
"@strapi/cloud-cli": "npm:5.12.6"
"@types/async-retry": "npm:^1"
"@types/fs-extra": "npm:11.0.4"
"@types/inquirer": "npm:8.2.5"
async-retry: "npm:1.3.3"
chalk: "npm:4.1.2"
commander: "npm:8.3.0"
eslint-config-custom: "npm:5.12.5"
eslint-config-custom: "npm:5.12.6"
execa: "npm:5.1.1"
fs-extra: "npm:11.2.0"
inquirer: "npm:8.2.5"
@ -15235,7 +15235,7 @@ __metadata:
semver: "npm:7.5.4"
sort-package-json: "npm:2.10.0"
tar: "npm:7.4.3"
tsconfig: "npm:5.12.5"
tsconfig: "npm:5.12.6"
bin:
create-strapi-app: ./bin/index.js
languageName: unknown
@ -15245,7 +15245,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "create-strapi@workspace:packages/cli/create-strapi"
dependencies:
create-strapi-app: "npm:5.12.5"
create-strapi-app: "npm:5.12.6"
bin:
create-strapi: ./bin/index.js
languageName: unknown
@ -17078,7 +17078,7 @@ __metadata:
languageName: node
linkType: hard
"eslint-config-custom@npm:5.12.5, eslint-config-custom@workspace:packages/utils/eslint-config-custom":
"eslint-config-custom@npm:5.12.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
@ -30349,7 +30349,7 @@ __metadata:
languageName: node
linkType: hard
"tsconfig@npm:5.12.5, tsconfig@workspace:packages/utils/tsconfig":
"tsconfig@npm:5.12.6, tsconfig@workspace:packages/utils/tsconfig":
version: 0.0.0-use.local
resolution: "tsconfig@workspace:packages/utils/tsconfig"
dependencies: