@strapi/upload 5.36.1 → 5.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/future/pages/Assets/AssetsPage.js +42 -9
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +42 -9
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +95 -13
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +97 -15
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +99 -6
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +100 -7
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js +2 -2
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs +2 -2
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js +50 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs +48 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +20 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +18 -0
- package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -0
- package/dist/admin/future/services/assets.js +32 -3
- package/dist/admin/future/services/assets.js.map +1 -1
- package/dist/admin/future/services/assets.mjs +32 -3
- package/dist/admin/future/services/assets.mjs.map +1 -1
- package/dist/admin/future/services/folders.js +101 -0
- package/dist/admin/future/services/folders.js.map +1 -0
- package/dist/admin/future/services/folders.mjs +98 -0
- package/dist/admin/future/services/folders.mjs.map +1 -0
- package/dist/admin/package.json.js +8 -8
- package/dist/admin/package.json.mjs +8 -8
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +3 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +3 -1
- package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZone.d.ts +2 -1
- package/dist/admin/src/future/pages/Assets/hooks/useFolderInfo.d.ts +5 -0
- package/dist/admin/src/future/pages/Assets/hooks/useFolderNavigation.d.ts +5 -0
- package/dist/admin/src/future/services/folders.d.ts +16 -0
- package/dist/admin/translations/en.json.js +2 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +2 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/content-api.js +6 -4
- package/dist/server/controllers/content-api.js.map +1 -1
- package/dist/server/controllers/content-api.mjs +6 -4
- package/dist/server/controllers/content-api.mjs.map +1 -1
- package/dist/shared/contracts/folders.d.ts +2 -0
- package/package.json +8 -8
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { uploadApi } from './api.mjs';
|
|
2
|
+
|
|
3
|
+
const foldersApi = uploadApi.injectEndpoints({
|
|
4
|
+
endpoints: (builder)=>({
|
|
5
|
+
getFolders: builder.query({
|
|
6
|
+
query: (params = {})=>{
|
|
7
|
+
const { parentId } = params;
|
|
8
|
+
const queryParams = {};
|
|
9
|
+
if (parentId != null) {
|
|
10
|
+
queryParams['filters'] = {
|
|
11
|
+
$and: [
|
|
12
|
+
{
|
|
13
|
+
parent: {
|
|
14
|
+
id: parentId
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
};
|
|
19
|
+
} else {
|
|
20
|
+
queryParams['filters'] = {
|
|
21
|
+
$and: [
|
|
22
|
+
{
|
|
23
|
+
parent: {
|
|
24
|
+
id: {
|
|
25
|
+
$null: true
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
url: '/upload/folders',
|
|
34
|
+
method: 'GET',
|
|
35
|
+
config: {
|
|
36
|
+
params: queryParams
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
transformResponse: (response)=>// TODO dont want this cast
|
|
41
|
+
response.data,
|
|
42
|
+
providesTags: (results)=>{
|
|
43
|
+
if (results) {
|
|
44
|
+
return [
|
|
45
|
+
...results.map(({ id })=>({
|
|
46
|
+
type: 'Folder',
|
|
47
|
+
id
|
|
48
|
+
})),
|
|
49
|
+
{
|
|
50
|
+
type: 'Folder',
|
|
51
|
+
id: 'LIST'
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
type: 'Folder',
|
|
58
|
+
id: 'LIST'
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
}),
|
|
63
|
+
getFolder: builder.query({
|
|
64
|
+
query: ({ id })=>({
|
|
65
|
+
url: `/upload/folders/${id}`,
|
|
66
|
+
method: 'GET',
|
|
67
|
+
config: {
|
|
68
|
+
params: {
|
|
69
|
+
populate: {
|
|
70
|
+
parent: {
|
|
71
|
+
populate: {
|
|
72
|
+
parent: '*'
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
children: {
|
|
76
|
+
count: true
|
|
77
|
+
},
|
|
78
|
+
files: {
|
|
79
|
+
count: true
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
transformResponse: (response)=>response.data,
|
|
86
|
+
providesTags: (_result, _error, { id })=>[
|
|
87
|
+
{
|
|
88
|
+
type: 'Folder',
|
|
89
|
+
id
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
});
|
|
95
|
+
const { useGetFoldersQuery, useGetFolderQuery } = foldersApi;
|
|
96
|
+
|
|
97
|
+
export { useGetFolderQuery, useGetFoldersQuery };
|
|
98
|
+
//# sourceMappingURL=folders.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folders.mjs","sources":["../../../../admin/src/future/services/folders.ts"],"sourcesContent":["import { uploadApi } from './api';\n\nimport type { Folder, GetFolder, GetFolders } from '../../../../shared/contracts/folders';\n\nexport type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {\n children?: { count: number };\n files?: { count: number };\n};\n\ninterface GetFoldersParams {\n parentId?: number | null;\n}\n\nconst foldersApi = uploadApi.injectEndpoints({\n endpoints: (builder) => ({\n getFolders: builder.query<Folder[], GetFoldersParams | void>({\n query: (params = {}) => {\n const { parentId } = params as GetFoldersParams;\n\n const queryParams: Record<string, unknown> = {};\n\n if (parentId != null) {\n queryParams['filters'] = {\n $and: [{ parent: { id: parentId } }],\n };\n } else {\n queryParams['filters'] = {\n $and: [{ parent: { id: { $null: true } } }],\n };\n }\n\n return {\n url: '/upload/folders',\n method: 'GET',\n config: { params: queryParams },\n };\n },\n transformResponse: (response: GetFolders.Response['data']) =>\n // TODO dont want this cast\n (response as any).data,\n providesTags: (results) => {\n if (results) {\n return [\n ...results.map(({ id }) => ({ type: 'Folder' as const, id })),\n { type: 'Folder', id: 'LIST' },\n ];\n }\n return [{ type: 'Folder', id: 'LIST' }];\n },\n }),\n getFolder: builder.query<FolderWithCounts, { id: number }>({\n query: ({ id }) => ({\n url: `/upload/folders/${id}`,\n method: 'GET',\n config: {\n params: {\n populate: {\n parent: {\n populate: {\n parent: '*',\n },\n },\n children: { count: true },\n files: { count: true },\n },\n },\n },\n }),\n transformResponse: (response: GetFolder.Response) =>\n response.data as unknown as FolderWithCounts,\n providesTags: (_result, _error, { id }) => [{ type: 'Folder', id }],\n }),\n }),\n});\n\nexport const { useGetFoldersQuery, useGetFolderQuery } = foldersApi;\n"],"names":["foldersApi","uploadApi","injectEndpoints","endpoints","builder","getFolders","query","params","parentId","queryParams","$and","parent","id","$null","url","method","config","transformResponse","response","data","providesTags","results","map","type","getFolder","populate","children","count","files","_result","_error","useGetFoldersQuery","useGetFolderQuery"],"mappings":";;AAaA,MAAMA,UAAAA,GAAaC,SAAUC,CAAAA,eAAe,CAAC;IAC3CC,SAAW,EAAA,CAACC,WAAa;YACvBC,UAAYD,EAAAA,OAAAA,CAAQE,KAAK,CAAoC;gBAC3DA,KAAO,EAAA,CAACC,MAAS,GAAA,EAAE,GAAA;oBACjB,MAAM,EAAEC,QAAQ,EAAE,GAAGD,MAAAA;AAErB,oBAAA,MAAME,cAAuC,EAAC;AAE9C,oBAAA,IAAID,YAAY,IAAM,EAAA;wBACpBC,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAM,EAAA;AAAC,gCAAA;oCAAEC,MAAQ,EAAA;wCAAEC,EAAIJ,EAAAA;AAAS;AAAE;AAAE;AACtC,yBAAA;qBACK,MAAA;wBACLC,WAAW,CAAC,UAAU,GAAG;4BACvBC,IAAM,EAAA;AAAC,gCAAA;oCAAEC,MAAQ,EAAA;wCAAEC,EAAI,EAAA;4CAAEC,KAAO,EAAA;AAAK;AAAE;AAAE;AAAE;AAC7C,yBAAA;AACF;oBAEA,OAAO;wBACLC,GAAK,EAAA,iBAAA;wBACLC,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BAAET,MAAQE,EAAAA;AAAY;AAChC,qBAAA;AACF,iBAAA;gBACAQ,iBAAmB,EAAA,CAACC,QAElB;AAACA,oBAAAA,QAAAA,CAAiBC,IAAI;AACxBC,gBAAAA,YAAAA,EAAc,CAACC,OAAAA,GAAAA;AACb,oBAAA,IAAIA,OAAS,EAAA;wBACX,OAAO;AACFA,4BAAAA,GAAAA,OAAAA,CAAQC,GAAG,CAAC,CAAC,EAAEV,EAAE,EAAE,IAAM;oCAAEW,IAAM,EAAA,QAAA;AAAmBX,oCAAAA;iCAAG,CAAA,CAAA;AAC1D,4BAAA;gCAAEW,IAAM,EAAA,QAAA;gCAAUX,EAAI,EAAA;AAAO;AAC9B,yBAAA;AACH;oBACA,OAAO;AAAC,wBAAA;4BAAEW,IAAM,EAAA,QAAA;4BAAUX,EAAI,EAAA;AAAO;AAAE,qBAAA;AACzC;AACF,aAAA,CAAA;YACAY,SAAWpB,EAAAA,OAAAA,CAAQE,KAAK,CAAmC;AACzDA,gBAAAA,KAAAA,EAAO,CAAC,EAAEM,EAAE,EAAE,IAAM;wBAClBE,GAAK,EAAA,CAAC,gBAAgB,EAAEF,EAAI,CAAA,CAAA;wBAC5BG,MAAQ,EAAA,KAAA;wBACRC,MAAQ,EAAA;4BACNT,MAAQ,EAAA;gCACNkB,QAAU,EAAA;oCACRd,MAAQ,EAAA;wCACNc,QAAU,EAAA;4CACRd,MAAQ,EAAA;AACV;AACF,qCAAA;oCACAe,QAAU,EAAA;wCAAEC,KAAO,EAAA;AAAK,qCAAA;oCACxBC,KAAO,EAAA;wCAAED,KAAO,EAAA;AAAK;AACvB;AACF;AACF;qBACF,CAAA;gBACAV,iBAAmB,EAAA,CAACC,QAClBA,GAAAA,QAAAA,CAASC,IAAI;AACfC,gBAAAA,YAAAA,EAAc,CAACS,OAASC,EAAAA,MAAAA,EAAQ,EAAElB,EAAE,EAAE,GAAK;AAAC,wBAAA;4BAAEW,IAAM,EAAA,QAAA;AAAUX,4BAAAA;AAAG;AAAE;AACrE,aAAA;SACF;AACF,CAAA,CAAA;MAEa,EAAEmB,kBAAkB,EAAEC,iBAAiB,EAAE,GAAGhC;;;;"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/upload";
|
|
6
|
-
var version = "5.
|
|
6
|
+
var version = "5.37.1";
|
|
7
7
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
8
8
|
var license = "SEE LICENSE IN LICENSE";
|
|
9
9
|
var author = {
|
|
@@ -64,14 +64,14 @@ var scripts = {
|
|
|
64
64
|
};
|
|
65
65
|
var dependencies = {
|
|
66
66
|
"@mux/mux-player-react": "3.1.0",
|
|
67
|
-
"@radix-ui/react-dialog": "1.
|
|
67
|
+
"@radix-ui/react-dialog": "1.0.5",
|
|
68
68
|
"@radix-ui/react-toggle-group": "1.1.11",
|
|
69
69
|
"@reduxjs/toolkit": "1.9.7",
|
|
70
|
-
"@strapi/database": "5.
|
|
70
|
+
"@strapi/database": "5.37.1",
|
|
71
71
|
"@strapi/design-system": "2.1.2",
|
|
72
72
|
"@strapi/icons": "2.1.2",
|
|
73
|
-
"@strapi/provider-upload-local": "5.
|
|
74
|
-
"@strapi/utils": "5.
|
|
73
|
+
"@strapi/provider-upload-local": "5.37.1",
|
|
74
|
+
"@strapi/utils": "5.37.1",
|
|
75
75
|
"byte-size": "8.1.1",
|
|
76
76
|
cropperjs: "1.6.1",
|
|
77
77
|
"date-fns": "2.30.0",
|
|
@@ -81,7 +81,7 @@ var dependencies = {
|
|
|
81
81
|
immer: "9.0.21",
|
|
82
82
|
"koa-range": "0.3.0",
|
|
83
83
|
"koa-static": "5.0.0",
|
|
84
|
-
lodash: "4.17.
|
|
84
|
+
lodash: "4.17.23",
|
|
85
85
|
"mime-types": "2.1.35",
|
|
86
86
|
"prop-types": "^15.8.1",
|
|
87
87
|
qs: "6.14.2",
|
|
@@ -95,8 +95,8 @@ var dependencies = {
|
|
|
95
95
|
zod: "3.25.67"
|
|
96
96
|
};
|
|
97
97
|
var devDependencies = {
|
|
98
|
-
"@strapi/admin": "5.
|
|
99
|
-
"@strapi/types": "5.
|
|
98
|
+
"@strapi/admin": "5.37.1",
|
|
99
|
+
"@strapi/types": "5.37.1",
|
|
100
100
|
"@testing-library/dom": "10.4.1",
|
|
101
101
|
"@testing-library/react": "16.3.0",
|
|
102
102
|
"@testing-library/user-event": "14.6.1",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/upload";
|
|
2
|
-
var version = "5.
|
|
2
|
+
var version = "5.37.1";
|
|
3
3
|
var description = "Makes it easy to upload images and files to your Strapi Application.";
|
|
4
4
|
var license = "SEE LICENSE IN LICENSE";
|
|
5
5
|
var author = {
|
|
@@ -60,14 +60,14 @@ var scripts = {
|
|
|
60
60
|
};
|
|
61
61
|
var dependencies = {
|
|
62
62
|
"@mux/mux-player-react": "3.1.0",
|
|
63
|
-
"@radix-ui/react-dialog": "1.
|
|
63
|
+
"@radix-ui/react-dialog": "1.0.5",
|
|
64
64
|
"@radix-ui/react-toggle-group": "1.1.11",
|
|
65
65
|
"@reduxjs/toolkit": "1.9.7",
|
|
66
|
-
"@strapi/database": "5.
|
|
66
|
+
"@strapi/database": "5.37.1",
|
|
67
67
|
"@strapi/design-system": "2.1.2",
|
|
68
68
|
"@strapi/icons": "2.1.2",
|
|
69
|
-
"@strapi/provider-upload-local": "5.
|
|
70
|
-
"@strapi/utils": "5.
|
|
69
|
+
"@strapi/provider-upload-local": "5.37.1",
|
|
70
|
+
"@strapi/utils": "5.37.1",
|
|
71
71
|
"byte-size": "8.1.1",
|
|
72
72
|
cropperjs: "1.6.1",
|
|
73
73
|
"date-fns": "2.30.0",
|
|
@@ -77,7 +77,7 @@ var dependencies = {
|
|
|
77
77
|
immer: "9.0.21",
|
|
78
78
|
"koa-range": "0.3.0",
|
|
79
79
|
"koa-static": "5.0.0",
|
|
80
|
-
lodash: "4.17.
|
|
80
|
+
lodash: "4.17.23",
|
|
81
81
|
"mime-types": "2.1.35",
|
|
82
82
|
"prop-types": "^15.8.1",
|
|
83
83
|
qs: "6.14.2",
|
|
@@ -91,8 +91,8 @@ var dependencies = {
|
|
|
91
91
|
zod: "3.25.67"
|
|
92
92
|
};
|
|
93
93
|
var devDependencies = {
|
|
94
|
-
"@strapi/admin": "5.
|
|
95
|
-
"@strapi/types": "5.
|
|
94
|
+
"@strapi/admin": "5.37.1",
|
|
95
|
+
"@strapi/types": "5.37.1",
|
|
96
96
|
"@testing-library/dom": "10.4.1",
|
|
97
97
|
"@testing-library/react": "16.3.0",
|
|
98
98
|
"@testing-library/user-event": "14.6.1",
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { File } from '../../../../../../shared/contracts/files';
|
|
2
|
+
import type { Folder } from '../../../../../../shared/contracts/folders';
|
|
2
3
|
interface AssetsGridProps {
|
|
3
4
|
assets: File[];
|
|
5
|
+
folders?: Folder[];
|
|
4
6
|
}
|
|
5
|
-
export declare const AssetsGrid: ({ assets }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const AssetsGrid: ({ assets, folders }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
8
|
export {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { File } from '../../../../../../shared/contracts/files';
|
|
2
|
+
import type { Folder } from '../../../../../../shared/contracts/folders';
|
|
2
3
|
interface AssetsTableProps {
|
|
3
4
|
assets: File[];
|
|
5
|
+
folders?: Folder[];
|
|
4
6
|
}
|
|
5
|
-
export declare const AssetsTable: ({ assets }: AssetsTableProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const AssetsTable: ({ assets, folders }: AssetsTableProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
8
|
export {};
|
|
@@ -4,6 +4,7 @@ declare const DropZoneWithOverlay: ({ children }: {
|
|
|
4
4
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
interface DropFilesMessageProps {
|
|
6
6
|
uploadDropZoneRef?: React.RefObject<HTMLDivElement>;
|
|
7
|
+
folderName: string;
|
|
7
8
|
}
|
|
8
|
-
declare const DropFilesMessage: ({ uploadDropZoneRef }: DropFilesMessageProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
declare const DropFilesMessage: ({ uploadDropZoneRef, folderName }: DropFilesMessageProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
10
|
export { DropZoneWithOverlay, DropFilesMessage };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Folder } from '../../../../shared/contracts/folders';
|
|
2
|
+
export type FolderWithCounts = Omit<Folder, 'children' | 'files'> & {
|
|
3
|
+
children?: {
|
|
4
|
+
count: number;
|
|
5
|
+
};
|
|
6
|
+
files?: {
|
|
7
|
+
count: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
interface GetFoldersParams {
|
|
11
|
+
parentId?: number | null;
|
|
12
|
+
}
|
|
13
|
+
export declare const useGetFoldersQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void | GetFoldersParams, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "AIFeatureConfig" | "Asset" | "Folder", Folder[], "adminApi">>, useGetFolderQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<{
|
|
14
|
+
id: number;
|
|
15
|
+
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@strapi/admin/strapi-admin").QueryArguments, unknown, import("@strapi/admin/strapi-admin").BaseQueryError, {}, {}>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AIUsage" | "AIFeatureConfig" | "Asset" | "Folder", FolderWithCounts, "adminApi">>;
|
|
16
|
+
export {};
|
|
@@ -63,6 +63,7 @@ var en = {
|
|
|
63
63
|
"header.actions.upload-new-asset": "Upload new asset",
|
|
64
64
|
"header.content.assets-empty": "No assets",
|
|
65
65
|
"header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
|
|
66
|
+
"header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
|
|
66
67
|
"import-files": "Import files",
|
|
67
68
|
"input.button.label": "Browse files",
|
|
68
69
|
"input.label": "Drag & Drop here or",
|
|
@@ -127,6 +128,7 @@ var en = {
|
|
|
127
128
|
"plugin.description.long": "Media file management.",
|
|
128
129
|
"plugin.description.short": "Media file management.",
|
|
129
130
|
"plugin.name": "Media Library",
|
|
131
|
+
"plugin.home": "Home",
|
|
130
132
|
"search.clear.label": "Clear the search",
|
|
131
133
|
"search.label": "Search for an asset",
|
|
132
134
|
"search.placeholder": "e.g: the first dog on the moon",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -61,6 +61,7 @@ var en = {
|
|
|
61
61
|
"header.actions.upload-new-asset": "Upload new asset",
|
|
62
62
|
"header.content.assets-empty": "No assets",
|
|
63
63
|
"header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
|
|
64
|
+
"header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
|
|
64
65
|
"import-files": "Import files",
|
|
65
66
|
"input.button.label": "Browse files",
|
|
66
67
|
"input.label": "Drag & Drop here or",
|
|
@@ -125,6 +126,7 @@ var en = {
|
|
|
125
126
|
"plugin.description.long": "Media file management.",
|
|
126
127
|
"plugin.description.short": "Media file management.",
|
|
127
128
|
"plugin.name": "Media Library",
|
|
129
|
+
"plugin.home": "Home",
|
|
128
130
|
"search.clear.label": "Clear the search",
|
|
129
131
|
"search.label": "Search for an asset",
|
|
130
132
|
"search.placeholder": "e.g: the first dog on the moon",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -18,16 +18,18 @@ var contentApi = (({ strapi })=>{
|
|
|
18
18
|
};
|
|
19
19
|
const validateQuery = async (data, ctx)=>{
|
|
20
20
|
const schema = strapi.getModel(constants.FILE_MODEL_UID);
|
|
21
|
-
const { auth } = ctx.state;
|
|
21
|
+
const { auth, route } = ctx.state;
|
|
22
22
|
return strapi.contentAPI.validate.query(data, schema, {
|
|
23
|
-
auth
|
|
23
|
+
auth,
|
|
24
|
+
route
|
|
24
25
|
});
|
|
25
26
|
};
|
|
26
27
|
const sanitizeQuery = async (data, ctx)=>{
|
|
27
28
|
const schema = strapi.getModel(constants.FILE_MODEL_UID);
|
|
28
|
-
const { auth } = ctx.state;
|
|
29
|
+
const { auth, route } = ctx.state;
|
|
29
30
|
return strapi.contentAPI.sanitize.query(data, schema, {
|
|
30
|
-
auth
|
|
31
|
+
auth,
|
|
32
|
+
route
|
|
31
33
|
});
|
|
32
34
|
};
|
|
33
35
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-api.js","sources":["../../../server/src/controllers/content-api.ts"],"sourcesContent":["import _ from 'lodash';\nimport utils, { errors } from '@strapi/utils';\n\nimport type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { FILE_MODEL_UID } from '../constants';\nimport { validateUploadBody } from './validation/content-api/upload';\nimport { FileInfo } from '../types';\nimport { prepareUploadRequest } from '../utils/mime-validation';\n\nconst { ValidationError } = utils.errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sanitizeOutput = async (data: unknown | unknown[], ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.output(data, schema, { auth });\n };\n\n const validateQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.validate.query(data, schema, { auth });\n };\n\n const sanitizeQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.query(data, schema, { auth });\n };\n\n return {\n async find(ctx: Context) {\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const files = await getService('upload').findMany(sanitizedQuery);\n\n ctx.body = await sanitizeOutput(files, ctx);\n },\n\n async findOne(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const file = await getService('upload').findOne(id, sanitizedQuery.populate!);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async destroy(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n const file = await getService('upload').findOne(id);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n await getService('upload').remove(file);\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async updateFileInfo(ctx: Context) {\n const {\n query: { id },\n request: { body },\n } = ctx;\n const data = await validateUploadBody(body);\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const result = await getService('upload').updateFileInfo(id, data.fileInfo as any);\n\n ctx.body = await sanitizeOutput(result, ctx);\n },\n\n async replaceFile(ctx: Context) {\n const {\n query: { id },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n // cannot replace with more than one file\n if (Array.isArray(filesInput)) {\n throw new ValidationError('Cannot replace a file with multiple ones');\n }\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n\n const replacedFiles = await getService('upload').replace(id, { data, file: validFiles[0] });\n\n ctx.body = await sanitizeOutput(replacedFiles, ctx);\n },\n\n async uploadFiles(ctx: Context) {\n const {\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data: any = await validateUploadBody(filteredBody, isMultipleFiles);\n\n const apiUploadFolderService = getService('api-upload-folder');\n\n const apiUploadFolder = await apiUploadFolderService.getAPIUploadFolder();\n\n if (isMultipleFiles) {\n data.fileInfo = data.fileInfo || [];\n data.fileInfo = validFiles.map((_f, i) => ({\n ...data.fileInfo[i],\n folder: apiUploadFolder.id,\n }));\n } else {\n data.fileInfo = { ...data.fileInfo, folder: apiUploadFolder.id };\n }\n\n const uploadedFiles = await getService('upload').upload({\n data,\n files: validFiles,\n });\n\n ctx.body = await sanitizeOutput(uploadedFiles as any, ctx);\n ctx.status = 201;\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new ValidationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n };\n};\n"],"names":["ValidationError","utils","errors","strapi","sanitizeOutput","data","ctx","schema","getModel","FILE_MODEL_UID","auth","state","contentAPI","sanitize","output","validateQuery","validate","query","sanitizeQuery","find","sanitizedQuery","files","getService","findMany","body","findOne","params","id","file","populate","notFound","destroy","remove","updateFileInfo","request","validateUploadBody","result","fileInfo","replaceFile","filesInput","validFiles","filteredBody","validationErrors","prepareUploadRequest","length","message","Array","isArray","replacedFiles","replace","uploadFiles","isMultipleFiles","apiUploadFolderService","apiUploadFolder","getAPIUploadFolder","map","_f","i","folder","uploadedFiles","upload","status","_","isEmpty","size"],"mappings":";;;;;;;;;AAYA,MAAM,EAAEA,eAAe,EAAE,GAAGC,MAAMC,MAAM;AAExC,iBAAe,CAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACjD,MAAMC,cAAAA,GAAiB,OAAOC,IAA2BC,EAAAA,GAAAA,GAAAA;QACvD,MAAMC,MAAAA,GAASJ,MAAOK,CAAAA,QAAQ,CAACC,wBAAAA,CAAAA;AAC/B,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGJ,IAAIK,KAAK;QAE1B,OAAOR,MAAAA,CAAOS,UAAU,CAACC,QAAQ,CAACC,MAAM,CAACT,MAAME,MAAQ,EAAA;AAAEG,YAAAA;AAAK,SAAA,CAAA;AAChE,KAAA;IAEA,MAAMK,aAAAA,GAAgB,OAAOV,IAA+BC,EAAAA,GAAAA,GAAAA;QAC1D,MAAMC,MAAAA,GAASJ,MAAOK,CAAAA,QAAQ,CAACC,wBAAAA,CAAAA;AAC/B,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGJ,IAAIK,KAAK;QAE1B,OAAOR,MAAAA,CAAOS,UAAU,CAACI,QAAQ,CAACC,KAAK,CAACZ,MAAME,MAAQ,EAAA;AAAEG,YAAAA;AAAK,SAAA,CAAA;AAC/D,KAAA;IAEA,MAAMQ,aAAAA,GAAgB,OAAOb,IAA+BC,EAAAA,GAAAA,GAAAA;QAC1D,MAAMC,MAAAA,GAASJ,MAAOK,CAAAA,QAAQ,CAACC,wBAAAA,CAAAA;AAC/B,QAAA,MAAM,EAAEC,IAAI,EAAE,GAAGJ,IAAIK,KAAK;QAE1B,OAAOR,MAAAA,CAAOS,UAAU,CAACC,QAAQ,CAACI,KAAK,CAACZ,MAAME,MAAQ,EAAA;AAAEG,YAAAA;AAAK,SAAA,CAAA;AAC/D,KAAA;IAEA,OAAO;AACL,QAAA,MAAMS,MAAKb,GAAY,EAAA;YACrB,MAAMS,aAAAA,CAAcT,GAAIW,CAAAA,KAAK,EAAEX,GAAAA,CAAAA;AAC/B,YAAA,MAAMc,cAAiB,GAAA,MAAMF,aAAcZ,CAAAA,GAAAA,CAAIW,KAAK,EAAEX,GAAAA,CAAAA;AAEtD,YAAA,MAAMe,KAAQ,GAAA,MAAMC,gBAAW,CAAA,QAAA,CAAA,CAAUC,QAAQ,CAACH,cAAAA,CAAAA;AAElDd,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAeiB,KAAOf,EAAAA,GAAAA,CAAAA;AACzC,SAAA;AAEA,QAAA,MAAMmB,SAAQnB,GAAY,EAAA;AACxB,YAAA,MAAM,EACJoB,MAAQ,EAAA,EAAEC,EAAE,EAAE,EACf,GAAGrB,GAAAA;YAEJ,MAAMS,aAAAA,CAAcT,GAAIW,CAAAA,KAAK,EAAEX,GAAAA,CAAAA;AAC/B,YAAA,MAAMc,cAAiB,GAAA,MAAMF,aAAcZ,CAAAA,GAAAA,CAAIW,KAAK,EAAEX,GAAAA,CAAAA;YAEtD,MAAMsB,IAAAA,GAAO,MAAMN,gBAAW,CAAA,QAAA,CAAA,CAAUG,OAAO,CAACE,EAAAA,EAAIP,eAAeS,QAAQ,CAAA;AAE3E,YAAA,IAAI,CAACD,IAAM,EAAA;gBACT,OAAOtB,GAAAA,CAAIwB,QAAQ,CAAC,eAAA,CAAA;AACtB;AAEAxB,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAewB,IAAMtB,EAAAA,GAAAA,CAAAA;AACxC,SAAA;AAEA,QAAA,MAAMyB,SAAQzB,GAAY,EAAA;AACxB,YAAA,MAAM,EACJoB,MAAQ,EAAA,EAAEC,EAAE,EAAE,EACf,GAAGrB,GAAAA;AAEJ,YAAA,MAAMsB,IAAO,GAAA,MAAMN,gBAAW,CAAA,QAAA,CAAA,CAAUG,OAAO,CAACE,EAAAA,CAAAA;AAEhD,YAAA,IAAI,CAACC,IAAM,EAAA;gBACT,OAAOtB,GAAAA,CAAIwB,QAAQ,CAAC,eAAA,CAAA;AACtB;YAEA,MAAMR,gBAAAA,CAAW,QAAUU,CAAAA,CAAAA,MAAM,CAACJ,IAAAA,CAAAA;AAElCtB,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAewB,IAAMtB,EAAAA,GAAAA,CAAAA;AACxC,SAAA;AAEA,QAAA,MAAM2B,gBAAe3B,GAAY,EAAA;YAC/B,MAAM,EACJW,KAAO,EAAA,EAAEU,EAAE,EAAE,EACbO,OAAAA,EAAS,EAAEV,IAAI,EAAE,EAClB,GAAGlB,GAAAA;YACJ,MAAMD,IAAAA,GAAO,MAAM8B,yBAAmBX,CAAAA,IAAAA,CAAAA;AAEtC,YAAA,IAAI,CAACG,EAAO,IAAA,OAAOA,OAAO,QAAY,IAAA,OAAOA,OAAO,QAAW,EAAA;AAC7D,gBAAA,MAAM,IAAI3B,eAAgB,CAAA,gDAAA,CAAA;AAC5B;YAEA,MAAMoC,MAAAA,GAAS,MAAMd,gBAAW,CAAA,QAAA,CAAA,CAAUW,cAAc,CAACN,EAAAA,EAAItB,KAAKgC,QAAQ,CAAA;AAE1E/B,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAegC,MAAQ9B,EAAAA,GAAAA,CAAAA;AAC1C,SAAA;AAEA,QAAA,MAAMgC,aAAYhC,GAAY,EAAA;YAC5B,MAAM,EACJW,OAAO,EAAEU,EAAE,EAAE,EACbO,OAAAA,EAAS,EAAEV,IAAI,EAAEH,OAAO,EAAEA,KAAAA,EAAOkB,UAAU,EAAE,GAAG,EAAE,EAAE,EACrD,GAAGjC,GAAAA;AAEJ,YAAA,MAAM,EACJkC,UAAU,EACVC,YAAY,EACZvC,MAAAA,EAAQwC,gBAAgB,EACzB,GAAG,MAAMC,mCAAqBJ,CAAAA,UAAAA,EAAYf,IAAMrB,EAAAA,MAAAA,CAAAA;YACjD,IAAIqC,UAAAA,CAAWI,MAAM,KAAK,CAAG,EAAA;gBAC3B,MAAM,IAAI1C,aAAOF,eAAe,CAAC0C,gBAAgB,CAAC,CAAA,CAAE,CAACG,OAAO,CAAA;AAC9D;;YAGA,IAAIC,KAAAA,CAAMC,OAAO,CAACR,UAAa,CAAA,EAAA;AAC7B,gBAAA,MAAM,IAAIvC,eAAgB,CAAA,0CAAA,CAAA;AAC5B;AAEA,YAAA,IAAI,CAAC2B,EAAO,IAAA,OAAOA,OAAO,QAAY,IAAA,OAAOA,OAAO,QAAW,EAAA;AAC7D,gBAAA,MAAM,IAAI3B,eAAgB,CAAA,gDAAA,CAAA;AAC5B;YAEA,MAAMK,IAAAA,GAAQ,MAAM8B,yBAAmBM,CAAAA,YAAAA,CAAAA;AAEvC,YAAA,MAAMO,gBAAgB,MAAM1B,gBAAAA,CAAW,QAAU2B,CAAAA,CAAAA,OAAO,CAACtB,EAAI,EAAA;AAAEtB,gBAAAA,IAAAA;gBAAMuB,IAAMY,EAAAA,UAAU,CAAC,CAAE;AAAC,aAAA,CAAA;AAEzFlC,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAe4C,aAAe1C,EAAAA,GAAAA,CAAAA;AACjD,SAAA;AAEA,QAAA,MAAM4C,aAAY5C,GAAY,EAAA;AAC5B,YAAA,MAAM,EACJ4B,OAAAA,EAAS,EAAEV,IAAI,EAAEH,KAAO,EAAA,EAAEA,KAAOkB,EAAAA,UAAU,EAAE,GAAG,EAAE,EAAE,EACrD,GAAGjC,GAAAA;AAEJ,YAAA,MAAM,EACJkC,UAAU,EACVC,YAAY,EACZvC,MAAAA,EAAQwC,gBAAgB,EACzB,GAAG,MAAMC,mCAAqBJ,CAAAA,UAAAA,EAAYf,IAAMrB,EAAAA,MAAAA,CAAAA;YACjD,IAAIqC,UAAAA,CAAWI,MAAM,KAAK,CAAG,EAAA;gBAC3B,MAAM,IAAI1C,aAAOF,eAAe,CAAC0C,gBAAgB,CAAC,CAAA,CAAE,CAACG,OAAO,CAAA;AAC9D;YAEA,MAAMM,eAAAA,GAAkBX,UAAWI,CAAAA,MAAM,GAAG,CAAA;YAC5C,MAAMvC,IAAAA,GAAY,MAAM8B,yBAAAA,CAAmBM,YAAcU,EAAAA,eAAAA,CAAAA;AAEzD,YAAA,MAAMC,yBAAyB9B,gBAAW,CAAA,mBAAA,CAAA;YAE1C,MAAM+B,eAAAA,GAAkB,MAAMD,sBAAAA,CAAuBE,kBAAkB,EAAA;AAEvE,YAAA,IAAIH,eAAiB,EAAA;AACnB9C,gBAAAA,IAAAA,CAAKgC,QAAQ,GAAGhC,IAAKgC,CAAAA,QAAQ,IAAI,EAAE;gBACnChC,IAAKgC,CAAAA,QAAQ,GAAGG,UAAWe,CAAAA,GAAG,CAAC,CAACC,EAAAA,EAAIC,KAAO;wBACzC,GAAGpD,IAAAA,CAAKgC,QAAQ,CAACoB,CAAE,CAAA;AACnBC,wBAAAA,MAAAA,EAAQL,gBAAgB1B;qBAC1B,CAAA,CAAA;aACK,MAAA;AACLtB,gBAAAA,IAAAA,CAAKgC,QAAQ,GAAG;AAAE,oBAAA,GAAGhC,KAAKgC,QAAQ;AAAEqB,oBAAAA,MAAAA,EAAQL,gBAAgB1B;AAAG,iBAAA;AACjE;AAEA,YAAA,MAAMgC,aAAgB,GAAA,MAAMrC,gBAAW,CAAA,QAAA,CAAA,CAAUsC,MAAM,CAAC;AACtDvD,gBAAAA,IAAAA;gBACAgB,KAAOmB,EAAAA;AACT,aAAA,CAAA;AAEAlC,YAAAA,GAAAA,CAAIkB,IAAI,GAAG,MAAMpB,cAAAA,CAAeuD,aAAsBrD,EAAAA,GAAAA,CAAAA;AACtDA,YAAAA,GAAAA,CAAIuD,MAAM,GAAG,GAAA;AACf,SAAA;;AAGA,QAAA,MAAMD,QAAOtD,GAAY,EAAA;AACvB,YAAA,MAAM,EACJW,KAAO,EAAA,EAAEU,EAAE,EAAE,EACbO,OAAS,EAAA,EAAEb,KAAO,EAAA,EAAEA,KAAK,EAAE,GAAG,EAAE,EAAE,EACnC,GAAGf,GAAAA;AAEJ,YAAA,IAAIwD,CAAEC,CAAAA,OAAO,CAAC1C,KAAAA,CAAAA,IAAW,CAACyB,KAAAA,CAAMC,OAAO,CAAC1B,KAAUA,CAAAA,IAAAA,KAAAA,CAAM2C,IAAI,KAAK,CAAI,EAAA;AACnE,gBAAA,IAAIrC,EAAI,EAAA;oBACN,OAAO,IAAI,CAACM,cAAc,CAAC3B,GAAAA,CAAAA;AAC7B;AAEA,gBAAA,MAAM,IAAIN,eAAgB,CAAA,iBAAA,CAAA;AAC5B;YAEA,MAAO2B,CAAAA,EAAAA,GAAK,IAAI,CAACW,WAAW,GAAG,IAAI,CAACY,WAAU,EAAG5C,GAAAA,CAAAA;AACnD;AACF,KAAA;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"content-api.js","sources":["../../../server/src/controllers/content-api.ts"],"sourcesContent":["import _ from 'lodash';\nimport utils, { errors } from '@strapi/utils';\n\nimport type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { FILE_MODEL_UID } from '../constants';\nimport { validateUploadBody } from './validation/content-api/upload';\nimport { FileInfo } from '../types';\nimport { prepareUploadRequest } from '../utils/mime-validation';\n\nconst { ValidationError } = utils.errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sanitizeOutput = async (data: unknown | unknown[], ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.output(data, schema, { auth });\n };\n\n const validateQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth, route } = ctx.state;\n\n return strapi.contentAPI.validate.query(data, schema, { auth, route });\n };\n\n const sanitizeQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth, route } = ctx.state;\n\n return strapi.contentAPI.sanitize.query(data, schema, { auth, route });\n };\n\n return {\n async find(ctx: Context) {\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const files = await getService('upload').findMany(sanitizedQuery);\n\n ctx.body = await sanitizeOutput(files, ctx);\n },\n\n async findOne(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const file = await getService('upload').findOne(id, sanitizedQuery.populate!);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async destroy(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n const file = await getService('upload').findOne(id);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n await getService('upload').remove(file);\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async updateFileInfo(ctx: Context) {\n const {\n query: { id },\n request: { body },\n } = ctx;\n const data = await validateUploadBody(body);\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const result = await getService('upload').updateFileInfo(id, data.fileInfo as any);\n\n ctx.body = await sanitizeOutput(result, ctx);\n },\n\n async replaceFile(ctx: Context) {\n const {\n query: { id },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n // cannot replace with more than one file\n if (Array.isArray(filesInput)) {\n throw new ValidationError('Cannot replace a file with multiple ones');\n }\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n\n const replacedFiles = await getService('upload').replace(id, { data, file: validFiles[0] });\n\n ctx.body = await sanitizeOutput(replacedFiles, ctx);\n },\n\n async uploadFiles(ctx: Context) {\n const {\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data: any = await validateUploadBody(filteredBody, isMultipleFiles);\n\n const apiUploadFolderService = getService('api-upload-folder');\n\n const apiUploadFolder = await apiUploadFolderService.getAPIUploadFolder();\n\n if (isMultipleFiles) {\n data.fileInfo = data.fileInfo || [];\n data.fileInfo = validFiles.map((_f, i) => ({\n ...data.fileInfo[i],\n folder: apiUploadFolder.id,\n }));\n } else {\n data.fileInfo = { ...data.fileInfo, folder: apiUploadFolder.id };\n }\n\n const uploadedFiles = await getService('upload').upload({\n data,\n files: validFiles,\n });\n\n ctx.body = await sanitizeOutput(uploadedFiles as any, ctx);\n ctx.status = 201;\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new ValidationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n };\n};\n"],"names":["ValidationError","utils","errors","strapi","sanitizeOutput","data","ctx","schema","getModel","FILE_MODEL_UID","auth","state","contentAPI","sanitize","output","validateQuery","route","validate","query","sanitizeQuery","find","sanitizedQuery","files","getService","findMany","body","findOne","params","id","file","populate","notFound","destroy","remove","updateFileInfo","request","validateUploadBody","result","fileInfo","replaceFile","filesInput","validFiles","filteredBody","validationErrors","prepareUploadRequest","length","message","Array","isArray","replacedFiles","replace","uploadFiles","isMultipleFiles","apiUploadFolderService","apiUploadFolder","getAPIUploadFolder","map","_f","i","folder","uploadedFiles","upload","status","_","isEmpty","size"],"mappings":"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"}
|
|
@@ -16,16 +16,18 @@ var contentApi = (({ strapi })=>{
|
|
|
16
16
|
};
|
|
17
17
|
const validateQuery = async (data, ctx)=>{
|
|
18
18
|
const schema = strapi.getModel(FILE_MODEL_UID);
|
|
19
|
-
const { auth } = ctx.state;
|
|
19
|
+
const { auth, route } = ctx.state;
|
|
20
20
|
return strapi.contentAPI.validate.query(data, schema, {
|
|
21
|
-
auth
|
|
21
|
+
auth,
|
|
22
|
+
route
|
|
22
23
|
});
|
|
23
24
|
};
|
|
24
25
|
const sanitizeQuery = async (data, ctx)=>{
|
|
25
26
|
const schema = strapi.getModel(FILE_MODEL_UID);
|
|
26
|
-
const { auth } = ctx.state;
|
|
27
|
+
const { auth, route } = ctx.state;
|
|
27
28
|
return strapi.contentAPI.sanitize.query(data, schema, {
|
|
28
|
-
auth
|
|
29
|
+
auth,
|
|
30
|
+
route
|
|
29
31
|
});
|
|
30
32
|
};
|
|
31
33
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-api.mjs","sources":["../../../server/src/controllers/content-api.ts"],"sourcesContent":["import _ from 'lodash';\nimport utils, { errors } from '@strapi/utils';\n\nimport type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { FILE_MODEL_UID } from '../constants';\nimport { validateUploadBody } from './validation/content-api/upload';\nimport { FileInfo } from '../types';\nimport { prepareUploadRequest } from '../utils/mime-validation';\n\nconst { ValidationError } = utils.errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sanitizeOutput = async (data: unknown | unknown[], ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.output(data, schema, { auth });\n };\n\n const validateQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.validate.query(data, schema, { auth });\n };\n\n const sanitizeQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.query(data, schema, { auth });\n };\n\n return {\n async find(ctx: Context) {\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const files = await getService('upload').findMany(sanitizedQuery);\n\n ctx.body = await sanitizeOutput(files, ctx);\n },\n\n async findOne(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const file = await getService('upload').findOne(id, sanitizedQuery.populate!);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async destroy(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n const file = await getService('upload').findOne(id);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n await getService('upload').remove(file);\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async updateFileInfo(ctx: Context) {\n const {\n query: { id },\n request: { body },\n } = ctx;\n const data = await validateUploadBody(body);\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const result = await getService('upload').updateFileInfo(id, data.fileInfo as any);\n\n ctx.body = await sanitizeOutput(result, ctx);\n },\n\n async replaceFile(ctx: Context) {\n const {\n query: { id },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n // cannot replace with more than one file\n if (Array.isArray(filesInput)) {\n throw new ValidationError('Cannot replace a file with multiple ones');\n }\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n\n const replacedFiles = await getService('upload').replace(id, { data, file: validFiles[0] });\n\n ctx.body = await sanitizeOutput(replacedFiles, ctx);\n },\n\n async uploadFiles(ctx: Context) {\n const {\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data: any = await validateUploadBody(filteredBody, isMultipleFiles);\n\n const apiUploadFolderService = getService('api-upload-folder');\n\n const apiUploadFolder = await apiUploadFolderService.getAPIUploadFolder();\n\n if (isMultipleFiles) {\n data.fileInfo = data.fileInfo || [];\n data.fileInfo = validFiles.map((_f, i) => ({\n ...data.fileInfo[i],\n folder: apiUploadFolder.id,\n }));\n } else {\n data.fileInfo = { ...data.fileInfo, folder: apiUploadFolder.id };\n }\n\n const uploadedFiles = await getService('upload').upload({\n data,\n files: validFiles,\n });\n\n ctx.body = await sanitizeOutput(uploadedFiles as any, ctx);\n ctx.status = 201;\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new ValidationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n };\n};\n"],"names":["ValidationError","utils","errors","strapi","sanitizeOutput","data","ctx","schema","getModel","FILE_MODEL_UID","auth","state","contentAPI","sanitize","output","validateQuery","validate","query","sanitizeQuery","find","sanitizedQuery","files","getService","findMany","body","findOne","params","id","file","populate","notFound","destroy","remove","updateFileInfo","request","validateUploadBody","result","fileInfo","replaceFile","filesInput","validFiles","filteredBody","validationErrors","prepareUploadRequest","length","message","Array","isArray","replacedFiles","replace","uploadFiles","isMultipleFiles","apiUploadFolderService","apiUploadFolder","getAPIUploadFolder","map","_f","i","folder","uploadedFiles","upload","status","_","isEmpty","size"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-api.mjs","sources":["../../../server/src/controllers/content-api.ts"],"sourcesContent":["import _ from 'lodash';\nimport utils, { errors } from '@strapi/utils';\n\nimport type { Context } from 'koa';\nimport type { Core } from '@strapi/types';\n\nimport { getService } from '../utils';\nimport { FILE_MODEL_UID } from '../constants';\nimport { validateUploadBody } from './validation/content-api/upload';\nimport { FileInfo } from '../types';\nimport { prepareUploadRequest } from '../utils/mime-validation';\n\nconst { ValidationError } = utils.errors;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const sanitizeOutput = async (data: unknown | unknown[], ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth } = ctx.state;\n\n return strapi.contentAPI.sanitize.output(data, schema, { auth });\n };\n\n const validateQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth, route } = ctx.state;\n\n return strapi.contentAPI.validate.query(data, schema, { auth, route });\n };\n\n const sanitizeQuery = async (data: Record<string, unknown>, ctx: Context) => {\n const schema = strapi.getModel(FILE_MODEL_UID);\n const { auth, route } = ctx.state;\n\n return strapi.contentAPI.sanitize.query(data, schema, { auth, route });\n };\n\n return {\n async find(ctx: Context) {\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const files = await getService('upload').findMany(sanitizedQuery);\n\n ctx.body = await sanitizeOutput(files, ctx);\n },\n\n async findOne(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n await validateQuery(ctx.query, ctx);\n const sanitizedQuery = await sanitizeQuery(ctx.query, ctx);\n\n const file = await getService('upload').findOne(id, sanitizedQuery.populate!);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async destroy(ctx: Context) {\n const {\n params: { id },\n } = ctx;\n\n const file = await getService('upload').findOne(id);\n\n if (!file) {\n return ctx.notFound('file.notFound');\n }\n\n await getService('upload').remove(file);\n\n ctx.body = await sanitizeOutput(file, ctx);\n },\n\n async updateFileInfo(ctx: Context) {\n const {\n query: { id },\n request: { body },\n } = ctx;\n const data = await validateUploadBody(body);\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const result = await getService('upload').updateFileInfo(id, data.fileInfo as any);\n\n ctx.body = await sanitizeOutput(result, ctx);\n },\n\n async replaceFile(ctx: Context) {\n const {\n query: { id },\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n // cannot replace with more than one file\n if (Array.isArray(filesInput)) {\n throw new ValidationError('Cannot replace a file with multiple ones');\n }\n\n if (!id || (typeof id !== 'string' && typeof id !== 'number')) {\n throw new ValidationError('File id is required and must be a single value');\n }\n\n const data = (await validateUploadBody(filteredBody)) as { fileInfo: FileInfo };\n\n const replacedFiles = await getService('upload').replace(id, { data, file: validFiles[0] });\n\n ctx.body = await sanitizeOutput(replacedFiles, ctx);\n },\n\n async uploadFiles(ctx: Context) {\n const {\n request: { body, files: { files: filesInput } = {} },\n } = ctx;\n\n const {\n validFiles,\n filteredBody,\n errors: validationErrors,\n } = await prepareUploadRequest(filesInput, body, strapi);\n if (validFiles.length === 0) {\n throw new errors.ValidationError(validationErrors[0].message);\n }\n\n const isMultipleFiles = validFiles.length > 1;\n const data: any = await validateUploadBody(filteredBody, isMultipleFiles);\n\n const apiUploadFolderService = getService('api-upload-folder');\n\n const apiUploadFolder = await apiUploadFolderService.getAPIUploadFolder();\n\n if (isMultipleFiles) {\n data.fileInfo = data.fileInfo || [];\n data.fileInfo = validFiles.map((_f, i) => ({\n ...data.fileInfo[i],\n folder: apiUploadFolder.id,\n }));\n } else {\n data.fileInfo = { ...data.fileInfo, folder: apiUploadFolder.id };\n }\n\n const uploadedFiles = await getService('upload').upload({\n data,\n files: validFiles,\n });\n\n ctx.body = await sanitizeOutput(uploadedFiles as any, ctx);\n ctx.status = 201;\n },\n\n // TODO: split into multiple endpoints\n async upload(ctx: Context) {\n const {\n query: { id },\n request: { files: { files } = {} },\n } = ctx;\n\n if (_.isEmpty(files) || (!Array.isArray(files) && files.size === 0)) {\n if (id) {\n return this.updateFileInfo(ctx);\n }\n\n throw new ValidationError('Files are empty');\n }\n\n await (id ? this.replaceFile : this.uploadFiles)(ctx);\n },\n };\n};\n"],"names":["ValidationError","utils","errors","strapi","sanitizeOutput","data","ctx","schema","getModel","FILE_MODEL_UID","auth","state","contentAPI","sanitize","output","validateQuery","route","validate","query","sanitizeQuery","find","sanitizedQuery","files","getService","findMany","body","findOne","params","id","file","populate","notFound","destroy","remove","updateFileInfo","request","validateUploadBody","result","fileInfo","replaceFile","filesInput","validFiles","filteredBody","validationErrors","prepareUploadRequest","length","message","Array","isArray","replacedFiles","replace","uploadFiles","isMultipleFiles","apiUploadFolderService","apiUploadFolder","getAPIUploadFolder","map","_f","i","folder","uploadedFiles","upload","status","_","isEmpty","size"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/upload",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.37.1",
|
|
4
4
|
"description": "Makes it easy to upload images and files to your Strapi Application.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": {
|
|
@@ -61,14 +61,14 @@
|
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@mux/mux-player-react": "3.1.0",
|
|
64
|
-
"@radix-ui/react-dialog": "1.
|
|
64
|
+
"@radix-ui/react-dialog": "1.0.5",
|
|
65
65
|
"@radix-ui/react-toggle-group": "1.1.11",
|
|
66
66
|
"@reduxjs/toolkit": "1.9.7",
|
|
67
|
-
"@strapi/database": "5.
|
|
67
|
+
"@strapi/database": "5.37.1",
|
|
68
68
|
"@strapi/design-system": "2.1.2",
|
|
69
69
|
"@strapi/icons": "2.1.2",
|
|
70
|
-
"@strapi/provider-upload-local": "5.
|
|
71
|
-
"@strapi/utils": "5.
|
|
70
|
+
"@strapi/provider-upload-local": "5.37.1",
|
|
71
|
+
"@strapi/utils": "5.37.1",
|
|
72
72
|
"byte-size": "8.1.1",
|
|
73
73
|
"cropperjs": "1.6.1",
|
|
74
74
|
"date-fns": "2.30.0",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"immer": "9.0.21",
|
|
79
79
|
"koa-range": "0.3.0",
|
|
80
80
|
"koa-static": "5.0.0",
|
|
81
|
-
"lodash": "4.17.
|
|
81
|
+
"lodash": "4.17.23",
|
|
82
82
|
"mime-types": "2.1.35",
|
|
83
83
|
"prop-types": "^15.8.1",
|
|
84
84
|
"qs": "6.14.2",
|
|
@@ -92,8 +92,8 @@
|
|
|
92
92
|
"zod": "3.25.67"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
|
-
"@strapi/admin": "5.
|
|
96
|
-
"@strapi/types": "5.
|
|
95
|
+
"@strapi/admin": "5.37.1",
|
|
96
|
+
"@strapi/types": "5.37.1",
|
|
97
97
|
"@testing-library/dom": "10.4.1",
|
|
98
98
|
"@testing-library/react": "16.3.0",
|
|
99
99
|
"@testing-library/user-event": "14.6.1",
|