@strapi/upload 5.34.0 → 5.36.0
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/components/EditAssetDialog/EditAssetContent.js +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +57 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +55 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +96 -20
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +98 -22
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +47 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +44 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -1
- package/dist/admin/future/App.js +6 -11
- package/dist/admin/future/App.js.map +1 -1
- package/dist/admin/future/App.mjs +6 -11
- package/dist/admin/future/App.mjs.map +1 -1
- package/dist/admin/future/enums.js +12 -0
- package/dist/admin/future/enums.js.map +1 -0
- package/dist/admin/future/enums.mjs +10 -0
- package/dist/admin/future/enums.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js +342 -0
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -0
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +321 -0
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +164 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -0
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +198 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +196 -0
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.js +33 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.mjs +31 -0
- package/dist/admin/future/pages/Assets/components/DropZone/DropZoneWithOverlay.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +107 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +104 -0
- package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/constants.js +54 -0
- package/dist/admin/future/pages/Assets/constants.js.map +1 -0
- package/dist/admin/future/pages/Assets/constants.mjs +50 -0
- package/dist/admin/future/pages/Assets/constants.mjs.map +1 -0
- package/dist/admin/future/services/api.js +28 -0
- package/dist/admin/future/services/api.js.map +1 -0
- package/dist/admin/future/services/api.mjs +25 -0
- package/dist/admin/future/services/api.mjs.map +1 -0
- package/dist/admin/future/services/assets.js +37 -0
- package/dist/admin/future/services/assets.js.map +1 -0
- package/dist/admin/future/services/assets.mjs +35 -0
- package/dist/admin/future/services/assets.mjs.map +1 -0
- package/dist/admin/future/utils/files.js +23 -0
- package/dist/admin/future/utils/files.js.map +1 -0
- package/dist/admin/future/utils/files.mjs +19 -0
- package/dist/admin/future/utils/files.mjs.map +1 -0
- package/dist/admin/future/utils/getAssetIcon.js +28 -0
- package/dist/admin/future/utils/getAssetIcon.js.map +1 -0
- package/dist/admin/future/utils/getAssetIcon.mjs +26 -0
- package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -0
- package/dist/admin/future/utils/translations.js +8 -0
- package/dist/admin/future/utils/translations.js.map +1 -0
- package/dist/admin/future/utils/translations.mjs +6 -0
- package/dist/admin/future/utils/translations.mjs.map +1 -0
- package/dist/admin/hooks/useEditAsset.js +1 -0
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +1 -0
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +7 -6
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +7 -6
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.d.ts +1 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.d.ts +7 -0
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +6 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +13 -0
- package/dist/admin/src/future/App.d.ts +1 -1
- package/dist/admin/src/future/enums.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/AssetsPage.d.ts +1 -0
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/DropZone/DropZoneWithOverlay.d.ts +4 -0
- package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +11 -0
- package/dist/admin/src/future/pages/Assets/constants.d.ts +17 -0
- package/dist/admin/src/future/services/api.d.ts +5 -1
- package/dist/admin/src/future/services/assets.d.ts +13 -0
- package/dist/admin/src/future/utils/files.d.ts +3 -0
- package/dist/admin/src/future/utils/getAssetIcon.d.ts +12 -0
- package/dist/admin/src/future/utils/translations.d.ts +1 -0
- package/dist/admin/translations/en.json.js +11 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +11 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/content-types/file.js +4 -0
- package/dist/server/content-types/file.js.map +1 -1
- package/dist/server/content-types/file.mjs +4 -0
- package/dist/server/content-types/file.mjs.map +1 -1
- package/dist/server/controllers/validation/admin/upload.js +5 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +5 -0
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.js +6 -1
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.mjs +6 -1
- package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
- package/dist/server/services/upload.js +3 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +3 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/content-types/file.d.ts +4 -0
- package/dist/server/src/content-types/file.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +4 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/admin/upload.d.ts +240 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts +180 -0
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +5 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +6 -0
- package/dist/server/src/types.d.ts.map +1 -1
- package/dist/shared/contracts/files.d.ts +6 -0
- package/package.json +7 -6
- package/dist/admin/future/pages/MediaLibraryPage.js +0 -55
- package/dist/admin/future/pages/MediaLibraryPage.js.map +0 -1
- package/dist/admin/future/pages/MediaLibraryPage.mjs +0 -53
- package/dist/admin/future/pages/MediaLibraryPage.mjs.map +0 -1
- package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +0 -1
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
var en = {
|
|
4
4
|
"apiError.FileTooBig": "The uploaded file exceeds the maximum allowed asset size.",
|
|
5
|
+
"assets.uploaded": "{number, plural, one {# asset} other {# assets}} uploaded successfully",
|
|
5
6
|
"upload.generic-error": "An error occurred while uploading the file.",
|
|
6
7
|
"bulk.select.label": "Select all assets",
|
|
7
8
|
"button.next": "Next",
|
|
9
|
+
"new": "New",
|
|
8
10
|
"checkControl.crop-duplicate": "Duplicate & crop the asset",
|
|
9
11
|
"checkControl.crop-original": "Crop the original asset",
|
|
10
12
|
"content.isLoading": "Content is loading.",
|
|
@@ -12,12 +14,17 @@ var en = {
|
|
|
12
14
|
"control-card.cancel": "Cancel",
|
|
13
15
|
"control-card.copy-link": "Copy link",
|
|
14
16
|
"control-card.crop": "Crop",
|
|
17
|
+
"control-card.set-focal-point": "Set focal point",
|
|
18
|
+
"control-card.stop-focal-point": "Cancel focal point selection",
|
|
19
|
+
"control-card.reset-focal-point": "Reset to center",
|
|
20
|
+
"control-card.save-focal-point": "Save focal point",
|
|
15
21
|
"control-card.download": "Download",
|
|
16
22
|
"control-card.edit": "Edit",
|
|
17
23
|
"control-card.remove-selection": "Remove from selection",
|
|
18
24
|
"control-card.replace-media": "Replace Media",
|
|
19
25
|
"control-card.save": "Save",
|
|
20
26
|
"control-card.stop-crop": "Stop cropping",
|
|
27
|
+
"dropzone.upload.message": "Drop here to upload to",
|
|
21
28
|
"filter.add": "Add filter",
|
|
22
29
|
"form.button.replace-media": "Replace media",
|
|
23
30
|
"form.input.description.file-alt": "This text will be displayed if the asset can’t be shown.",
|
|
@@ -34,6 +41,7 @@ var en = {
|
|
|
34
41
|
"header.actions.upload-new-asset": "Upload new asset",
|
|
35
42
|
"header.content.assets-empty": "No assets",
|
|
36
43
|
"header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
|
|
44
|
+
"import-files": "Import files",
|
|
37
45
|
"input.button.label": "Browse files",
|
|
38
46
|
"input.label": "Drag & Drop here or",
|
|
39
47
|
"input.label-bold": "Drag & drop",
|
|
@@ -73,6 +81,7 @@ var en = {
|
|
|
73
81
|
"modal.file-details.extension": "Extension",
|
|
74
82
|
"modal.file-details.size": "Size",
|
|
75
83
|
"modal.file-details.id": "Asset ID",
|
|
84
|
+
"modal.file-details.focal-point": "Focal point",
|
|
76
85
|
"modal.folder.elements.count": "{folderCount} folders, {assetCount} assets",
|
|
77
86
|
"modal.header.browse": "Upload assets",
|
|
78
87
|
"modal.header.file-detail": "Details",
|
|
@@ -137,6 +146,8 @@ var en = {
|
|
|
137
146
|
"list.table.header.size": "size",
|
|
138
147
|
"list.table.header.createdAt": "created",
|
|
139
148
|
"list.table.header.updatedAt": "last update",
|
|
149
|
+
"list.table.header.creationDate": "Creation Date",
|
|
150
|
+
"list.table.header.lastModified": "Last Modified",
|
|
140
151
|
"list.table.header.sort": "Sort on {label}",
|
|
141
152
|
"list.table.content.empty-label": "This field is empty",
|
|
142
153
|
"tabs.title": "How do you want to upload your assets?",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
var en = {
|
|
2
2
|
"apiError.FileTooBig": "The uploaded file exceeds the maximum allowed asset size.",
|
|
3
|
+
"assets.uploaded": "{number, plural, one {# asset} other {# assets}} uploaded successfully",
|
|
3
4
|
"upload.generic-error": "An error occurred while uploading the file.",
|
|
4
5
|
"bulk.select.label": "Select all assets",
|
|
5
6
|
"button.next": "Next",
|
|
7
|
+
"new": "New",
|
|
6
8
|
"checkControl.crop-duplicate": "Duplicate & crop the asset",
|
|
7
9
|
"checkControl.crop-original": "Crop the original asset",
|
|
8
10
|
"content.isLoading": "Content is loading.",
|
|
@@ -10,12 +12,17 @@ var en = {
|
|
|
10
12
|
"control-card.cancel": "Cancel",
|
|
11
13
|
"control-card.copy-link": "Copy link",
|
|
12
14
|
"control-card.crop": "Crop",
|
|
15
|
+
"control-card.set-focal-point": "Set focal point",
|
|
16
|
+
"control-card.stop-focal-point": "Cancel focal point selection",
|
|
17
|
+
"control-card.reset-focal-point": "Reset to center",
|
|
18
|
+
"control-card.save-focal-point": "Save focal point",
|
|
13
19
|
"control-card.download": "Download",
|
|
14
20
|
"control-card.edit": "Edit",
|
|
15
21
|
"control-card.remove-selection": "Remove from selection",
|
|
16
22
|
"control-card.replace-media": "Replace Media",
|
|
17
23
|
"control-card.save": "Save",
|
|
18
24
|
"control-card.stop-crop": "Stop cropping",
|
|
25
|
+
"dropzone.upload.message": "Drop here to upload to",
|
|
19
26
|
"filter.add": "Add filter",
|
|
20
27
|
"form.button.replace-media": "Replace media",
|
|
21
28
|
"form.input.description.file-alt": "This text will be displayed if the asset can’t be shown.",
|
|
@@ -32,6 +39,7 @@ var en = {
|
|
|
32
39
|
"header.actions.upload-new-asset": "Upload new asset",
|
|
33
40
|
"header.content.assets-empty": "No assets",
|
|
34
41
|
"header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
|
|
42
|
+
"import-files": "Import files",
|
|
35
43
|
"input.button.label": "Browse files",
|
|
36
44
|
"input.label": "Drag & Drop here or",
|
|
37
45
|
"input.label-bold": "Drag & drop",
|
|
@@ -71,6 +79,7 @@ var en = {
|
|
|
71
79
|
"modal.file-details.extension": "Extension",
|
|
72
80
|
"modal.file-details.size": "Size",
|
|
73
81
|
"modal.file-details.id": "Asset ID",
|
|
82
|
+
"modal.file-details.focal-point": "Focal point",
|
|
74
83
|
"modal.folder.elements.count": "{folderCount} folders, {assetCount} assets",
|
|
75
84
|
"modal.header.browse": "Upload assets",
|
|
76
85
|
"modal.header.file-detail": "Details",
|
|
@@ -135,6 +144,8 @@ var en = {
|
|
|
135
144
|
"list.table.header.size": "size",
|
|
136
145
|
"list.table.header.createdAt": "created",
|
|
137
146
|
"list.table.header.updatedAt": "last update",
|
|
147
|
+
"list.table.header.creationDate": "Creation Date",
|
|
148
|
+
"list.table.header.lastModified": "Last Modified",
|
|
138
149
|
"list.table.header.sort": "Sort on {label}",
|
|
139
150
|
"list.table.content.empty-label": "This field is empty",
|
|
140
151
|
"tabs.title": "How do you want to upload your assets?",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sources":["../../../server/src/content-types/file.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'files',\n info: {\n singularName: 'file',\n pluralName: 'files',\n displayName: 'File',\n description: '',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n required: true,\n },\n alternativeText: {\n type: 'text',\n configurable: false,\n },\n caption: {\n type: 'text',\n configurable: false,\n },\n width: {\n type: 'integer',\n configurable: false,\n },\n height: {\n type: 'integer',\n configurable: false,\n },\n formats: {\n type: 'json',\n configurable: false,\n },\n hash: {\n type: 'string',\n configurable: false,\n required: true,\n },\n ext: {\n type: 'string',\n configurable: false,\n },\n mime: {\n type: 'string',\n configurable: false,\n required: true,\n },\n size: {\n type: 'decimal',\n configurable: false,\n required: true,\n },\n url: {\n type: 'text',\n configurable: false,\n required: true,\n },\n previewUrl: {\n type: 'text',\n configurable: false,\n },\n provider: {\n type: 'string',\n configurable: false,\n required: true,\n },\n provider_metadata: {\n type: 'json',\n configurable: false,\n },\n related: {\n type: 'relation',\n relation: 'morphToMany',\n configurable: false,\n },\n folder: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'files',\n private: true,\n },\n folderPath: {\n type: 'string',\n minLength: 1,\n required: true,\n private: true,\n searchable: false,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_files_folder_path_index',\n columns: ['folder_path'],\n type: null,\n },\n {\n name: `upload_files_created_at_index`,\n columns: ['created_at'],\n type: null,\n },\n {\n name: `upload_files_updated_at_index`,\n columns: ['updated_at'],\n type: null,\n },\n {\n name: `upload_files_name_index`,\n columns: ['name'],\n type: null,\n },\n {\n name: `upload_files_size_index`,\n columns: ['size'],\n type: null,\n },\n {\n name: `upload_files_ext_index`,\n columns: ['ext'],\n type: null,\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n"],"names":["schema","collectionName","info","singularName","pluralName","displayName","description","options","pluginOptions","visible","attributes","name","type","configurable","required","alternativeText","caption","width","height","formats","hash","ext","mime","size","url","previewUrl","provider","provider_metadata","related","relation","folder","target","FOLDER_MODEL_UID","inversedBy","private","folderPath","minLength","searchable","indexes","columns"],"mappings":";;;;AAIA,WAAe;IACbA,MAAQ,EAAA;QACNC,cAAgB,EAAA,OAAA;QAChBC,IAAM,EAAA;YACJC,YAAc,EAAA,MAAA;YACdC,UAAY,EAAA,OAAA;YACZC,WAAa,EAAA,MAAA;YACbC,WAAa,EAAA;AACf,SAAA;AACAC,QAAAA,OAAAA,EAAS,EAAC;QACVC,aAAe,EAAA;YACb,iBAAmB,EAAA;gBACjBC,OAAS,EAAA;AACX,aAAA;YACA,sBAAwB,EAAA;gBACtBA,OAAS,EAAA;AACX;AACF,SAAA;QACAC,UAAY,EAAA;YACVC,IAAM,EAAA;gBACJC,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA,KAAA;gBACdC,QAAU,EAAA;AACZ,aAAA;YACAC,eAAiB,EAAA;gBACfH,IAAM,EAAA,MAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAG,OAAS,EAAA;gBACPJ,IAAM,EAAA,MAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAI,KAAO,EAAA;
|
|
1
|
+
{"version":3,"file":"file.js","sources":["../../../server/src/content-types/file.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'files',\n info: {\n singularName: 'file',\n pluralName: 'files',\n displayName: 'File',\n description: '',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n required: true,\n },\n alternativeText: {\n type: 'text',\n configurable: false,\n },\n caption: {\n type: 'text',\n configurable: false,\n },\n focalPoint: {\n type: 'json',\n configurable: false,\n },\n width: {\n type: 'integer',\n configurable: false,\n },\n height: {\n type: 'integer',\n configurable: false,\n },\n formats: {\n type: 'json',\n configurable: false,\n },\n hash: {\n type: 'string',\n configurable: false,\n required: true,\n },\n ext: {\n type: 'string',\n configurable: false,\n },\n mime: {\n type: 'string',\n configurable: false,\n required: true,\n },\n size: {\n type: 'decimal',\n configurable: false,\n required: true,\n },\n url: {\n type: 'text',\n configurable: false,\n required: true,\n },\n previewUrl: {\n type: 'text',\n configurable: false,\n },\n provider: {\n type: 'string',\n configurable: false,\n required: true,\n },\n provider_metadata: {\n type: 'json',\n configurable: false,\n },\n related: {\n type: 'relation',\n relation: 'morphToMany',\n configurable: false,\n },\n folder: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'files',\n private: true,\n },\n folderPath: {\n type: 'string',\n minLength: 1,\n required: true,\n private: true,\n searchable: false,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_files_folder_path_index',\n columns: ['folder_path'],\n type: null,\n },\n {\n name: `upload_files_created_at_index`,\n columns: ['created_at'],\n type: null,\n },\n {\n name: `upload_files_updated_at_index`,\n columns: ['updated_at'],\n type: null,\n },\n {\n name: `upload_files_name_index`,\n columns: ['name'],\n type: null,\n },\n {\n name: `upload_files_size_index`,\n columns: ['size'],\n type: null,\n },\n {\n name: `upload_files_ext_index`,\n columns: ['ext'],\n type: null,\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n"],"names":["schema","collectionName","info","singularName","pluralName","displayName","description","options","pluginOptions","visible","attributes","name","type","configurable","required","alternativeText","caption","focalPoint","width","height","formats","hash","ext","mime","size","url","previewUrl","provider","provider_metadata","related","relation","folder","target","FOLDER_MODEL_UID","inversedBy","private","folderPath","minLength","searchable","indexes","columns"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.mjs","sources":["../../../server/src/content-types/file.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'files',\n info: {\n singularName: 'file',\n pluralName: 'files',\n displayName: 'File',\n description: '',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n required: true,\n },\n alternativeText: {\n type: 'text',\n configurable: false,\n },\n caption: {\n type: 'text',\n configurable: false,\n },\n width: {\n type: 'integer',\n configurable: false,\n },\n height: {\n type: 'integer',\n configurable: false,\n },\n formats: {\n type: 'json',\n configurable: false,\n },\n hash: {\n type: 'string',\n configurable: false,\n required: true,\n },\n ext: {\n type: 'string',\n configurable: false,\n },\n mime: {\n type: 'string',\n configurable: false,\n required: true,\n },\n size: {\n type: 'decimal',\n configurable: false,\n required: true,\n },\n url: {\n type: 'text',\n configurable: false,\n required: true,\n },\n previewUrl: {\n type: 'text',\n configurable: false,\n },\n provider: {\n type: 'string',\n configurable: false,\n required: true,\n },\n provider_metadata: {\n type: 'json',\n configurable: false,\n },\n related: {\n type: 'relation',\n relation: 'morphToMany',\n configurable: false,\n },\n folder: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'files',\n private: true,\n },\n folderPath: {\n type: 'string',\n minLength: 1,\n required: true,\n private: true,\n searchable: false,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_files_folder_path_index',\n columns: ['folder_path'],\n type: null,\n },\n {\n name: `upload_files_created_at_index`,\n columns: ['created_at'],\n type: null,\n },\n {\n name: `upload_files_updated_at_index`,\n columns: ['updated_at'],\n type: null,\n },\n {\n name: `upload_files_name_index`,\n columns: ['name'],\n type: null,\n },\n {\n name: `upload_files_size_index`,\n columns: ['size'],\n type: null,\n },\n {\n name: `upload_files_ext_index`,\n columns: ['ext'],\n type: null,\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n"],"names":["schema","collectionName","info","singularName","pluralName","displayName","description","options","pluginOptions","visible","attributes","name","type","configurable","required","alternativeText","caption","width","height","formats","hash","ext","mime","size","url","previewUrl","provider","provider_metadata","related","relation","folder","target","FOLDER_MODEL_UID","inversedBy","private","folderPath","minLength","searchable","indexes","columns"],"mappings":";;AAIA,WAAe;IACbA,MAAQ,EAAA;QACNC,cAAgB,EAAA,OAAA;QAChBC,IAAM,EAAA;YACJC,YAAc,EAAA,MAAA;YACdC,UAAY,EAAA,OAAA;YACZC,WAAa,EAAA,MAAA;YACbC,WAAa,EAAA;AACf,SAAA;AACAC,QAAAA,OAAAA,EAAS,EAAC;QACVC,aAAe,EAAA;YACb,iBAAmB,EAAA;gBACjBC,OAAS,EAAA;AACX,aAAA;YACA,sBAAwB,EAAA;gBACtBA,OAAS,EAAA;AACX;AACF,SAAA;QACAC,UAAY,EAAA;YACVC,IAAM,EAAA;gBACJC,IAAM,EAAA,QAAA;gBACNC,YAAc,EAAA,KAAA;gBACdC,QAAU,EAAA;AACZ,aAAA;YACAC,eAAiB,EAAA;gBACfH,IAAM,EAAA,MAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAG,OAAS,EAAA;gBACPJ,IAAM,EAAA,MAAA;gBACNC,YAAc,EAAA;AAChB,aAAA;YACAI,KAAO,EAAA;
|
|
1
|
+
{"version":3,"file":"file.mjs","sources":["../../../server/src/content-types/file.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nimport { FOLDER_MODEL_UID } from '../constants';\n\nexport default {\n schema: {\n collectionName: 'files',\n info: {\n singularName: 'file',\n pluralName: 'files',\n displayName: 'File',\n description: '',\n },\n options: {},\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n configurable: false,\n required: true,\n },\n alternativeText: {\n type: 'text',\n configurable: false,\n },\n caption: {\n type: 'text',\n configurable: false,\n },\n focalPoint: {\n type: 'json',\n configurable: false,\n },\n width: {\n type: 'integer',\n configurable: false,\n },\n height: {\n type: 'integer',\n configurable: false,\n },\n formats: {\n type: 'json',\n configurable: false,\n },\n hash: {\n type: 'string',\n configurable: false,\n required: true,\n },\n ext: {\n type: 'string',\n configurable: false,\n },\n mime: {\n type: 'string',\n configurable: false,\n required: true,\n },\n size: {\n type: 'decimal',\n configurable: false,\n required: true,\n },\n url: {\n type: 'text',\n configurable: false,\n required: true,\n },\n previewUrl: {\n type: 'text',\n configurable: false,\n },\n provider: {\n type: 'string',\n configurable: false,\n required: true,\n },\n provider_metadata: {\n type: 'json',\n configurable: false,\n },\n related: {\n type: 'relation',\n relation: 'morphToMany',\n configurable: false,\n },\n folder: {\n type: 'relation',\n relation: 'manyToOne',\n target: FOLDER_MODEL_UID,\n inversedBy: 'files',\n private: true,\n },\n folderPath: {\n type: 'string',\n minLength: 1,\n required: true,\n private: true,\n searchable: false,\n },\n },\n // experimental feature:\n indexes: [\n {\n name: 'upload_files_folder_path_index',\n columns: ['folder_path'],\n type: null,\n },\n {\n name: `upload_files_created_at_index`,\n columns: ['created_at'],\n type: null,\n },\n {\n name: `upload_files_updated_at_index`,\n columns: ['updated_at'],\n type: null,\n },\n {\n name: `upload_files_name_index`,\n columns: ['name'],\n type: null,\n },\n {\n name: `upload_files_size_index`,\n columns: ['size'],\n type: null,\n },\n {\n name: `upload_files_ext_index`,\n columns: ['ext'],\n type: null,\n },\n ],\n } satisfies Partial<Struct.CollectionTypeSchema>,\n};\n"],"names":["schema","collectionName","info","singularName","pluralName","displayName","description","options","pluginOptions","visible","attributes","name","type","configurable","required","alternativeText","caption","focalPoint","width","height","formats","hash","ext","mime","size","url","previewUrl","provider","provider_metadata","related","relation","folder","target","FOLDER_MODEL_UID","inversedBy","private","folderPath","minLength","searchable","indexes","columns"],"mappings":"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"}
|
|
@@ -4,10 +4,15 @@ var utils = require('@strapi/utils');
|
|
|
4
4
|
var fp = require('lodash/fp');
|
|
5
5
|
var index = require('../../../utils/index.js');
|
|
6
6
|
|
|
7
|
+
const focalPointSchema = utils.yup.object({
|
|
8
|
+
x: utils.yup.number().min(0).max(100).required(),
|
|
9
|
+
y: utils.yup.number().min(0).max(100).required()
|
|
10
|
+
}).nullable().default(null);
|
|
7
11
|
const fileInfoSchema = utils.yup.object({
|
|
8
12
|
name: utils.yup.string().nullable(),
|
|
9
13
|
alternativeText: utils.yup.string().nullable(),
|
|
10
14
|
caption: utils.yup.string().nullable(),
|
|
15
|
+
focalPoint: focalPointSchema,
|
|
11
16
|
folder: utils.yup.strapiID().nullable().test('folder-exists', 'the folder does not exist', async (folderId)=>{
|
|
12
17
|
if (fp.isNil(folderId)) {
|
|
13
18
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sources":["../../../../../server/src/controllers/validation/admin/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst fileInfoSchema = yup.object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n folder: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'the folder does not exist', async (folderId) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n }),\n});\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n\nconst bulkUpdatesSchema = yup.object({\n updates: yup\n .array()\n .of(\n yup.object({\n id: yup.number().required(),\n fileInfo: fileInfoSchema.required(),\n })\n )\n .min(1)\n .required(),\n});\n\nexport const validateBulkUpdateBody = validateYupSchema(bulkUpdatesSchema);\n"],"names":["
|
|
1
|
+
{"version":3,"file":"upload.js","sources":["../../../../../server/src/controllers/validation/admin/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n focalPoint: focalPointSchema,\n folder: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'the folder does not exist', async (folderId) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n }),\n});\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n\nconst bulkUpdatesSchema = yup.object({\n updates: yup\n .array()\n .of(\n yup.object({\n id: yup.number().required(),\n fileInfo: fileInfoSchema.required(),\n })\n )\n .min(1)\n .required(),\n});\n\nexport const validateBulkUpdateBody = validateYupSchema(bulkUpdatesSchema);\n"],"names":["focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","strapiID","test","folderId","isNil","exists","getService","id","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict","bulkUpdatesSchema","updates","validateBulkUpdateBody"],"mappings":";;;;;;AAIA,MAAMA,gBAAAA,GAAmBC,SACtBC,CAAAA,MAAM,CAAC;IACNC,CAAGF,EAAAA,SAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,EAAA;IACxCC,CAAGP,EAAAA,SAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ;AAC1C,CACCE,CAAAA,CAAAA,QAAQ,EACRC,CAAAA,OAAO,CAAC,IAAA,CAAA;AAEX,MAAMC,cAAAA,GAAiBV,SAAIC,CAAAA,MAAM,CAAC;IAChCU,IAAMX,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC3BK,eAAiBb,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACtCM,OAASd,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC9BO,UAAYhB,EAAAA,gBAAAA;IACZiB,MAAQhB,EAAAA,SAAAA,CACLiB,QAAQ,EACRT,CAAAA,QAAQ,GACRU,IAAI,CAAC,eAAiB,EAAA,2BAAA,EAA6B,OAAOC,QAAAA,GAAAA;AACzD,QAAA,IAAIC,SAAMD,QAAW,CAAA,EAAA;YACnB,OAAO,IAAA;AACT;AAEA,QAAA,MAAME,MAAS,GAAA,MAAMC,gBAAW,CAAA,QAAA,CAAA,CAAUD,MAAM,CAAC;YAAEE,EAAIJ,EAAAA;AAAS,SAAA,CAAA;QAEhE,OAAOE,MAAAA;AACT,KAAA;AACJ,CAAA,CAAA;AAEA,MAAMG,YAAAA,GAAexB,SAAIC,CAAAA,MAAM,CAAC;IAC9BwB,QAAUf,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMgB,iBAAAA,GAAoB1B,SAAIC,CAAAA,MAAM,CAAC;AACnCwB,IAAAA,QAAAA,EAAUzB,SAAI2B,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAAClB,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMmB,qBAAqB,CAACC,IAAAA,GAAO,EAAE,EAAEC,UAAU,KAAK,GAAA;IACpD,MAAMC,MAAAA,GAASD,UAAUL,iBAAoBF,GAAAA,YAAAA;AAE7C,IAAA,OAAOS,wBAAkBD,MAAQ,EAAA;QAAEE,MAAQ,EAAA;KAASJ,CAAAA,CAAAA,IAAAA,CAAAA;AACtD;AAQA,MAAMK,iBAAAA,GAAoBnC,SAAIC,CAAAA,MAAM,CAAC;AACnCmC,IAAAA,OAAAA,EAASpC,UACN2B,KAAK,EAAA,CACLC,EAAE,CACD5B,SAAAA,CAAIC,MAAM,CAAC;QACTsB,EAAIvB,EAAAA,SAAAA,CAAIG,MAAM,EAAA,CAAGG,QAAQ,EAAA;AACzBmB,QAAAA,QAAAA,EAAUf,eAAeJ,QAAQ;KAGpCF,CAAAA,CAAAA,CAAAA,GAAG,CAAC,CAAA,CAAA,CACJE,QAAQ;AACb,CAAA,CAAA;AAEO,MAAM+B,sBAAyBJ,GAAAA,uBAAAA,CAAkBE,iBAAmB;;;;;"}
|
|
@@ -2,10 +2,15 @@ import { yup, validateYupSchema } from '@strapi/utils';
|
|
|
2
2
|
import { isNil } from 'lodash/fp';
|
|
3
3
|
import { getService } from '../../../utils/index.mjs';
|
|
4
4
|
|
|
5
|
+
const focalPointSchema = yup.object({
|
|
6
|
+
x: yup.number().min(0).max(100).required(),
|
|
7
|
+
y: yup.number().min(0).max(100).required()
|
|
8
|
+
}).nullable().default(null);
|
|
5
9
|
const fileInfoSchema = yup.object({
|
|
6
10
|
name: yup.string().nullable(),
|
|
7
11
|
alternativeText: yup.string().nullable(),
|
|
8
12
|
caption: yup.string().nullable(),
|
|
13
|
+
focalPoint: focalPointSchema,
|
|
9
14
|
folder: yup.strapiID().nullable().test('folder-exists', 'the folder does not exist', async (folderId)=>{
|
|
10
15
|
if (isNil(folderId)) {
|
|
11
16
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/admin/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst fileInfoSchema = yup.object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n folder: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'the folder does not exist', async (folderId) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n }),\n});\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n\nconst bulkUpdatesSchema = yup.object({\n updates: yup\n .array()\n .of(\n yup.object({\n id: yup.number().required(),\n fileInfo: fileInfoSchema.required(),\n })\n )\n .min(1)\n .required(),\n});\n\nexport const validateBulkUpdateBody = validateYupSchema(bulkUpdatesSchema);\n"],"names":["
|
|
1
|
+
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/admin/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\nimport { isNil } from 'lodash/fp';\nimport { getService } from '../../../utils';\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n focalPoint: focalPointSchema,\n folder: yup\n .strapiID()\n .nullable()\n .test('folder-exists', 'the folder does not exist', async (folderId) => {\n if (isNil(folderId)) {\n return true;\n }\n\n const exists = await getService('folder').exists({ id: folderId });\n\n return exists;\n }),\n});\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n\nconst bulkUpdatesSchema = yup.object({\n updates: yup\n .array()\n .of(\n yup.object({\n id: yup.number().required(),\n fileInfo: fileInfoSchema.required(),\n })\n )\n .min(1)\n .required(),\n});\n\nexport const validateBulkUpdateBody = validateYupSchema(bulkUpdatesSchema);\n"],"names":["focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","strapiID","test","folderId","isNil","exists","getService","id","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict","bulkUpdatesSchema","updates","validateBulkUpdateBody"],"mappings":";;;;AAIA,MAAMA,gBAAAA,GAAmBC,GACtBC,CAAAA,MAAM,CAAC;IACNC,CAAGF,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,EAAA;IACxCC,CAAGP,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ;AAC1C,CACCE,CAAAA,CAAAA,QAAQ,EACRC,CAAAA,OAAO,CAAC,IAAA,CAAA;AAEX,MAAMC,cAAAA,GAAiBV,GAAIC,CAAAA,MAAM,CAAC;IAChCU,IAAMX,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC3BK,eAAiBb,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACtCM,OAASd,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC9BO,UAAYhB,EAAAA,gBAAAA;IACZiB,MAAQhB,EAAAA,GAAAA,CACLiB,QAAQ,EACRT,CAAAA,QAAQ,GACRU,IAAI,CAAC,eAAiB,EAAA,2BAAA,EAA6B,OAAOC,QAAAA,GAAAA;AACzD,QAAA,IAAIC,MAAMD,QAAW,CAAA,EAAA;YACnB,OAAO,IAAA;AACT;AAEA,QAAA,MAAME,MAAS,GAAA,MAAMC,UAAW,CAAA,QAAA,CAAA,CAAUD,MAAM,CAAC;YAAEE,EAAIJ,EAAAA;AAAS,SAAA,CAAA;QAEhE,OAAOE,MAAAA;AACT,KAAA;AACJ,CAAA,CAAA;AAEA,MAAMG,YAAAA,GAAexB,GAAIC,CAAAA,MAAM,CAAC;IAC9BwB,QAAUf,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMgB,iBAAAA,GAAoB1B,GAAIC,CAAAA,MAAM,CAAC;AACnCwB,IAAAA,QAAAA,EAAUzB,GAAI2B,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAAClB,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMmB,qBAAqB,CAACC,IAAAA,GAAO,EAAE,EAAEC,UAAU,KAAK,GAAA;IACpD,MAAMC,MAAAA,GAASD,UAAUL,iBAAoBF,GAAAA,YAAAA;AAE7C,IAAA,OAAOS,kBAAkBD,MAAQ,EAAA;QAAEE,MAAQ,EAAA;KAASJ,CAAAA,CAAAA,IAAAA,CAAAA;AACtD;AAQA,MAAMK,iBAAAA,GAAoBnC,GAAIC,CAAAA,MAAM,CAAC;AACnCmC,IAAAA,OAAAA,EAASpC,IACN2B,KAAK,EAAA,CACLC,EAAE,CACD5B,GAAAA,CAAIC,MAAM,CAAC;QACTsB,EAAIvB,EAAAA,GAAAA,CAAIG,MAAM,EAAA,CAAGG,QAAQ,EAAA;AACzBmB,QAAAA,QAAAA,EAAUf,eAAeJ,QAAQ;KAGpCF,CAAAA,CAAAA,CAAAA,GAAG,CAAC,CAAA,CAAA,CACJE,QAAQ;AACb,CAAA,CAAA;AAEO,MAAM+B,sBAAyBJ,GAAAA,iBAAAA,CAAkBE,iBAAmB;;;;"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
var utils = require('@strapi/utils');
|
|
4
4
|
|
|
5
|
+
const focalPointSchema = utils.yup.object({
|
|
6
|
+
x: utils.yup.number().min(0).max(100).required(),
|
|
7
|
+
y: utils.yup.number().min(0).max(100).required()
|
|
8
|
+
}).nullable().default(null);
|
|
5
9
|
const fileInfoSchema = utils.yup.object({
|
|
6
10
|
name: utils.yup.string().nullable(),
|
|
7
11
|
alternativeText: utils.yup.string().nullable(),
|
|
8
|
-
caption: utils.yup.string().nullable()
|
|
12
|
+
caption: utils.yup.string().nullable(),
|
|
13
|
+
focalPoint: focalPointSchema
|
|
9
14
|
}).noUnknown();
|
|
10
15
|
const uploadSchema = utils.yup.object({
|
|
11
16
|
fileInfo: fileInfoSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"upload.js","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n focalPoint: focalPointSchema,\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","noUnknown","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict"],"mappings":";;;;AAEA,MAAMA,gBAAAA,GAAmBC,SACtBC,CAAAA,MAAM,CAAC;IACNC,CAAGF,EAAAA,SAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,EAAA;IACxCC,CAAGP,EAAAA,SAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ;AAC1C,CACCE,CAAAA,CAAAA,QAAQ,EACRC,CAAAA,OAAO,CAAC,IAAA,CAAA;AAEX,MAAMC,cAAAA,GAAiBV,SACpBC,CAAAA,MAAM,CAAC;IACNU,IAAMX,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC3BK,eAAiBb,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACtCM,OAASd,EAAAA,SAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC9BO,UAAYhB,EAAAA;AACd,CAAA,CAAA,CACCiB,SAAS,EAAA;AAEZ,MAAMC,YAAAA,GAAejB,SAAIC,CAAAA,MAAM,CAAC;IAC9BiB,QAAUR,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMS,iBAAAA,GAAoBnB,SAAIC,CAAAA,MAAM,CAAC;AACnCiB,IAAAA,QAAAA,EAAUlB,SAAIoB,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAACX,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMY,qBAAqB,CAACC,IAAAA,GAAO,EAAE,EAAEC,UAAU,KAAK,GAAA;IACpD,MAAMC,MAAAA,GAASD,UAAUL,iBAAoBF,GAAAA,YAAAA;AAE7C,IAAA,OAAOS,wBAAkBD,MAAQ,EAAA;QAAEE,MAAQ,EAAA;KAASJ,CAAAA,CAAAA,IAAAA,CAAAA;AACtD;;;;"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { yup, validateYupSchema } from '@strapi/utils';
|
|
2
2
|
|
|
3
|
+
const focalPointSchema = yup.object({
|
|
4
|
+
x: yup.number().min(0).max(100).required(),
|
|
5
|
+
y: yup.number().min(0).max(100).required()
|
|
6
|
+
}).nullable().default(null);
|
|
3
7
|
const fileInfoSchema = yup.object({
|
|
4
8
|
name: yup.string().nullable(),
|
|
5
9
|
alternativeText: yup.string().nullable(),
|
|
6
|
-
caption: yup.string().nullable()
|
|
10
|
+
caption: yup.string().nullable(),
|
|
11
|
+
focalPoint: focalPointSchema
|
|
7
12
|
}).noUnknown();
|
|
8
13
|
const uploadSchema = yup.object({
|
|
9
14
|
fileInfo: fileInfoSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n focalPoint: focalPointSchema,\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","noUnknown","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict"],"mappings":";;AAEA,MAAMA,gBAAAA,GAAmBC,GACtBC,CAAAA,MAAM,CAAC;IACNC,CAAGF,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,EAAA;IACxCC,CAAGP,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ;AAC1C,CACCE,CAAAA,CAAAA,QAAQ,EACRC,CAAAA,OAAO,CAAC,IAAA,CAAA;AAEX,MAAMC,cAAAA,GAAiBV,GACpBC,CAAAA,MAAM,CAAC;IACNU,IAAMX,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC3BK,eAAiBb,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACtCM,OAASd,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC9BO,UAAYhB,EAAAA;AACd,CAAA,CAAA,CACCiB,SAAS,EAAA;AAEZ,MAAMC,YAAAA,GAAejB,GAAIC,CAAAA,MAAM,CAAC;IAC9BiB,QAAUR,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMS,iBAAAA,GAAoBnB,GAAIC,CAAAA,MAAM,CAAC;AACnCiB,IAAAA,QAAAA,EAAUlB,GAAIoB,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAACX,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMY,qBAAqB,CAACC,IAAAA,GAAO,EAAE,EAAEC,UAAU,KAAK,GAAA;IACpD,MAAMC,MAAAA,GAASD,UAAUL,iBAAoBF,GAAAA,YAAAA;AAE7C,IAAA,OAAOS,kBAAkBD,MAAQ,EAAA;QAAEE,MAAQ,EAAA;KAASJ,CAAAA,CAAAA,IAAAA,CAAAA;AACtD;;;;"}
|
|
@@ -88,6 +88,7 @@ var upload = (({ strapi })=>{
|
|
|
88
88
|
name: usedName,
|
|
89
89
|
alternativeText: fileInfo.alternativeText,
|
|
90
90
|
caption: fileInfo.caption,
|
|
91
|
+
focalPoint: fileInfo.focalPoint,
|
|
91
92
|
folder: fileInfo.folder,
|
|
92
93
|
folderPath: await fileService.getFolderPath(fileInfo.folder),
|
|
93
94
|
hash: imageManipulationService.generateFileName(basename),
|
|
@@ -233,7 +234,7 @@ var upload = (({ strapi })=>{
|
|
|
233
234
|
user
|
|
234
235
|
});
|
|
235
236
|
}
|
|
236
|
-
async function updateFileInfo(id, { name, alternativeText, caption, folder }, opts) {
|
|
237
|
+
async function updateFileInfo(id, { name, alternativeText, caption, focalPoint, folder }, opts) {
|
|
237
238
|
const { user } = opts ?? {};
|
|
238
239
|
const dbFile = await findOne(id);
|
|
239
240
|
if (!dbFile) {
|
|
@@ -245,6 +246,7 @@ var upload = (({ strapi })=>{
|
|
|
245
246
|
name: newName,
|
|
246
247
|
alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,
|
|
247
248
|
caption: _.isNil(caption) ? dbFile.caption : caption,
|
|
249
|
+
focalPoint: _.isNil(focalPoint) ? dbFile.focalPoint : focalPoint,
|
|
248
250
|
folder: _.isUndefined(folder) ? dbFile.folder : folder,
|
|
249
251
|
folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder)
|
|
250
252
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sources":["../../../server/src/services/upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { extension } from 'mime-types';\nimport {\n async,\n sanitize,\n contentTypes as contentTypesUtils,\n errors,\n file as fileUtils,\n} from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { FILE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from '../constants';\nimport { getService } from '../utils';\n\nimport type { Config, File, InputFile, UploadableFile, FileInfo } from '../types';\nimport type { ViewConfiguration } from '../controllers/validation/admin/configureView';\nimport type { Settings } from '../controllers/validation/admin/settings';\n\ntype User = {\n id: string | number;\n};\n\ntype ID = string | number;\n\ntype CommonOptions = {\n user?: User;\n};\n\ntype Metas = {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n};\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\nconst { MEDIA_CREATE, MEDIA_UPDATE, MEDIA_DELETE } = ALLOWED_WEBHOOK_EVENTS;\n\nconst { ApplicationError, NotFoundError } = errors;\nconst { bytesToKbytes } = fileUtils;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const fileService = getService('file');\n\n const sendMediaMetrics = async (data: Pick<File, 'caption' | 'alternativeText'>) => {\n if (_.has(data, 'caption') && !_.isEmpty(data.caption)) {\n await getService('metrics').trackUsage('didSaveMediaWithCaption');\n }\n\n if (_.has(data, 'alternativeText') && !_.isEmpty(data.alternativeText)) {\n await getService('metrics').trackUsage('didSaveMediaWithAlternativeText');\n }\n };\n\n const createAndAssignTmpWorkingDirectoryToFiles = async (\n files: InputFile | InputFile[]\n ): Promise<string> => {\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-upload-'));\n\n if (Array.isArray(files)) {\n files.forEach((file) => {\n file.tmpWorkingDirectory = tmpWorkingDirectory;\n });\n } else {\n files.tmpWorkingDirectory = tmpWorkingDirectory;\n }\n\n return tmpWorkingDirectory;\n };\n\n function filenameReservedRegex() {\n // eslint-disable-next-line no-control-regex\n return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n }\n\n function windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n }\n\n /**\n * Copied from https://github.com/sindresorhus/valid-filename package\n */\n function isValidFilename(string: string) {\n if (!string || string.length > 255) {\n return false;\n }\n if (filenameReservedRegex().test(string) || windowsReservedNameRegex().test(string)) {\n return false;\n }\n if (string === '.' || string === '..') {\n return false;\n }\n return true;\n }\n\n async function emitEvent(event: string, data: Record<string, any>) {\n const modelDef = strapi.getModel(FILE_MODEL_UID);\n const sanitizedData = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: modelDef,\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n },\n data\n );\n\n strapi.eventHub.emit(event, { media: sanitizedData });\n }\n\n async function formatFileInfo(\n { filename, type, size }: { filename: string; type: string; size: number },\n fileInfo: Partial<FileInfo> = {},\n metas: {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n } = {}\n ): Promise<Omit<UploadableFile, 'getStream'>> {\n const fileService = getService('file');\n const imageManipulationService = getService('image-manipulation');\n\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n let ext = path.extname(filename);\n if (!ext) {\n ext = `.${extension(type)}`;\n }\n const usedName = (fileInfo.name || filename).normalize();\n const basename = path.basename(usedName, ext);\n\n // Prevent null characters in file name\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n const entity: Omit<UploadableFile, 'getStream'> = {\n name: usedName,\n alternativeText: fileInfo.alternativeText,\n caption: fileInfo.caption,\n folder: fileInfo.folder,\n folderPath: await fileService.getFolderPath(fileInfo.folder),\n hash: imageManipulationService.generateFileName(basename),\n ext,\n mime: type,\n size: bytesToKbytes(size),\n sizeInBytes: size,\n };\n\n const { refId, ref, field } = metas;\n\n if (refId && ref && field) {\n entity.related = [\n {\n id: refId,\n __type: ref,\n __pivot: { field },\n },\n ];\n }\n\n if (metas.path) {\n entity.path = metas.path;\n }\n\n if (metas.tmpWorkingDirectory) {\n entity.tmpWorkingDirectory = metas.tmpWorkingDirectory;\n }\n\n return entity;\n }\n\n async function enhanceAndValidateFile(\n file: InputFile,\n fileInfo: FileInfo,\n metas?: Metas\n ): Promise<UploadableFile> {\n const currentFile = (await formatFileInfo(\n {\n filename: file.originalFilename ?? 'unamed',\n type: file.mimetype ?? 'application/octet-stream',\n size: file.size,\n },\n fileInfo,\n {\n ...metas,\n tmpWorkingDirectory: file.tmpWorkingDirectory,\n }\n )) as UploadableFile;\n\n currentFile.filepath = file.filepath;\n currentFile.getStream = () => fs.createReadStream(file.filepath);\n\n const { optimize, isImage, isFaultyImage, isOptimizableImage } = strapi\n .plugin('upload')\n .service('image-manipulation');\n\n if (await isImage(currentFile)) {\n if (await isFaultyImage(currentFile)) {\n throw new ApplicationError('File is not a valid image');\n }\n if (await isOptimizableImage(currentFile)) {\n return optimize(currentFile);\n }\n }\n\n return currentFile;\n }\n\n async function upload(\n {\n data,\n files,\n }: {\n data: Record<string, unknown>;\n files: InputFile[];\n },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(files);\n\n let uploadedFiles: any[] = [];\n\n try {\n const { fileInfo, ...metas } = data;\n\n const fileArray = Array.isArray(files) ? files : [files];\n const fileInfoArray = Array.isArray(fileInfo) ? fileInfo : [fileInfo];\n\n const doUpload = async (file: InputFile, fileInfo: FileInfo) => {\n const fileData = await enhanceAndValidateFile(file, fileInfo, metas);\n return uploadFileAndPersist(fileData, { user });\n };\n\n uploadedFiles = await Promise.all(\n fileArray.map((file, idx) => doUpload(file, fileInfoArray[idx] || {}))\n );\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return uploadedFiles;\n }\n\n /**\n * When uploading an image, an additional thumbnail is generated.\n * Also, if there are responsive formats defined, another set of images will be generated too.\n *\n * @param {*} fileData\n */\n async function uploadImage(fileData: UploadableFile) {\n const { getDimensions, generateThumbnail, generateResponsiveFormats, isResizableImage } =\n getService('image-manipulation');\n\n // Store width and height of the original image\n const { width, height } = await getDimensions(fileData);\n\n // Make sure this is assigned before calling any upload\n // That way it can mutate the width and height\n _.assign(fileData, {\n width,\n height,\n });\n\n // For performance reasons, all uploads are wrapped in a single Promise.all\n const uploadThumbnail = async (thumbnailFile: UploadableFile) => {\n await getService('provider').upload(thumbnailFile);\n _.set(fileData, 'formats.thumbnail', thumbnailFile);\n };\n\n // Generate thumbnail and responsive formats\n const uploadResponsiveFormat = async (format: { key: string; file: UploadableFile }) => {\n const { key, file } = format;\n await getService('provider').upload(file);\n _.set(fileData, ['formats', key], file);\n };\n\n const uploadPromises: Promise<void>[] = [];\n\n // Upload image\n uploadPromises.push(getService('provider').upload(fileData));\n\n // Generate & Upload thumbnail and responsive formats\n if (await isResizableImage(fileData)) {\n const thumbnailFile = await generateThumbnail(fileData);\n if (thumbnailFile) {\n uploadPromises.push(uploadThumbnail(thumbnailFile));\n }\n\n const formats = await generateResponsiveFormats(fileData);\n if (Array.isArray(formats) && formats.length > 0) {\n for (const format of formats) {\n // eslint-disable-next-line no-continue\n if (!format) continue;\n uploadPromises.push(uploadResponsiveFormat(format));\n }\n }\n }\n // Wait for all uploads to finish\n await Promise.all(uploadPromises);\n }\n\n /**\n * Upload a file. If it is an image it will generate a thumbnail\n * and responsive formats (if enabled).\n */\n async function uploadFileAndPersist(fileData: UploadableFile, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n const { isImage } = getService('image-manipulation');\n\n await getService('provider').checkFileSize(fileData);\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n\n // Persist file(s)\n return add(fileData, { user });\n }\n\n async function updateFileInfo(\n id: ID,\n { name, alternativeText, caption, folder }: FileInfo,\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const dbFile = await findOne(id);\n\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n const fileService = getService('file');\n\n const newName = _.isNil(name) ? dbFile.name : name;\n const newInfos = {\n name: newName,\n alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,\n caption: _.isNil(caption) ? dbFile.caption : caption,\n folder: _.isUndefined(folder) ? dbFile.folder : folder,\n folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder),\n };\n\n return update(id, newInfos, { user });\n }\n\n async function replace(\n id: ID,\n { data, file }: { data: { fileInfo: FileInfo }; file: InputFile },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n\n const { isImage } = getService('image-manipulation');\n\n const dbFile = await findOne(id);\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(file);\n\n let fileData: UploadableFile;\n\n try {\n const { fileInfo } = data;\n fileData = await enhanceAndValidateFile(file, fileInfo);\n\n // keep a constant hash and extension so the file url doesn't change when the file is replaced\n _.assign(fileData, {\n hash: dbFile.hash,\n ext: dbFile.ext,\n });\n\n // execute delete function of the provider\n if (dbFile.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(dbFile);\n\n if (dbFile.formats) {\n await Promise.all(\n Object.keys(dbFile.formats).map((key) => {\n return strapi.plugin('upload').provider.delete(dbFile.formats[key]);\n })\n );\n }\n }\n\n // clear old formats\n _.set(fileData, 'formats', {});\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return update(id, fileData, { user });\n }\n\n async function update(id: ID, values: Partial<File>, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n await sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).update({ where: { id }, data: fileValues });\n\n await emitEvent(MEDIA_UPDATE, res);\n\n return res;\n }\n\n async function add(values: any, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n [CREATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n await sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).create({ data: fileValues });\n\n await emitEvent(MEDIA_CREATE, res);\n\n return res;\n }\n\n async function findOne(id: ID, populate = {}) {\n const query = strapi.get('query-params').transform(FILE_MODEL_UID, {\n populate,\n });\n\n const file = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id },\n ...query,\n });\n\n if (!file) return file;\n\n // Sign file URLs if using private provider\n return fileService.signFileUrls(file);\n }\n\n async function findMany(query: any = {}): Promise<File[]> {\n const files = await strapi.db\n .query(FILE_MODEL_UID)\n .findMany(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n\n // Sign file URLs if using private provider\n return async.map(files, (file: File) => fileService.signFileUrls(file));\n }\n\n async function findPage(query: any = {}) {\n const result = await strapi.db\n .query(FILE_MODEL_UID)\n .findPage(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n\n // Sign file URLs if using private provider\n const signedResults = await async.map(result.results, (file: File) =>\n fileService.signFileUrls(file)\n );\n\n return {\n ...result,\n results: signedResults,\n };\n }\n\n async function remove(file: File) {\n const config = strapi.config.get<Config>('plugin::upload');\n\n // execute delete function of the provider\n if (file.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(file);\n\n if (file.formats) {\n const keys = Object.keys(file.formats);\n\n await Promise.all(\n keys.map((key) => {\n return strapi.plugin('upload').provider.delete(file.formats![key]);\n })\n );\n }\n }\n\n const media = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id: file.id },\n });\n\n await emitEvent(MEDIA_DELETE, media);\n\n return strapi.db.query(FILE_MODEL_UID).delete({ where: { id: file.id } });\n }\n\n async function getSettings() {\n const res = await strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).get({});\n\n return res as Settings | null;\n }\n\n async function setSettings(value: Settings) {\n if (value.responsiveDimensions === true) {\n await getService('metrics').trackUsage('didEnableResponsiveDimensions');\n } else {\n await getService('metrics').trackUsage('didDisableResponsiveDimensions');\n }\n\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).set({ value });\n }\n\n async function getConfiguration() {\n const res = await strapi.store!({\n type: 'plugin',\n name: 'upload',\n key: 'view_configuration',\n }).get({});\n\n return res as ViewConfiguration | null;\n }\n\n function setConfiguration(value: ViewConfiguration) {\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'view_configuration' }).set({\n value,\n });\n }\n\n return {\n formatFileInfo,\n upload,\n updateFileInfo,\n replace,\n findOne,\n findMany,\n findPage,\n remove,\n getSettings,\n setSettings,\n getConfiguration,\n setConfiguration,\n\n /**\n * exposed for testing only\n * @internal\n */\n _uploadImage: uploadImage,\n };\n};\n"],"names":["UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","contentTypesUtils","constants","MEDIA_CREATE","MEDIA_UPDATE","MEDIA_DELETE","ALLOWED_WEBHOOK_EVENTS","ApplicationError","NotFoundError","errors","bytesToKbytes","fileUtils","strapi","fileService","getService","sendMediaMetrics","data","_","has","isEmpty","caption","trackUsage","alternativeText","createAndAssignTmpWorkingDirectoryToFiles","files","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","Array","isArray","forEach","file","filenameReservedRegex","windowsReservedNameRegex","isValidFilename","string","length","test","emitEvent","event","modelDef","getModel","FILE_MODEL_UID","sanitizedData","sanitize","sanitizers","defaultSanitizeOutput","schema","uid","eventHub","emit","media","formatFileInfo","filename","type","size","fileInfo","metas","imageManipulationService","ext","extname","extension","usedName","name","normalize","basename","entity","folder","folderPath","getFolderPath","hash","generateFileName","mime","sizeInBytes","refId","ref","field","related","id","__type","__pivot","enhanceAndValidateFile","currentFile","originalFilename","mimetype","filepath","getStream","fs","createReadStream","optimize","isImage","isFaultyImage","isOptimizableImage","plugin","service","upload","opts","user","uploadedFiles","fileArray","fileInfoArray","doUpload","fileData","uploadFileAndPersist","Promise","all","map","idx","remove","uploadImage","getDimensions","generateThumbnail","generateResponsiveFormats","isResizableImage","width","height","assign","uploadThumbnail","thumbnailFile","set","uploadResponsiveFormat","format","key","uploadPromises","push","formats","config","get","checkFileSize","provider","add","updateFileInfo","dbFile","findOne","newName","isNil","newInfos","isUndefined","update","replace","delete","Object","keys","values","fileValues","res","db","query","where","create","populate","transform","signFileUrls","findMany","async","findPage","result","signedResults","results","getSettings","store","setSettings","value","responsiveDimensions","getConfiguration","setConfiguration","_uploadImage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upload.js","sources":["../../../server/src/services/upload.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport _ from 'lodash';\nimport { extension } from 'mime-types';\nimport {\n async,\n sanitize,\n contentTypes as contentTypesUtils,\n errors,\n file as fileUtils,\n} from '@strapi/utils';\n\nimport type { Core, UID } from '@strapi/types';\n\nimport { FILE_MODEL_UID, ALLOWED_WEBHOOK_EVENTS } from '../constants';\nimport { getService } from '../utils';\n\nimport type { Config, File, InputFile, UploadableFile, FileInfo } from '../types';\nimport type { ViewConfiguration } from '../controllers/validation/admin/configureView';\nimport type { Settings } from '../controllers/validation/admin/settings';\n\ntype User = {\n id: string | number;\n};\n\ntype ID = string | number;\n\ntype CommonOptions = {\n user?: User;\n};\n\ntype Metas = {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n};\n\nconst { UPDATED_BY_ATTRIBUTE, CREATED_BY_ATTRIBUTE } = contentTypesUtils.constants;\nconst { MEDIA_CREATE, MEDIA_UPDATE, MEDIA_DELETE } = ALLOWED_WEBHOOK_EVENTS;\n\nconst { ApplicationError, NotFoundError } = errors;\nconst { bytesToKbytes } = fileUtils;\n\nexport default ({ strapi }: { strapi: Core.Strapi }) => {\n const fileService = getService('file');\n\n const sendMediaMetrics = async (data: Pick<File, 'caption' | 'alternativeText'>) => {\n if (_.has(data, 'caption') && !_.isEmpty(data.caption)) {\n await getService('metrics').trackUsage('didSaveMediaWithCaption');\n }\n\n if (_.has(data, 'alternativeText') && !_.isEmpty(data.alternativeText)) {\n await getService('metrics').trackUsage('didSaveMediaWithAlternativeText');\n }\n };\n\n const createAndAssignTmpWorkingDirectoryToFiles = async (\n files: InputFile | InputFile[]\n ): Promise<string> => {\n const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), 'strapi-upload-'));\n\n if (Array.isArray(files)) {\n files.forEach((file) => {\n file.tmpWorkingDirectory = tmpWorkingDirectory;\n });\n } else {\n files.tmpWorkingDirectory = tmpWorkingDirectory;\n }\n\n return tmpWorkingDirectory;\n };\n\n function filenameReservedRegex() {\n // eslint-disable-next-line no-control-regex\n return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g;\n }\n\n function windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i;\n }\n\n /**\n * Copied from https://github.com/sindresorhus/valid-filename package\n */\n function isValidFilename(string: string) {\n if (!string || string.length > 255) {\n return false;\n }\n if (filenameReservedRegex().test(string) || windowsReservedNameRegex().test(string)) {\n return false;\n }\n if (string === '.' || string === '..') {\n return false;\n }\n return true;\n }\n\n async function emitEvent(event: string, data: Record<string, any>) {\n const modelDef = strapi.getModel(FILE_MODEL_UID);\n const sanitizedData = await sanitize.sanitizers.defaultSanitizeOutput(\n {\n schema: modelDef,\n getModel(uid: string) {\n return strapi.getModel(uid as UID.Schema);\n },\n },\n data\n );\n\n strapi.eventHub.emit(event, { media: sanitizedData });\n }\n\n async function formatFileInfo(\n { filename, type, size }: { filename: string; type: string; size: number },\n fileInfo: Partial<FileInfo> = {},\n metas: {\n refId?: ID;\n ref?: string;\n field?: string;\n path?: string;\n tmpWorkingDirectory?: string;\n } = {}\n ): Promise<Omit<UploadableFile, 'getStream'>> {\n const fileService = getService('file');\n const imageManipulationService = getService('image-manipulation');\n\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n let ext = path.extname(filename);\n if (!ext) {\n ext = `.${extension(type)}`;\n }\n const usedName = (fileInfo.name || filename).normalize();\n const basename = path.basename(usedName, ext);\n\n // Prevent null characters in file name\n if (!isValidFilename(filename)) {\n throw new ApplicationError('File name contains invalid characters');\n }\n\n const entity: Omit<UploadableFile, 'getStream'> = {\n name: usedName,\n alternativeText: fileInfo.alternativeText,\n caption: fileInfo.caption,\n focalPoint: fileInfo.focalPoint,\n folder: fileInfo.folder,\n folderPath: await fileService.getFolderPath(fileInfo.folder),\n hash: imageManipulationService.generateFileName(basename),\n ext,\n mime: type,\n size: bytesToKbytes(size),\n sizeInBytes: size,\n };\n\n const { refId, ref, field } = metas;\n\n if (refId && ref && field) {\n entity.related = [\n {\n id: refId,\n __type: ref,\n __pivot: { field },\n },\n ];\n }\n\n if (metas.path) {\n entity.path = metas.path;\n }\n\n if (metas.tmpWorkingDirectory) {\n entity.tmpWorkingDirectory = metas.tmpWorkingDirectory;\n }\n\n return entity;\n }\n\n async function enhanceAndValidateFile(\n file: InputFile,\n fileInfo: FileInfo,\n metas?: Metas\n ): Promise<UploadableFile> {\n const currentFile = (await formatFileInfo(\n {\n filename: file.originalFilename ?? 'unamed',\n type: file.mimetype ?? 'application/octet-stream',\n size: file.size,\n },\n fileInfo,\n {\n ...metas,\n tmpWorkingDirectory: file.tmpWorkingDirectory,\n }\n )) as UploadableFile;\n\n currentFile.filepath = file.filepath;\n currentFile.getStream = () => fs.createReadStream(file.filepath);\n\n const { optimize, isImage, isFaultyImage, isOptimizableImage } = strapi\n .plugin('upload')\n .service('image-manipulation');\n\n if (await isImage(currentFile)) {\n if (await isFaultyImage(currentFile)) {\n throw new ApplicationError('File is not a valid image');\n }\n if (await isOptimizableImage(currentFile)) {\n return optimize(currentFile);\n }\n }\n\n return currentFile;\n }\n\n async function upload(\n {\n data,\n files,\n }: {\n data: Record<string, unknown>;\n files: InputFile[];\n },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(files);\n\n let uploadedFiles: any[] = [];\n\n try {\n const { fileInfo, ...metas } = data;\n\n const fileArray = Array.isArray(files) ? files : [files];\n const fileInfoArray = Array.isArray(fileInfo) ? fileInfo : [fileInfo];\n\n const doUpload = async (file: InputFile, fileInfo: FileInfo) => {\n const fileData = await enhanceAndValidateFile(file, fileInfo, metas);\n return uploadFileAndPersist(fileData, { user });\n };\n\n uploadedFiles = await Promise.all(\n fileArray.map((file, idx) => doUpload(file, fileInfoArray[idx] || {}))\n );\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return uploadedFiles;\n }\n\n /**\n * When uploading an image, an additional thumbnail is generated.\n * Also, if there are responsive formats defined, another set of images will be generated too.\n *\n * @param {*} fileData\n */\n async function uploadImage(fileData: UploadableFile) {\n const { getDimensions, generateThumbnail, generateResponsiveFormats, isResizableImage } =\n getService('image-manipulation');\n\n // Store width and height of the original image\n const { width, height } = await getDimensions(fileData);\n\n // Make sure this is assigned before calling any upload\n // That way it can mutate the width and height\n _.assign(fileData, {\n width,\n height,\n });\n\n // For performance reasons, all uploads are wrapped in a single Promise.all\n const uploadThumbnail = async (thumbnailFile: UploadableFile) => {\n await getService('provider').upload(thumbnailFile);\n _.set(fileData, 'formats.thumbnail', thumbnailFile);\n };\n\n // Generate thumbnail and responsive formats\n const uploadResponsiveFormat = async (format: { key: string; file: UploadableFile }) => {\n const { key, file } = format;\n await getService('provider').upload(file);\n _.set(fileData, ['formats', key], file);\n };\n\n const uploadPromises: Promise<void>[] = [];\n\n // Upload image\n uploadPromises.push(getService('provider').upload(fileData));\n\n // Generate & Upload thumbnail and responsive formats\n if (await isResizableImage(fileData)) {\n const thumbnailFile = await generateThumbnail(fileData);\n if (thumbnailFile) {\n uploadPromises.push(uploadThumbnail(thumbnailFile));\n }\n\n const formats = await generateResponsiveFormats(fileData);\n if (Array.isArray(formats) && formats.length > 0) {\n for (const format of formats) {\n // eslint-disable-next-line no-continue\n if (!format) continue;\n uploadPromises.push(uploadResponsiveFormat(format));\n }\n }\n }\n // Wait for all uploads to finish\n await Promise.all(uploadPromises);\n }\n\n /**\n * Upload a file. If it is an image it will generate a thumbnail\n * and responsive formats (if enabled).\n */\n async function uploadFileAndPersist(fileData: UploadableFile, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n const { isImage } = getService('image-manipulation');\n\n await getService('provider').checkFileSize(fileData);\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n\n // Persist file(s)\n return add(fileData, { user });\n }\n\n async function updateFileInfo(\n id: ID,\n { name, alternativeText, caption, focalPoint, folder }: FileInfo,\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const dbFile = await findOne(id);\n\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n const fileService = getService('file');\n\n const newName = _.isNil(name) ? dbFile.name : name;\n const newInfos = {\n name: newName,\n alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,\n caption: _.isNil(caption) ? dbFile.caption : caption,\n focalPoint: _.isNil(focalPoint) ? dbFile.focalPoint : focalPoint,\n folder: _.isUndefined(folder) ? dbFile.folder : folder,\n folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder),\n };\n\n return update(id, newInfos, { user });\n }\n\n async function replace(\n id: ID,\n { data, file }: { data: { fileInfo: FileInfo }; file: InputFile },\n opts?: CommonOptions\n ) {\n const { user } = opts ?? {};\n\n const config = strapi.config.get<Config>('plugin::upload');\n\n const { isImage } = getService('image-manipulation');\n\n const dbFile = await findOne(id);\n if (!dbFile) {\n throw new NotFoundError();\n }\n\n // create temporary folder to store files for stream manipulation\n const tmpWorkingDirectory = await createAndAssignTmpWorkingDirectoryToFiles(file);\n\n let fileData: UploadableFile;\n\n try {\n const { fileInfo } = data;\n fileData = await enhanceAndValidateFile(file, fileInfo);\n\n // keep a constant hash and extension so the file url doesn't change when the file is replaced\n _.assign(fileData, {\n hash: dbFile.hash,\n ext: dbFile.ext,\n });\n\n // execute delete function of the provider\n if (dbFile.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(dbFile);\n\n if (dbFile.formats) {\n await Promise.all(\n Object.keys(dbFile.formats).map((key) => {\n return strapi.plugin('upload').provider.delete(dbFile.formats[key]);\n })\n );\n }\n }\n\n // clear old formats\n _.set(fileData, 'formats', {});\n\n if (await isImage(fileData)) {\n await uploadImage(fileData);\n } else {\n await getService('provider').upload(fileData);\n }\n\n _.set(fileData, 'provider', config.provider);\n } finally {\n // delete temporary folder\n await fse.remove(tmpWorkingDirectory);\n }\n\n return update(id, fileData, { user });\n }\n\n async function update(id: ID, values: Partial<File>, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n await sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).update({ where: { id }, data: fileValues });\n\n await emitEvent(MEDIA_UPDATE, res);\n\n return res;\n }\n\n async function add(values: any, opts?: CommonOptions) {\n const { user } = opts ?? {};\n\n const fileValues = { ...values };\n if (user) {\n Object.assign(fileValues, {\n [UPDATED_BY_ATTRIBUTE]: user.id,\n [CREATED_BY_ATTRIBUTE]: user.id,\n });\n }\n\n await sendMediaMetrics(fileValues);\n\n const res = await strapi.db.query(FILE_MODEL_UID).create({ data: fileValues });\n\n await emitEvent(MEDIA_CREATE, res);\n\n return res;\n }\n\n async function findOne(id: ID, populate = {}) {\n const query = strapi.get('query-params').transform(FILE_MODEL_UID, {\n populate,\n });\n\n const file = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id },\n ...query,\n });\n\n if (!file) return file;\n\n // Sign file URLs if using private provider\n return fileService.signFileUrls(file);\n }\n\n async function findMany(query: any = {}): Promise<File[]> {\n const files = await strapi.db\n .query(FILE_MODEL_UID)\n .findMany(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n\n // Sign file URLs if using private provider\n return async.map(files, (file: File) => fileService.signFileUrls(file));\n }\n\n async function findPage(query: any = {}) {\n const result = await strapi.db\n .query(FILE_MODEL_UID)\n .findPage(strapi.get('query-params').transform(FILE_MODEL_UID, query));\n\n // Sign file URLs if using private provider\n const signedResults = await async.map(result.results, (file: File) =>\n fileService.signFileUrls(file)\n );\n\n return {\n ...result,\n results: signedResults,\n };\n }\n\n async function remove(file: File) {\n const config = strapi.config.get<Config>('plugin::upload');\n\n // execute delete function of the provider\n if (file.provider === config.provider) {\n await strapi.plugin('upload').provider.delete(file);\n\n if (file.formats) {\n const keys = Object.keys(file.formats);\n\n await Promise.all(\n keys.map((key) => {\n return strapi.plugin('upload').provider.delete(file.formats![key]);\n })\n );\n }\n }\n\n const media = await strapi.db.query(FILE_MODEL_UID).findOne({\n where: { id: file.id },\n });\n\n await emitEvent(MEDIA_DELETE, media);\n\n return strapi.db.query(FILE_MODEL_UID).delete({ where: { id: file.id } });\n }\n\n async function getSettings() {\n const res = await strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).get({});\n\n return res as Settings | null;\n }\n\n async function setSettings(value: Settings) {\n if (value.responsiveDimensions === true) {\n await getService('metrics').trackUsage('didEnableResponsiveDimensions');\n } else {\n await getService('metrics').trackUsage('didDisableResponsiveDimensions');\n }\n\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'settings' }).set({ value });\n }\n\n async function getConfiguration() {\n const res = await strapi.store!({\n type: 'plugin',\n name: 'upload',\n key: 'view_configuration',\n }).get({});\n\n return res as ViewConfiguration | null;\n }\n\n function setConfiguration(value: ViewConfiguration) {\n return strapi.store!({ type: 'plugin', name: 'upload', key: 'view_configuration' }).set({\n value,\n });\n }\n\n return {\n formatFileInfo,\n upload,\n updateFileInfo,\n replace,\n findOne,\n findMany,\n findPage,\n remove,\n getSettings,\n setSettings,\n getConfiguration,\n setConfiguration,\n\n /**\n * exposed for testing only\n * @internal\n */\n _uploadImage: uploadImage,\n };\n};\n"],"names":["UPDATED_BY_ATTRIBUTE","CREATED_BY_ATTRIBUTE","contentTypesUtils","constants","MEDIA_CREATE","MEDIA_UPDATE","MEDIA_DELETE","ALLOWED_WEBHOOK_EVENTS","ApplicationError","NotFoundError","errors","bytesToKbytes","fileUtils","strapi","fileService","getService","sendMediaMetrics","data","_","has","isEmpty","caption","trackUsage","alternativeText","createAndAssignTmpWorkingDirectoryToFiles","files","tmpWorkingDirectory","fse","mkdtemp","path","join","os","tmpdir","Array","isArray","forEach","file","filenameReservedRegex","windowsReservedNameRegex","isValidFilename","string","length","test","emitEvent","event","modelDef","getModel","FILE_MODEL_UID","sanitizedData","sanitize","sanitizers","defaultSanitizeOutput","schema","uid","eventHub","emit","media","formatFileInfo","filename","type","size","fileInfo","metas","imageManipulationService","ext","extname","extension","usedName","name","normalize","basename","entity","focalPoint","folder","folderPath","getFolderPath","hash","generateFileName","mime","sizeInBytes","refId","ref","field","related","id","__type","__pivot","enhanceAndValidateFile","currentFile","originalFilename","mimetype","filepath","getStream","fs","createReadStream","optimize","isImage","isFaultyImage","isOptimizableImage","plugin","service","upload","opts","user","uploadedFiles","fileArray","fileInfoArray","doUpload","fileData","uploadFileAndPersist","Promise","all","map","idx","remove","uploadImage","getDimensions","generateThumbnail","generateResponsiveFormats","isResizableImage","width","height","assign","uploadThumbnail","thumbnailFile","set","uploadResponsiveFormat","format","key","uploadPromises","push","formats","config","get","checkFileSize","provider","add","updateFileInfo","dbFile","findOne","newName","isNil","newInfos","isUndefined","update","replace","delete","Object","keys","values","fileValues","res","db","query","where","create","populate","transform","signFileUrls","findMany","async","findPage","result","signedResults","results","getSettings","store","setSettings","value","responsiveDimensions","getConfiguration","setConfiguration","_uploadImage"],"mappings":"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"}
|
|
@@ -86,6 +86,7 @@ var upload = (({ strapi })=>{
|
|
|
86
86
|
name: usedName,
|
|
87
87
|
alternativeText: fileInfo.alternativeText,
|
|
88
88
|
caption: fileInfo.caption,
|
|
89
|
+
focalPoint: fileInfo.focalPoint,
|
|
89
90
|
folder: fileInfo.folder,
|
|
90
91
|
folderPath: await fileService.getFolderPath(fileInfo.folder),
|
|
91
92
|
hash: imageManipulationService.generateFileName(basename),
|
|
@@ -231,7 +232,7 @@ var upload = (({ strapi })=>{
|
|
|
231
232
|
user
|
|
232
233
|
});
|
|
233
234
|
}
|
|
234
|
-
async function updateFileInfo(id, { name, alternativeText, caption, folder }, opts) {
|
|
235
|
+
async function updateFileInfo(id, { name, alternativeText, caption, focalPoint, folder }, opts) {
|
|
235
236
|
const { user } = opts ?? {};
|
|
236
237
|
const dbFile = await findOne(id);
|
|
237
238
|
if (!dbFile) {
|
|
@@ -243,6 +244,7 @@ var upload = (({ strapi })=>{
|
|
|
243
244
|
name: newName,
|
|
244
245
|
alternativeText: _.isNil(alternativeText) ? dbFile.alternativeText : alternativeText,
|
|
245
246
|
caption: _.isNil(caption) ? dbFile.caption : caption,
|
|
247
|
+
focalPoint: _.isNil(focalPoint) ? dbFile.focalPoint : focalPoint,
|
|
246
248
|
folder: _.isUndefined(folder) ? dbFile.folder : folder,
|
|
247
249
|
folderPath: _.isUndefined(folder) ? dbFile.path : await fileService.getFolderPath(folder)
|
|
248
250
|
};
|