@webiny/api-file-manager 0.0.0-unstable.99666aeb00 → 0.0.0-unstable.9bd236cf5e
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/FileManagerContextSetup.d.ts +2 -2
- package/FileManagerContextSetup.js +16 -14
- package/FileManagerContextSetup.js.map +1 -1
- package/README.md +1 -1
- package/cmsFileStorage/CmsFilesStorage.d.ts +3 -3
- package/cmsFileStorage/CmsFilesStorage.js +52 -61
- package/cmsFileStorage/CmsFilesStorage.js.map +1 -1
- package/cmsFileStorage/ListFilesWhereProcessor.d.ts +2 -2
- package/cmsFileStorage/ListFilesWhereProcessor.js +8 -10
- package/cmsFileStorage/ListFilesWhereProcessor.js.map +1 -1
- package/cmsFileStorage/ListTagsWhereProcessor.d.ts +2 -2
- package/cmsFileStorage/ListTagsWhereProcessor.js +8 -10
- package/cmsFileStorage/ListTagsWhereProcessor.js.map +1 -1
- package/cmsFileStorage/file.model.d.ts +5 -3
- package/cmsFileStorage/file.model.js +83 -43
- package/cmsFileStorage/file.model.js.map +1 -1
- package/contants.js +3 -2
- package/contants.js.map +1 -1
- package/createFileManager/files.crud.d.ts +3 -3
- package/createFileManager/files.crud.js +83 -55
- package/createFileManager/files.crud.js.map +1 -1
- package/createFileManager/index.d.ts +2 -14
- package/createFileManager/index.js +8 -5
- package/createFileManager/index.js.map +1 -1
- package/createFileManager/permissions/FilesPermissions.d.ts +1 -1
- package/createFileManager/permissions/FilesPermissions.js +3 -1
- package/createFileManager/permissions/FilesPermissions.js.map +1 -1
- package/createFileManager/permissions/SettingsPermissions.d.ts +4 -0
- package/createFileManager/permissions/SettingsPermissions.js +11 -0
- package/createFileManager/permissions/SettingsPermissions.js.map +1 -0
- package/createFileManager/settings.crud.d.ts +3 -3
- package/createFileManager/settings.crud.js +74 -48
- package/createFileManager/settings.crud.js.map +1 -1
- package/createFileManager/system.crud.d.ts +3 -3
- package/createFileManager/system.crud.js +6 -4
- package/createFileManager/system.crud.js.map +1 -1
- package/createFileManager/types.d.ts +16 -0
- package/createFileManager/types.js +7 -0
- package/createFileManager/types.js.map +1 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.d.ts +11 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.js +74 -0
- package/delivery/AssetDelivery/AliasAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/Asset.d.ts +32 -0
- package/delivery/AssetDelivery/Asset.js +69 -0
- package/delivery/AssetDelivery/Asset.js.map +1 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.d.ts +63 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.js +102 -0
- package/delivery/AssetDelivery/AssetDeliveryConfig.js.map +1 -0
- package/delivery/AssetDelivery/AssetRequest.d.ts +25 -0
- package/delivery/AssetDelivery/AssetRequest.js +29 -0
- package/delivery/AssetDelivery/AssetRequest.js.map +1 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.d.ts +6 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js +37 -0
- package/delivery/AssetDelivery/FilesAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js +15 -0
- package/delivery/AssetDelivery/NullAssetOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetReply.d.ts +4 -0
- package/delivery/AssetDelivery/NullAssetReply.js +20 -0
- package/delivery/AssetDelivery/NullAssetReply.js.map +1 -0
- package/delivery/AssetDelivery/NullAssetResolver.d.ts +5 -0
- package/delivery/AssetDelivery/NullAssetResolver.js +14 -0
- package/delivery/AssetDelivery/NullAssetResolver.js.map +1 -0
- package/delivery/AssetDelivery/NullRequestResolver.d.ts +4 -0
- package/delivery/AssetDelivery/NullRequestResolver.js +14 -0
- package/delivery/AssetDelivery/NullRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.d.ts +8 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.js +25 -0
- package/delivery/AssetDelivery/SetCacheControlHeaders.js.map +1 -0
- package/delivery/AssetDelivery/SetResponseHeaders.d.ts +18 -0
- package/delivery/AssetDelivery/SetResponseHeaders.js +25 -0
- package/delivery/AssetDelivery/SetResponseHeaders.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.d.ts +6 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetContentsReader.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.d.ts +25 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.js +38 -0
- package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.d.ts +5 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetResolver.js.map +1 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js +7 -0
- package/delivery/AssetDelivery/abstractions/AssetTransformationStrategy.js.map +1 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.d.ts +2 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js +15 -0
- package/delivery/AssetDelivery/createAssetDeliveryPluginLoader.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js +7 -0
- package/delivery/AssetDelivery/privateFiles/AssetAuthorizer.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js +26 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedAssetReply.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js +15 -0
- package/delivery/AssetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.d.ts +6 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PrivateCache.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +8 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +37 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +13 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js +63 -0
- package/delivery/AssetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.d.ts +6 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.js +28 -0
- package/delivery/AssetDelivery/privateFiles/PublicCache.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +27 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +27 -0
- package/delivery/AssetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.d.ts +7 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.js +18 -0
- package/delivery/AssetDelivery/privateFiles/internalIdentity.js.map +1 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.d.ts +4 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js +14 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetProcessor.js.map +1 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.d.ts +4 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js +14 -0
- package/delivery/AssetDelivery/transformation/PassthroughAssetTransformationStrategy.js.map +1 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.d.ts +6 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js +26 -0
- package/delivery/AssetDelivery/transformation/TransformationAssetProcessor.js.map +1 -0
- package/delivery/index.d.ts +17 -0
- package/delivery/index.js +194 -0
- package/delivery/index.js.map +1 -0
- package/delivery/setupAssetDelivery.d.ts +6 -0
- package/delivery/setupAssetDelivery.js +128 -0
- package/delivery/setupAssetDelivery.js.map +1 -0
- package/enterprise/applyThreatScanning.d.ts +2 -0
- package/enterprise/applyThreatScanning.js +20 -0
- package/enterprise/applyThreatScanning.js.map +1 -0
- package/graphql/baseSchema.d.ts +1 -1
- package/graphql/baseSchema.js +6 -2
- package/graphql/baseSchema.js.map +1 -1
- package/graphql/createFilesTypeDefs.d.ts +1 -1
- package/graphql/createFilesTypeDefs.js +31 -9
- package/graphql/createFilesTypeDefs.js.map +1 -1
- package/graphql/filesSchema.d.ts +2 -2
- package/graphql/filesSchema.js +14 -8
- package/graphql/filesSchema.js.map +1 -1
- package/graphql/getFileByUrl.d.ts +3 -0
- package/graphql/getFileByUrl.js +78 -0
- package/graphql/getFileByUrl.js.map +1 -0
- package/graphql/index.d.ts +3 -2
- package/graphql/index.js +27 -5
- package/graphql/index.js.map +1 -1
- package/graphql/utils.js +3 -1
- package/graphql/utils.js.map +1 -1
- package/handlers/{transform/managers → manage}/imageManager.d.ts +2 -3
- package/handlers/{transform/managers → manage}/imageManager.js +10 -9
- package/handlers/manage/imageManager.js.map +1 -0
- package/handlers/manage/index.d.ts +1 -1
- package/handlers/manage/index.js +9 -5
- package/handlers/manage/index.js.map +1 -1
- package/handlers/{transform → manage}/legacyUtils.d.ts +0 -5
- package/handlers/{transform → manage}/legacyUtils.js +7 -15
- package/handlers/manage/legacyUtils.js.map +1 -0
- package/handlers/{transform → manage}/utils.js +7 -9
- package/handlers/manage/utils.js.map +1 -0
- package/handlers/types.d.ts +1 -1
- package/handlers/types.js +3 -1
- package/handlers/types.js.map +1 -1
- package/handlers/utils/getEnvironment.js +3 -1
- package/handlers/utils/getEnvironment.js.map +1 -1
- package/handlers/utils/getObjectParams.js +3 -1
- package/handlers/utils/getObjectParams.js.map +1 -1
- package/handlers/utils/index.js +3 -1
- package/handlers/utils/index.js.map +1 -1
- package/index.d.ts +6 -3
- package/index.js +31 -7
- package/index.js.map +1 -1
- package/modelModifier/CmsModelModifier.d.ts +5 -3
- package/modelModifier/CmsModelModifier.js +15 -12
- package/modelModifier/CmsModelModifier.js.map +1 -1
- package/package.json +25 -35
- package/plugins/FilePhysicalStoragePlugin.d.ts +2 -1
- package/plugins/FilePhysicalStoragePlugin.js +3 -3
- package/plugins/FilePhysicalStoragePlugin.js.map +1 -1
- package/plugins/FileStorageTransformPlugin.d.ts +1 -1
- package/plugins/FileStorageTransformPlugin.js +3 -4
- package/plugins/FileStorageTransformPlugin.js.map +1 -1
- package/plugins/index.js +3 -1
- package/plugins/index.js.map +1 -1
- package/storage/FileStorage.d.ts +5 -3
- package/storage/FileStorage.js +20 -16
- package/storage/FileStorage.js.map +1 -1
- package/types/file.d.ts +12 -0
- package/types/file.js +3 -1
- package/types/file.js.map +1 -1
- package/types/file.lifecycle.d.ts +2 -2
- package/types/file.lifecycle.js +3 -1
- package/types/file.lifecycle.js.map +1 -1
- package/types.d.ts +37 -15
- package/types.js +3 -1
- package/types.js.map +1 -1
- package/cmsFileStorage/createFileManagerPlugins.d.ts +0 -5
- package/cmsFileStorage/createFileManagerPlugins.js +0 -34
- package/cmsFileStorage/createFileManagerPlugins.js.map +0 -1
- package/cmsFileStorage/createModelField.d.ts +0 -5
- package/cmsFileStorage/createModelField.js +0 -37
- package/cmsFileStorage/createModelField.js.map +0 -1
- package/cmsFileStorage/isInstallationPending.d.ts +0 -4
- package/cmsFileStorage/isInstallationPending.js +0 -21
- package/cmsFileStorage/isInstallationPending.js.map +0 -1
- package/createFileManager/filevalidation.disabled.d.ts +0 -0
- package/createFileManager/filevalidation.disabled.js +0 -55
- package/createFileManager/filevalidation.disabled.js.map +0 -1
- package/handlers/download/byAlias.d.ts +0 -6
- package/handlers/download/byAlias.js +0 -89
- package/handlers/download/byAlias.js.map +0 -1
- package/handlers/download/byExactKey.d.ts +0 -2
- package/handlers/download/byExactKey.js +0 -57
- package/handlers/download/byExactKey.js.map +0 -1
- package/handlers/download/extractFileInformation.d.ts +0 -9
- package/handlers/download/extractFileInformation.js +0 -20
- package/handlers/download/extractFileInformation.js.map +0 -1
- package/handlers/download/getS3Object.d.ts +0 -12
- package/handlers/download/getS3Object.js +0 -72
- package/handlers/download/getS3Object.js.map +0 -1
- package/handlers/download/index.d.ts +0 -2
- package/handlers/download/index.js +0 -27
- package/handlers/download/index.js.map +0 -1
- package/handlers/transform/index.d.ts +0 -2
- package/handlers/transform/index.js +0 -92
- package/handlers/transform/index.js.map +0 -1
- package/handlers/transform/legacyUtils.js.map +0 -1
- package/handlers/transform/loaders/imageLoader.d.ts +0 -30
- package/handlers/transform/loaders/imageLoader.js +0 -94
- package/handlers/transform/loaders/imageLoader.js.map +0 -1
- package/handlers/transform/loaders/index.d.ts +0 -8
- package/handlers/transform/loaders/index.js +0 -10
- package/handlers/transform/loaders/index.js.map +0 -1
- package/handlers/transform/loaders/sanitizeImageTransformations.d.ts +0 -11
- package/handlers/transform/loaders/sanitizeImageTransformations.js +0 -45
- package/handlers/transform/loaders/sanitizeImageTransformations.js.map +0 -1
- package/handlers/transform/managers/imageManager.js.map +0 -1
- package/handlers/transform/managers/index.d.ts +0 -5
- package/handlers/transform/managers/index.js +0 -10
- package/handlers/transform/managers/index.js.map +0 -1
- package/handlers/transform/optimizeImage.d.ts +0 -3
- package/handlers/transform/optimizeImage.js +0 -42
- package/handlers/transform/optimizeImage.js.map +0 -1
- package/handlers/transform/transformImage.d.ts +0 -13
- package/handlers/transform/transformImage.js +0 -28
- package/handlers/transform/transformImage.js.map +0 -1
- package/handlers/transform/utils.js.map +0 -1
- /package/handlers/{transform → manage}/utils.d.ts +0 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.createFilesTypeDefs = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
7
|
var _renderFields = require("@webiny/api-headless-cms/utils/renderFields");
|
|
10
8
|
var _renderInputFields = require("@webiny/api-headless-cms/utils/renderInputFields");
|
|
11
9
|
var _renderListFilterFields = require("@webiny/api-headless-cms/utils/renderListFilterFields");
|
|
@@ -21,7 +19,9 @@ const removeFieldRequiredValidation = field => {
|
|
|
21
19
|
};
|
|
22
20
|
const createUpdateFields = fields => {
|
|
23
21
|
return fields.reduce((collection, field) => {
|
|
24
|
-
collection.push(removeFieldRequiredValidation(
|
|
22
|
+
collection.push(removeFieldRequiredValidation({
|
|
23
|
+
...field
|
|
24
|
+
}));
|
|
25
25
|
return collection;
|
|
26
26
|
}, []);
|
|
27
27
|
};
|
|
@@ -67,26 +67,47 @@ const createFilesTypeDefs = params => {
|
|
|
67
67
|
fieldTypePlugins,
|
|
68
68
|
sorterPlugins: []
|
|
69
69
|
});
|
|
70
|
-
return
|
|
70
|
+
return /* GraphQL */`
|
|
71
71
|
${fieldTypes.map(f => f.typeDefs).join("\n")}
|
|
72
72
|
|
|
73
73
|
type FmFile {
|
|
74
74
|
id: ID!
|
|
75
|
-
savedOn: DateTime!
|
|
76
75
|
createdOn: DateTime!
|
|
76
|
+
modifiedOn: DateTime
|
|
77
|
+
savedOn: DateTime!
|
|
77
78
|
createdBy: FmCreatedBy!
|
|
79
|
+
modifiedBy: FmCreatedBy
|
|
80
|
+
savedBy: FmCreatedBy!
|
|
78
81
|
src: String
|
|
79
82
|
${fieldTypes.map(f => f.fields).join("\n")}
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
${inputCreateFields.map(f => f.typeDefs).join("\n")}
|
|
86
|
+
|
|
87
|
+
input FmCreatedByInput {
|
|
88
|
+
id: ID!
|
|
89
|
+
displayName: String!
|
|
90
|
+
type: String!
|
|
91
|
+
}
|
|
83
92
|
|
|
84
93
|
input FmFileCreateInput {
|
|
85
94
|
id: ID!
|
|
95
|
+
createdOn: DateTime
|
|
96
|
+
modifiedOn: DateTime
|
|
97
|
+
savedOn: DateTime
|
|
98
|
+
createdBy: FmCreatedByInput
|
|
99
|
+
modifiedBy: FmCreatedByInput
|
|
100
|
+
savedBy: FmCreatedByInput
|
|
86
101
|
${inputCreateFields.map(f => f.fields).join("\n")}
|
|
87
102
|
}
|
|
88
103
|
|
|
89
104
|
input FmFileUpdateInput {
|
|
105
|
+
createdOn: DateTime
|
|
106
|
+
modifiedOn: DateTime
|
|
107
|
+
savedOn: DateTime
|
|
108
|
+
createdBy: FmCreatedByInput
|
|
109
|
+
modifiedBy: FmCreatedByInput
|
|
110
|
+
savedBy: FmCreatedByInput
|
|
90
111
|
${inputUpdateFields.map(f => f.fields).join("\n")}
|
|
91
112
|
}
|
|
92
113
|
|
|
@@ -131,7 +152,7 @@ const createFilesTypeDefs = params => {
|
|
|
131
152
|
data: [FmFile!]
|
|
132
153
|
error: FmError
|
|
133
154
|
}
|
|
134
|
-
|
|
155
|
+
|
|
135
156
|
type FmFileModelResponse {
|
|
136
157
|
data: JSON
|
|
137
158
|
error: FmError
|
|
@@ -156,7 +177,8 @@ const createFilesTypeDefs = params => {
|
|
|
156
177
|
updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!
|
|
157
178
|
deleteFile(id: ID!): FmBooleanResponse!
|
|
158
179
|
}
|
|
159
|
-
|
|
160
|
-
);
|
|
180
|
+
`;
|
|
161
181
|
};
|
|
162
|
-
exports.createFilesTypeDefs = createFilesTypeDefs;
|
|
182
|
+
exports.createFilesTypeDefs = createFilesTypeDefs;
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=createFilesTypeDefs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["removeFieldRequiredValidation","field","validation","filter","name","listValidation","v","createUpdateFields","fields","reduce","collection","push","createFilesTypeDefs","params","model","models","plugins","fieldTypePlugins","fieldTypes","renderFields","type","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","excludeFields","excludeFromSorterts","sortEnumRender","renderSortEnum","includes","fieldId","sorterPlugins","map","f","typeDefs","join"],"sources":["createFilesTypeDefs.ts"],"sourcesContent":["import { CmsFieldTypePlugins, CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum\";\n\nexport interface CreateFilesTypeDefsParams {\n model: CmsModel;\n models: CmsModel[];\n plugins: CmsFieldTypePlugins;\n}\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nexport const createFilesTypeDefs = (params: CreateFilesTypeDefsParams): string => {\n const { model, models, plugins: fieldTypePlugins } = params;\n const { fields } = model;\n\n const fieldTypes = renderFields({\n models,\n model,\n fields,\n type: \"manage\",\n fieldTypePlugins\n });\n const inputCreateFields = renderInputFields({\n models,\n model,\n fields,\n fieldTypePlugins\n });\n const inputUpdateFields = renderInputFields({\n models,\n model,\n fields: createUpdateFields(fields),\n fieldTypePlugins\n });\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n const excludeFromSorterts = [\"tags\", \"aliases\"];\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields.filter(field => !excludeFromSorterts.includes(field.fieldId)),\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n return /* GraphQL */ `\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n
|
|
1
|
+
{"version":3,"names":["_renderFields","require","_renderInputFields","_renderListFilterFields","_renderSortEnum","removeFieldRequiredValidation","field","validation","filter","name","listValidation","v","createUpdateFields","fields","reduce","collection","push","createFilesTypeDefs","params","model","models","plugins","fieldTypePlugins","fieldTypes","renderFields","type","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","excludeFields","excludeFromSorterts","sortEnumRender","renderSortEnum","includes","fieldId","sorterPlugins","map","f","typeDefs","join","exports"],"sources":["createFilesTypeDefs.ts"],"sourcesContent":["import type { CmsFieldTypePlugins, CmsModel, CmsModelField } from \"@webiny/api-headless-cms/types\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum\";\n\nexport interface CreateFilesTypeDefsParams {\n model: CmsModel;\n models: CmsModel[];\n plugins: CmsFieldTypePlugins;\n}\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nexport const createFilesTypeDefs = (params: CreateFilesTypeDefsParams): string => {\n const { model, models, plugins: fieldTypePlugins } = params;\n const { fields } = model;\n\n const fieldTypes = renderFields({\n models,\n model,\n fields,\n type: \"manage\",\n fieldTypePlugins\n });\n const inputCreateFields = renderInputFields({\n models,\n model,\n fields,\n fieldTypePlugins\n });\n const inputUpdateFields = renderInputFields({\n models,\n model,\n fields: createUpdateFields(fields),\n fieldTypePlugins\n });\n const listFilterFieldsRender = renderListFilterFields({\n model,\n fields: model.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n const excludeFromSorterts = [\"tags\", \"aliases\"];\n\n const sortEnumRender = renderSortEnum({\n model,\n fields: model.fields.filter(field => !excludeFromSorterts.includes(field.fieldId)),\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n return /* GraphQL */ `\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n createdOn: DateTime!\n modifiedOn: DateTime\n savedOn: DateTime!\n createdBy: FmCreatedBy!\n modifiedBy: FmCreatedBy\n savedBy: FmCreatedBy!\n src: String\n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n \n input FmCreatedByInput {\n id: ID!\n displayName: String!\n type: String!\n }\n\n input FmFileCreateInput {\n id: ID!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n input FmFileUpdateInput {\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type FmFileResponse {\n data: FmFile\n error: FmError\n }\n\n input FmFileListWhereInput {\n ${listFilterFieldsRender}\n AND: [FmFileListWhereInput!]\n OR: [FmFileListWhereInput!]\n }\n\n type FmFileListResponse {\n data: [FmFile!]\n error: FmError\n meta: FmListMeta\n }\n\n enum FmFileListSorter {\n ${sortEnumRender}\n }\n\n input FmTagsListWhereInput {\n createdBy: String\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n type FmTag {\n tag: String!\n count: Number!\n }\n\n type FmTagsListResponse {\n data: [FmTag!]\n error: FmError\n }\n\n type FmCreateFilesResponse {\n data: [FmFile!]\n error: FmError\n }\n \n type FmFileModelResponse {\n data: JSON\n error: FmError\n }\n\n extend type FmQuery {\n getFileModel: FmFileModelResponse!\n getFile(id: ID!): FmFileResponse!\n listFiles(\n search: String\n where: FmFileListWhereInput\n limit: Int\n after: String\n sort: [FmFileListSorter!]\n ): FmFileListResponse!\n listTags(where: FmTagsListWhereInput): FmTagsListResponse!\n }\n\n extend type FmMutation {\n createFile(data: FmFileCreateInput!): FmFileResponse!\n createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!\n updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!\n deleteFile(id: ID!): FmBooleanResponse!\n }\n `;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/graphql/filesSchema.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
2
|
-
import { FileManagerContext } from "../types";
|
|
3
|
-
import { CreateFilesTypeDefsParams } from "./createFilesTypeDefs";
|
|
2
|
+
import type { FileManagerContext } from "../types";
|
|
3
|
+
import type { CreateFilesTypeDefsParams } from "./createFilesTypeDefs";
|
|
4
4
|
export declare const createFilesSchema: (params: CreateFilesTypeDefsParams) => GraphQLSchemaPlugin<FileManagerContext>;
|
package/graphql/filesSchema.js
CHANGED
|
@@ -21,7 +21,7 @@ const createFilesSchema = params => {
|
|
|
21
21
|
FmFile: {
|
|
22
22
|
async src(file, _, context) {
|
|
23
23
|
const settings = await context.fileManager.getSettings();
|
|
24
|
-
return (
|
|
24
|
+
return (settings?.srcPrefix || "") + file.key;
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
FmQuery: {
|
|
@@ -30,9 +30,7 @@ const createFilesSchema = params => {
|
|
|
30
30
|
if (!identity) {
|
|
31
31
|
return new _apiSecurity.NotAuthorizedResponse();
|
|
32
32
|
}
|
|
33
|
-
return (0, _utils.resolve)(() => context.
|
|
34
|
-
return context.cms.getModel("fmFile");
|
|
35
|
-
}));
|
|
33
|
+
return (0, _utils.resolve)(() => context.cms.getModel("fmFile"));
|
|
36
34
|
},
|
|
37
35
|
getFile(_, args, context) {
|
|
38
36
|
return (0, _utils.resolve)(() => context.fileManager.getFile(args.id));
|
|
@@ -56,13 +54,19 @@ const createFilesSchema = params => {
|
|
|
56
54
|
},
|
|
57
55
|
FmMutation: {
|
|
58
56
|
async createFile(_, args, context) {
|
|
59
|
-
return (0, _utils.resolve)(() =>
|
|
57
|
+
return (0, _utils.resolve)(() => {
|
|
58
|
+
return context.fileManager.createFile(args.data, args.meta);
|
|
59
|
+
});
|
|
60
60
|
},
|
|
61
61
|
async createFiles(_, args, context) {
|
|
62
|
-
return (0, _utils.resolve)(() =>
|
|
62
|
+
return (0, _utils.resolve)(() => {
|
|
63
|
+
return context.fileManager.createFilesInBatch(args.data, args.meta);
|
|
64
|
+
});
|
|
63
65
|
},
|
|
64
66
|
async updateFile(_, args, context) {
|
|
65
|
-
return (0, _utils.resolve)(() =>
|
|
67
|
+
return (0, _utils.resolve)(() => {
|
|
68
|
+
return context.fileManager.updateFile(args.id, args.data);
|
|
69
|
+
});
|
|
66
70
|
},
|
|
67
71
|
async deleteFile(_, args, context) {
|
|
68
72
|
return (0, _utils.resolve)(async () => {
|
|
@@ -80,4 +84,6 @@ const createFilesSchema = params => {
|
|
|
80
84
|
fileManagerGraphQL.name = "fm.graphql.files";
|
|
81
85
|
return fileManagerGraphQL;
|
|
82
86
|
};
|
|
83
|
-
exports.createFilesSchema = createFilesSchema;
|
|
87
|
+
exports.createFilesSchema = createFilesSchema;
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=filesSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createFilesSchema","params","fileManagerGraphQL","GraphQLSchemaPlugin","typeDefs","createFilesTypeDefs","resolvers","Query","fileManager","emptyResolver","Mutation","FmFile","src","file","_","context","settings","getSettings","srcPrefix","key","FmQuery","getFileModel","__","identity","security","getIdentity","NotAuthorizedResponse","resolve","
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","_utils","_createFilesTypeDefs","_apiSecurity","createFilesSchema","params","fileManagerGraphQL","GraphQLSchemaPlugin","typeDefs","createFilesTypeDefs","resolvers","Query","fileManager","emptyResolver","Mutation","FmFile","src","file","_","context","settings","getSettings","srcPrefix","key","FmQuery","getFileModel","__","identity","security","getIdentity","NotAuthorizedResponse","resolve","cms","getModel","getFile","args","id","listFiles","data","meta","ListResponse","e","ErrorResponse","listTags","tags","Response","error","FmMutation","createFile","createFiles","createFilesInBatch","updateFile","deleteFile","storage","delete","name","exports"],"sources":["filesSchema.ts"],"sourcesContent":["import {\n ErrorResponse,\n GraphQLSchemaPlugin,\n ListResponse,\n Response\n} from \"@webiny/handler-graphql\";\nimport type { FileManagerContext, FilesListOpts } from \"~/types\";\nimport { emptyResolver, resolve } from \"./utils\";\nimport type { CreateFilesTypeDefsParams } from \"~/graphql/createFilesTypeDefs\";\nimport { createFilesTypeDefs } from \"~/graphql/createFilesTypeDefs\";\nimport { NotAuthorizedResponse } from \"@webiny/api-security\";\n\nexport const createFilesSchema = (params: CreateFilesTypeDefsParams) => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<FileManagerContext>({\n typeDefs: createFilesTypeDefs(params),\n resolvers: {\n Query: {\n fileManager: emptyResolver\n },\n Mutation: {\n fileManager: emptyResolver\n },\n FmFile: {\n async src(file, _, context) {\n const settings = await context.fileManager.getSettings();\n return (settings?.srcPrefix || \"\") + file.key;\n }\n },\n FmQuery: {\n getFileModel(_, __, context) {\n const identity = context.security.getIdentity();\n if (!identity) {\n return new NotAuthorizedResponse();\n }\n\n return resolve(() => context.cms.getModel(\"fmFile\"));\n },\n getFile(_, args: any, context) {\n return resolve(() => context.fileManager.getFile(args.id));\n },\n async listFiles(_, args: FilesListOpts, context) {\n try {\n const [data, meta] = await context.fileManager.listFiles(args);\n\n return new ListResponse(data, meta);\n } catch (e) {\n return new ErrorResponse(e);\n }\n },\n async listTags(_, args: any, context) {\n try {\n const tags = await context.fileManager.listTags(args || {});\n\n return new Response(tags);\n } catch (error) {\n return new ErrorResponse(error);\n }\n }\n },\n FmMutation: {\n async createFile(_, args: any, context) {\n return resolve(() => {\n return context.fileManager.createFile(args.data, args.meta);\n });\n },\n async createFiles(_, args: any, context) {\n return resolve(() => {\n return context.fileManager.createFilesInBatch(args.data, args.meta);\n });\n },\n async updateFile(_, args: any, context) {\n return resolve(() => {\n return context.fileManager.updateFile(args.id, args.data);\n });\n },\n async deleteFile(_, args: any, context) {\n return resolve(async () => {\n // TODO: Ideally, this should work via a lifecycle hook; first we delete a record from DB, then from cloud storage.\n const file = await context.fileManager.getFile(args.id);\n return await context.fileManager.storage.delete({\n id: file.id,\n key: file.key\n });\n });\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.files\";\n\n return fileManagerGraphQL;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getFileByUrl = void 0;
|
|
7
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
8
|
+
var _apiSecurity = require("@webiny/api-security");
|
|
9
|
+
const getFileByUrl = () => {
|
|
10
|
+
const fileManagerGraphQL = new _handlerGraphql.GraphQLSchemaPlugin({
|
|
11
|
+
typeDefs: /* GraphQL */`
|
|
12
|
+
extend type FmQuery {
|
|
13
|
+
getFileByUrl(url: String!): FmFileResponse
|
|
14
|
+
}
|
|
15
|
+
`,
|
|
16
|
+
resolvers: {
|
|
17
|
+
FmQuery: {
|
|
18
|
+
async getFileByUrl(_, args, context) {
|
|
19
|
+
const {
|
|
20
|
+
url
|
|
21
|
+
} = args;
|
|
22
|
+
const useCase = new SecureGetFileByUrl(context.security, new GetFileByUrlUseCase(context.fileManager));
|
|
23
|
+
try {
|
|
24
|
+
const file = await useCase.execute(url);
|
|
25
|
+
if (file) {
|
|
26
|
+
return new _handlerGraphql.Response(file);
|
|
27
|
+
}
|
|
28
|
+
return new _handlerGraphql.NotFoundResponse("File not found!");
|
|
29
|
+
} catch (error) {
|
|
30
|
+
return new _handlerGraphql.ErrorResponse(error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
fileManagerGraphQL.name = "fm.graphql.getFileByUrl";
|
|
37
|
+
return fileManagerGraphQL;
|
|
38
|
+
};
|
|
39
|
+
exports.getFileByUrl = getFileByUrl;
|
|
40
|
+
class GetFileByUrlUseCase {
|
|
41
|
+
constructor(fileManager) {
|
|
42
|
+
this.fileManager = fileManager;
|
|
43
|
+
}
|
|
44
|
+
async execute(url) {
|
|
45
|
+
const {
|
|
46
|
+
pathname
|
|
47
|
+
} = new URL(url);
|
|
48
|
+
const isAlias = !pathname.startsWith("/files/") && !pathname.startsWith("/private/");
|
|
49
|
+
const query = isAlias ? pathname : pathname.replace("/files/", "").replace("/private/", "");
|
|
50
|
+
const [files] = await this.fileManager.listFiles({
|
|
51
|
+
where: {
|
|
52
|
+
OR: [{
|
|
53
|
+
key: query
|
|
54
|
+
}, {
|
|
55
|
+
aliases_contains: query
|
|
56
|
+
}]
|
|
57
|
+
},
|
|
58
|
+
limit: 1
|
|
59
|
+
});
|
|
60
|
+
return files.length ? files[0] : undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
class SecureGetFileByUrl {
|
|
64
|
+
constructor(security, useCase) {
|
|
65
|
+
this.security = security;
|
|
66
|
+
this.useCase = useCase;
|
|
67
|
+
}
|
|
68
|
+
execute(url) {
|
|
69
|
+
if (!this.security.getIdentity()) {
|
|
70
|
+
throw new _apiSecurity.NotAuthorizedError({
|
|
71
|
+
message: "You're not authorized to edit this file!"
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return this.useCase.execute(url);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=getFileByUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","_apiSecurity","getFileByUrl","fileManagerGraphQL","GraphQLSchemaPlugin","typeDefs","resolvers","FmQuery","_","args","context","url","useCase","SecureGetFileByUrl","security","GetFileByUrlUseCase","fileManager","file","execute","Response","NotFoundResponse","error","ErrorResponse","name","exports","constructor","pathname","URL","isAlias","startsWith","query","replace","files","listFiles","where","OR","key","aliases_contains","limit","length","undefined","getIdentity","NotAuthorizedError","message"],"sources":["getFileByUrl.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { Response, NotFoundResponse } from \"@webiny/handler-graphql\";\nimport type { FileManagerContext, FileManagerContextObject, File } from \"~/types\";\nimport type { Security } from \"@webiny/api-security/types\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nexport const getFileByUrl = () => {\n const fileManagerGraphQL = new GraphQLSchemaPlugin<FileManagerContext>({\n typeDefs: /* GraphQL */ `\n extend type FmQuery {\n getFileByUrl(url: String!): FmFileResponse\n }\n `,\n resolvers: {\n FmQuery: {\n async getFileByUrl(_, args, context) {\n const { url } = args as { url: string };\n const useCase = new SecureGetFileByUrl(\n context.security,\n new GetFileByUrlUseCase(context.fileManager)\n );\n try {\n const file = await useCase.execute(url);\n if (file) {\n return new Response(file);\n }\n return new NotFoundResponse(\"File not found!\");\n } catch (error) {\n return new ErrorResponse(error);\n }\n }\n }\n }\n });\n fileManagerGraphQL.name = \"fm.graphql.getFileByUrl\";\n\n return fileManagerGraphQL;\n};\n\ninterface IGetFileByUrl {\n execute(url: string): Promise<File | undefined>;\n}\n\nclass GetFileByUrlUseCase implements IGetFileByUrl {\n private readonly fileManager: FileManagerContextObject;\n\n constructor(fileManager: FileManagerContextObject) {\n this.fileManager = fileManager;\n }\n\n async execute(url: string): Promise<File | undefined> {\n const { pathname } = new URL(url);\n const isAlias = !pathname.startsWith(\"/files/\") && !pathname.startsWith(\"/private/\");\n const query = isAlias ? pathname : pathname.replace(\"/files/\", \"\").replace(\"/private/\", \"\");\n\n const [files] = await this.fileManager.listFiles({\n where: {\n OR: [{ key: query }, { aliases_contains: query }]\n },\n limit: 1\n });\n\n return files.length ? files[0] : undefined;\n }\n}\n\nclass SecureGetFileByUrl implements IGetFileByUrl {\n private security: Security;\n private useCase: IGetFileByUrl;\n\n constructor(security: Security, useCase: IGetFileByUrl) {\n this.security = security;\n this.useCase = useCase;\n }\n\n execute(url: string): Promise<File | undefined> {\n if (!this.security.getIdentity()) {\n throw new NotAuthorizedError({ message: \"You're not authorized to edit this file!\" });\n }\n\n return this.useCase.execute(url);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAIA,IAAAC,YAAA,GAAAD,OAAA;AAEO,MAAME,YAAY,GAAGA,CAAA,KAAM;EAC9B,MAAMC,kBAAkB,GAAG,IAAIC,mCAAmB,CAAqB;IACnEC,QAAQ,EAAE,aAAc;AAChC;AACA;AACA;AACA,SAAS;IACDC,SAAS,EAAE;MACPC,OAAO,EAAE;QACL,MAAML,YAAYA,CAACM,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAE;UACjC,MAAM;YAAEC;UAAI,CAAC,GAAGF,IAAuB;UACvC,MAAMG,OAAO,GAAG,IAAIC,kBAAkB,CAClCH,OAAO,CAACI,QAAQ,EAChB,IAAIC,mBAAmB,CAACL,OAAO,CAACM,WAAW,CAC/C,CAAC;UACD,IAAI;YACA,MAAMC,IAAI,GAAG,MAAML,OAAO,CAACM,OAAO,CAACP,GAAG,CAAC;YACvC,IAAIM,IAAI,EAAE;cACN,OAAO,IAAIE,wBAAQ,CAACF,IAAI,CAAC;YAC7B;YACA,OAAO,IAAIG,gCAAgB,CAAC,iBAAiB,CAAC;UAClD,CAAC,CAAC,OAAOC,KAAK,EAAE;YACZ,OAAO,IAAIC,6BAAa,CAACD,KAAK,CAAC;UACnC;QACJ;MACJ;IACJ;EACJ,CAAC,CAAC;EACFlB,kBAAkB,CAACoB,IAAI,GAAG,yBAAyB;EAEnD,OAAOpB,kBAAkB;AAC7B,CAAC;AAACqB,OAAA,CAAAtB,YAAA,GAAAA,YAAA;AAMF,MAAMa,mBAAmB,CAA0B;EAG/CU,WAAWA,CAACT,WAAqC,EAAE;IAC/C,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEA,MAAME,OAAOA,CAACP,GAAW,EAA6B;IAClD,MAAM;MAAEe;IAAS,CAAC,GAAG,IAAIC,GAAG,CAAChB,GAAG,CAAC;IACjC,MAAMiB,OAAO,GAAG,CAACF,QAAQ,CAACG,UAAU,CAAC,SAAS,CAAC,IAAI,CAACH,QAAQ,CAACG,UAAU,CAAC,WAAW,CAAC;IACpF,MAAMC,KAAK,GAAGF,OAAO,GAAGF,QAAQ,GAAGA,QAAQ,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;IAE3F,MAAM,CAACC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAChB,WAAW,CAACiB,SAAS,CAAC;MAC7CC,KAAK,EAAE;QACHC,EAAE,EAAE,CAAC;UAAEC,GAAG,EAAEN;QAAM,CAAC,EAAE;UAAEO,gBAAgB,EAAEP;QAAM,CAAC;MACpD,CAAC;MACDQ,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAON,KAAK,CAACO,MAAM,GAAGP,KAAK,CAAC,CAAC,CAAC,GAAGQ,SAAS;EAC9C;AACJ;AAEA,MAAM3B,kBAAkB,CAA0B;EAI9CY,WAAWA,CAACX,QAAkB,EAAEF,OAAsB,EAAE;IACpD,IAAI,CAACE,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACF,OAAO,GAAGA,OAAO;EAC1B;EAEAM,OAAOA,CAACP,GAAW,EAA6B;IAC5C,IAAI,CAAC,IAAI,CAACG,QAAQ,CAAC2B,WAAW,CAAC,CAAC,EAAE;MAC9B,MAAM,IAAIC,+BAAkB,CAAC;QAAEC,OAAO,EAAE;MAA2C,CAAC,CAAC;IACzF;IAEA,OAAO,IAAI,CAAC/B,OAAO,CAACM,OAAO,CAACP,GAAG,CAAC;EACpC;AACJ","ignoreList":[]}
|
package/graphql/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { ContextPlugin } from "@webiny/api";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
3
|
+
import type { FileManagerContext } from "../types";
|
|
4
|
+
export declare const createGraphQLSchemaPlugin: () => (GraphQLSchemaPlugin<FileManagerContext> | ContextPlugin<FileManagerContext>)[];
|
package/graphql/index.js
CHANGED
|
@@ -4,30 +4,52 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createGraphQLSchemaPlugin = void 0;
|
|
7
|
-
var _baseSchema = require("./baseSchema");
|
|
8
7
|
var _api = require("@webiny/api");
|
|
8
|
+
var _apiHeadlessCms = require("@webiny/api-headless-cms");
|
|
9
9
|
var _createFieldTypePluginRecords = require("@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords");
|
|
10
|
+
var _getSchemaFromFieldPlugins = require("@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins");
|
|
11
|
+
var _baseSchema = require("./baseSchema");
|
|
12
|
+
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
10
13
|
var _filesSchema = require("./filesSchema");
|
|
11
|
-
var
|
|
14
|
+
var _getFileByUrl = require("./getFileByUrl");
|
|
12
15
|
const createGraphQLSchemaPlugin = () => {
|
|
13
16
|
return [(0, _baseSchema.createBaseSchema)(),
|
|
14
17
|
// Files schema is generated dynamically, based on a CMS model, so we need to
|
|
15
18
|
// register it from a ContextPlugin, to perform additional bootstrap.
|
|
16
19
|
new _api.ContextPlugin(async context => {
|
|
17
|
-
if ((0,
|
|
20
|
+
if (!(await (0, _apiHeadlessCms.isHeadlessCmsReady)(context))) {
|
|
18
21
|
return;
|
|
19
22
|
}
|
|
20
23
|
await context.security.withoutAuthorization(async () => {
|
|
21
24
|
const fileModel = await context.cms.getModel("fmFile");
|
|
22
25
|
const models = await context.cms.listModels();
|
|
23
26
|
const fieldPlugins = (0, _createFieldTypePluginRecords.createFieldTypePluginRecords)(context.plugins);
|
|
27
|
+
/**
|
|
28
|
+
* We need to register all plugins for all the CMS fields.
|
|
29
|
+
*/
|
|
30
|
+
const plugins = (0, _getSchemaFromFieldPlugins.createGraphQLSchemaPluginFromFieldPlugins)({
|
|
31
|
+
models,
|
|
32
|
+
type: "manage",
|
|
33
|
+
fieldTypePlugins: fieldPlugins,
|
|
34
|
+
createPlugin: ({
|
|
35
|
+
schema,
|
|
36
|
+
type,
|
|
37
|
+
fieldType
|
|
38
|
+
}) => {
|
|
39
|
+
const plugin = new _handlerGraphql.GraphQLSchemaPlugin(schema);
|
|
40
|
+
plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;
|
|
41
|
+
return plugin;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
24
44
|
const graphQlPlugin = (0, _filesSchema.createFilesSchema)({
|
|
25
45
|
model: fileModel,
|
|
26
46
|
models,
|
|
27
47
|
plugins: fieldPlugins
|
|
28
48
|
});
|
|
29
|
-
context.plugins.register(graphQlPlugin);
|
|
49
|
+
context.plugins.register([...plugins, graphQlPlugin, (0, _getFileByUrl.getFileByUrl)()]);
|
|
30
50
|
});
|
|
31
51
|
})];
|
|
32
52
|
};
|
|
33
|
-
exports.createGraphQLSchemaPlugin = createGraphQLSchemaPlugin;
|
|
53
|
+
exports.createGraphQLSchemaPlugin = createGraphQLSchemaPlugin;
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
package/graphql/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createGraphQLSchemaPlugin","createBaseSchema","ContextPlugin","context","
|
|
1
|
+
{"version":3,"names":["_api","require","_apiHeadlessCms","_createFieldTypePluginRecords","_getSchemaFromFieldPlugins","_baseSchema","_handlerGraphql","_filesSchema","_getFileByUrl","createGraphQLSchemaPlugin","createBaseSchema","ContextPlugin","context","isHeadlessCmsReady","security","withoutAuthorization","fileModel","cms","getModel","models","listModels","fieldPlugins","createFieldTypePluginRecords","plugins","createGraphQLSchemaPluginFromFieldPlugins","type","fieldTypePlugins","createPlugin","schema","fieldType","plugin","GraphQLSchemaPlugin","name","graphQlPlugin","createFilesSchema","model","register","getFileByUrl","exports"],"sources":["index.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types\";\nimport { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords\";\nimport { createGraphQLSchemaPluginFromFieldPlugins } from \"@webiny/api-headless-cms/utils/getSchemaFromFieldPlugins\";\nimport { createBaseSchema } from \"~/graphql/baseSchema\";\nimport { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { createFilesSchema } from \"~/graphql/filesSchema\";\nimport { getFileByUrl } from \"~/graphql/getFileByUrl\";\nimport type { FileManagerContext } from \"~/types\";\n\nexport const createGraphQLSchemaPlugin = () => {\n return [\n createBaseSchema(),\n // Files schema is generated dynamically, based on a CMS model, so we need to\n // register it from a ContextPlugin, to perform additional bootstrap.\n new ContextPlugin<FileManagerContext>(async context => {\n if (!(await isHeadlessCmsReady(context))) {\n return;\n }\n\n await context.security.withoutAuthorization(async () => {\n const fileModel = (await context.cms.getModel(\"fmFile\")) as CmsModel;\n const models = await context.cms.listModels();\n const fieldPlugins = createFieldTypePluginRecords(context.plugins);\n /**\n * We need to register all plugins for all the CMS fields.\n */\n const plugins = createGraphQLSchemaPluginFromFieldPlugins({\n models,\n type: \"manage\",\n fieldTypePlugins: fieldPlugins,\n createPlugin: ({ schema, type, fieldType }) => {\n const plugin = new GraphQLSchemaPlugin(schema);\n plugin.name = `fm.graphql.schema.${type}.field.${fieldType}`;\n return plugin;\n }\n });\n\n const graphQlPlugin = createFilesSchema({\n model: fileModel,\n models,\n plugins: fieldPlugins\n });\n\n context.plugins.register([...plugins, graphQlPlugin, getFileByUrl()]);\n });\n })\n ];\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,IAAAE,6BAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AAGO,MAAMQ,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,OAAO,CACH,IAAAC,4BAAgB,EAAC,CAAC;EAClB;EACA;EACA,IAAIC,kBAAa,CAAqB,MAAMC,OAAO,IAAI;IACnD,IAAI,EAAE,MAAM,IAAAC,kCAAkB,EAACD,OAAO,CAAC,CAAC,EAAE;MACtC;IACJ;IAEA,MAAMA,OAAO,CAACE,QAAQ,CAACC,oBAAoB,CAAC,YAAY;MACpD,MAAMC,SAAS,GAAI,MAAMJ,OAAO,CAACK,GAAG,CAACC,QAAQ,CAAC,QAAQ,CAAc;MACpE,MAAMC,MAAM,GAAG,MAAMP,OAAO,CAACK,GAAG,CAACG,UAAU,CAAC,CAAC;MAC7C,MAAMC,YAAY,GAAG,IAAAC,0DAA4B,EAACV,OAAO,CAACW,OAAO,CAAC;MAClE;AAChB;AACA;MACgB,MAAMA,OAAO,GAAG,IAAAC,oEAAyC,EAAC;QACtDL,MAAM;QACNM,IAAI,EAAE,QAAQ;QACdC,gBAAgB,EAAEL,YAAY;QAC9BM,YAAY,EAAEA,CAAC;UAAEC,MAAM;UAAEH,IAAI;UAAEI;QAAU,CAAC,KAAK;UAC3C,MAAMC,MAAM,GAAG,IAAIC,mCAAmB,CAACH,MAAM,CAAC;UAC9CE,MAAM,CAACE,IAAI,GAAG,qBAAqBP,IAAI,UAAUI,SAAS,EAAE;UAC5D,OAAOC,MAAM;QACjB;MACJ,CAAC,CAAC;MAEF,MAAMG,aAAa,GAAG,IAAAC,8BAAiB,EAAC;QACpCC,KAAK,EAAEnB,SAAS;QAChBG,MAAM;QACNI,OAAO,EAAEF;MACb,CAAC,CAAC;MAEFT,OAAO,CAACW,OAAO,CAACa,QAAQ,CAAC,CAAC,GAAGb,OAAO,EAAEU,aAAa,EAAE,IAAAI,0BAAY,EAAC,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC;EACN,CAAC,CAAC,CACL;AACL,CAAC;AAACC,OAAA,CAAA7B,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
package/graphql/utils.js
CHANGED
package/graphql/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["emptyResolver","resolve","fn","Response","e","ErrorResponse"],"sources":["utils.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport const emptyResolver = () => ({});\n\n/**\n * Use any because it really can be any.\n * TODO @ts-refactor maybe use generics at some point?\n */\ninterface ResolveCallable {\n (): Promise<any>;\n}\n\nexport const resolve = async (fn: ResolveCallable) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA;AAEO,
|
|
1
|
+
{"version":3,"names":["_handlerGraphql","require","emptyResolver","exports","resolve","fn","Response","e","ErrorResponse"],"sources":["utils.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/handler-graphql\";\n\nexport const emptyResolver = () => ({});\n\n/**\n * Use any because it really can be any.\n * TODO @ts-refactor maybe use generics at some point?\n */\ninterface ResolveCallable {\n (): Promise<any>;\n}\n\nexport const resolve = async (fn: ResolveCallable) => {\n try {\n return new Response(await fn());\n } catch (e) {\n return new ErrorResponse(e);\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;;AAEvC;AACA;AACA;AACA;AAHAC,OAAA,CAAAD,aAAA,GAAAA,aAAA;AAQO,MAAME,OAAO,GAAG,MAAOC,EAAmB,IAAK;EAClD,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOE,CAAC,EAAE;IACR,OAAO,IAAIC,6BAAa,CAACD,CAAC,CAAC;EAC/B;AACJ,CAAC;AAACJ,OAAA,CAAAC,OAAA,GAAAA,OAAA","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import S3 from "aws-sdk/
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
2
|
export interface ImageManagerCanProcessParams {
|
|
3
3
|
key: string;
|
|
4
4
|
extension: string;
|
|
@@ -8,8 +8,7 @@ export interface ImageManagerProcessParams {
|
|
|
8
8
|
key: string;
|
|
9
9
|
extension: string;
|
|
10
10
|
}
|
|
11
|
-
declare const
|
|
11
|
+
export declare const imageManager: {
|
|
12
12
|
canProcess: (params: ImageManagerCanProcessParams) => boolean;
|
|
13
13
|
process({ s3, key, extension }: ImageManagerProcessParams): Promise<void>;
|
|
14
14
|
};
|
|
15
|
-
export default _default;
|
|
@@ -4,15 +4,15 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.imageManager = void 0;
|
|
8
8
|
var _path = require("path");
|
|
9
|
-
var _utils = require("
|
|
10
|
-
var newUtils = _interopRequireWildcard(require("
|
|
11
|
-
var legacyUtils = _interopRequireWildcard(require("
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
var newUtils = _interopRequireWildcard(require("./utils"));
|
|
11
|
+
var legacyUtils = _interopRequireWildcard(require("./legacyUtils"));
|
|
12
12
|
const isLegacyKey = key => {
|
|
13
13
|
return !key.includes("/");
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
const imageManager = exports.imageManager = {
|
|
16
16
|
canProcess: params => {
|
|
17
17
|
const {
|
|
18
18
|
key,
|
|
@@ -38,7 +38,7 @@ var _default = {
|
|
|
38
38
|
// 1. Get optimized image key.
|
|
39
39
|
await s3.deleteObject((0, _utils.getObjectParams)(utils.getImageKey({
|
|
40
40
|
key
|
|
41
|
-
})))
|
|
41
|
+
})));
|
|
42
42
|
if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension)) {
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
@@ -59,7 +59,7 @@ var _default = {
|
|
|
59
59
|
const imagesList = await s3.listObjects({
|
|
60
60
|
Bucket: env.bucket,
|
|
61
61
|
Prefix: prefix
|
|
62
|
-
})
|
|
62
|
+
});
|
|
63
63
|
if (!imagesList.Contents) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
@@ -67,8 +67,9 @@ var _default = {
|
|
|
67
67
|
if (!imageObject.Key) {
|
|
68
68
|
continue;
|
|
69
69
|
}
|
|
70
|
-
await s3.deleteObject((0, _utils.getObjectParams)(imageObject.Key))
|
|
70
|
+
await s3.deleteObject((0, _utils.getObjectParams)(imageObject.Key));
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
};
|
|
74
|
-
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=imageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_path","require","_utils","newUtils","_interopRequireWildcard","legacyUtils","isLegacyKey","key","includes","imageManager","exports","canProcess","params","extension","utils","SUPPORTED_IMAGES","startsWith","OPTIMIZED_IMAGE_PREFIX","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","process","s3","deleteObject","getObjectParams","getImageKey","SUPPORTED_TRANSFORMABLE_IMAGES","prefix","getOptimizedImageKeyPrefix","dirname","env","getEnvironment","imagesList","listObjects","Bucket","bucket","Prefix","Contents","imageObject","Key"],"sources":["imageManager.ts"],"sourcesContent":["import { dirname } from \"path\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { getObjectParams, getEnvironment } from \"~/handlers/utils\";\nimport * as newUtils from \"./utils\";\nimport * as legacyUtils from \"./legacyUtils\";\n\nconst isLegacyKey = (key: string) => {\n return !key.includes(\"/\");\n};\n\nexport interface ImageManagerCanProcessParams {\n key: string;\n extension: string;\n}\nexport interface ImageManagerProcessParams {\n s3: S3;\n key: string;\n extension: string;\n}\nexport const imageManager = {\n canProcess: (params: ImageManagerCanProcessParams) => {\n const { key, extension } = params;\n const utils = key.includes(\"/\") ? newUtils : legacyUtils;\n\n if (!utils.SUPPORTED_IMAGES.includes(extension)) {\n return false;\n }\n\n // We only want to process original images, and delete all variations of it at once.\n // We DO NOT want to process the event for the deletion of an optimized/transformed image.\n // Unfortunately, there's no way to filter those events on the S3 bucket itself, so we have to do it this way.\n return !(\n key.startsWith(utils.OPTIMIZED_IMAGE_PREFIX) ||\n key.startsWith(utils.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX)\n );\n },\n async process({ s3, key, extension }: ImageManagerProcessParams) {\n const utils = key.includes(\"/\") ? newUtils : legacyUtils;\n\n // 1. Get optimized image key.\n await s3.deleteObject(getObjectParams(utils.getImageKey({ key })));\n\n if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension)) {\n return;\n }\n\n /**\n * Search for all transformed images and delete those too.\n *\n * For new keys, we take the entire path, up to, but not including, the file name:\n * - demo-pages/60228148f98841000981c724/welcome-to-webiny__idp.svg\n * - 60228148f98841000981c724/welcome-to-webiny__idp.svg\n *\n * Legacy keys don't have sub-folders:\n * - 8ldc5n3w2-custom-field-renderers.mp4\n */\n\n const prefix = isLegacyKey(key)\n ? utils.getOptimizedImageKeyPrefix(key)\n : dirname(key) + \"/\";\n\n const env = getEnvironment();\n const imagesList = await s3.listObjects({\n Bucket: env.bucket,\n Prefix: prefix\n });\n\n if (!imagesList.Contents) {\n return;\n }\n\n for (const imageObject of imagesList.Contents) {\n if (!imageObject.Key) {\n continue;\n }\n await s3.deleteObject(getObjectParams(imageObject.Key));\n }\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,WAAA,GAAAD,uBAAA,CAAAH,OAAA;AAEA,MAAMK,WAAW,GAAIC,GAAW,IAAK;EACjC,OAAO,CAACA,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC;AAC7B,CAAC;AAWM,MAAMC,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACxBE,UAAU,EAAGC,MAAoC,IAAK;IAClD,MAAM;MAAEL,GAAG;MAAEM;IAAU,CAAC,GAAGD,MAAM;IACjC,MAAME,KAAK,GAAGP,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAGL,QAAQ,GAAGE,WAAW;IAExD,IAAI,CAACS,KAAK,CAACC,gBAAgB,CAACP,QAAQ,CAACK,SAAS,CAAC,EAAE;MAC7C,OAAO,KAAK;IAChB;;IAEA;IACA;IACA;IACA,OAAO,EACHN,GAAG,CAACS,UAAU,CAACF,KAAK,CAACG,sBAAsB,CAAC,IAC5CV,GAAG,CAACS,UAAU,CAACF,KAAK,CAACI,kCAAkC,CAAC,CAC3D;EACL,CAAC;EACD,MAAMC,OAAOA,CAAC;IAAEC,EAAE;IAAEb,GAAG;IAAEM;EAAqC,CAAC,EAAE;IAC7D,MAAMC,KAAK,GAAGP,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAGL,QAAQ,GAAGE,WAAW;;IAExD;IACA,MAAMe,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAACR,KAAK,CAACS,WAAW,CAAC;MAAEhB;IAAI,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,CAACO,KAAK,CAACU,8BAA8B,CAAChB,QAAQ,CAACK,SAAS,CAAC,EAAE;MAC3D;IACJ;;IAEA;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEQ,MAAMY,MAAM,GAAGnB,WAAW,CAACC,GAAG,CAAC,GACzBO,KAAK,CAACY,0BAA0B,CAACnB,GAAG,CAAC,GACrC,IAAAoB,aAAO,EAACpB,GAAG,CAAC,GAAG,GAAG;IAExB,MAAMqB,GAAG,GAAG,IAAAC,qBAAc,EAAC,CAAC;IAC5B,MAAMC,UAAU,GAAG,MAAMV,EAAE,CAACW,WAAW,CAAC;MACpCC,MAAM,EAAEJ,GAAG,CAACK,MAAM;MAClBC,MAAM,EAAET;IACZ,CAAC,CAAC;IAEF,IAAI,CAACK,UAAU,CAACK,QAAQ,EAAE;MACtB;IACJ;IAEA,KAAK,MAAMC,WAAW,IAAIN,UAAU,CAACK,QAAQ,EAAE;MAC3C,IAAI,CAACC,WAAW,CAACC,GAAG,EAAE;QAClB;MACJ;MACA,MAAMjB,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAACc,WAAW,CAACC,GAAG,CAAC,CAAC;IAC3D;EACJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -2,4 +2,4 @@ import { S3EventHandler } from "@webiny/handler-aws";
|
|
|
2
2
|
/**
|
|
3
3
|
* This handler must be run through @webiny/handler-aws/s3
|
|
4
4
|
*/
|
|
5
|
-
export declare const createManageFilePlugins: () => S3EventHandler<
|
|
5
|
+
export declare const createManageFilePlugins: () => S3EventHandler<any>[];
|
package/handlers/manage/index.js
CHANGED
|
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.createManageFilePlugins = void 0;
|
|
8
8
|
var _path = _interopRequireDefault(require("path"));
|
|
9
|
-
var
|
|
9
|
+
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
10
10
|
var _utils = require("../utils");
|
|
11
|
-
var
|
|
11
|
+
var _imageManager = require("./imageManager");
|
|
12
12
|
var _handlerAws = require("@webiny/handler-aws");
|
|
13
|
+
const managers = [_imageManager.imageManager];
|
|
14
|
+
|
|
13
15
|
/**
|
|
14
16
|
* This handler must be run through @webiny/handler-aws/s3
|
|
15
17
|
*/
|
|
@@ -30,12 +32,12 @@ const createManageFilePlugins = () => {
|
|
|
30
32
|
const {
|
|
31
33
|
region
|
|
32
34
|
} = (0, _utils.getEnvironment)();
|
|
33
|
-
const s3 = new
|
|
35
|
+
const s3 = new _clientS.S3({
|
|
34
36
|
region
|
|
35
37
|
});
|
|
36
38
|
for (const key of keys) {
|
|
37
39
|
const extension = _path.default.extname(key);
|
|
38
|
-
for (const manager of
|
|
40
|
+
for (const manager of managers) {
|
|
39
41
|
const canProcess = manager.canProcess({
|
|
40
42
|
key,
|
|
41
43
|
extension
|
|
@@ -52,4 +54,6 @@ const createManageFilePlugins = () => {
|
|
|
52
54
|
}
|
|
53
55
|
})];
|
|
54
56
|
};
|
|
55
|
-
exports.createManageFilePlugins = createManageFilePlugins;
|
|
57
|
+
exports.createManageFilePlugins = createManageFilePlugins;
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createManageFilePlugins","S3EventHandler","event","keys","i","Records","length","record","s3","object","key","push","region","getEnvironment","S3","extension","path","extname","manager","
|
|
1
|
+
{"version":3,"names":["_path","_interopRequireDefault","require","_clientS","_utils","_imageManager","_handlerAws","managers","imageManager","createManageFilePlugins","S3EventHandler","event","keys","i","Records","length","record","s3","object","key","push","region","getEnvironment","S3","extension","path","extname","manager","canProcess","process","exports"],"sources":["index.ts"],"sourcesContent":["import path from \"path\";\nimport { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { getEnvironment } from \"../utils\";\nimport { imageManager } from \"./imageManager\";\nimport { S3EventHandler } from \"@webiny/handler-aws\";\n\nconst managers = [imageManager];\n\n/**\n * This handler must be run through @webiny/handler-aws/s3\n */\nexport const createManageFilePlugins = () => {\n return [\n new S3EventHandler(async ({ event }) => {\n const keys: string[] = [];\n for (let i = 0; i < event.Records.length; i++) {\n const record = event.Records[i];\n if (typeof record.s3.object.key === \"string\") {\n keys.push(record.s3.object.key);\n }\n }\n\n if (keys.length === 0) {\n return;\n }\n\n const { region } = getEnvironment();\n const s3 = new S3({ region });\n\n for (const key of keys) {\n const extension = path.extname(key);\n\n for (const manager of managers) {\n const canProcess = manager.canProcess({\n key,\n extension\n });\n\n if (!canProcess) {\n continue;\n }\n await manager.process({\n s3,\n key,\n extension\n });\n }\n }\n })\n ];\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,MAAMK,QAAQ,GAAG,CAACC,0BAAY,CAAC;;AAE/B;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGA,CAAA,KAAM;EACzC,OAAO,CACH,IAAIC,0BAAc,CAAC,OAAO;IAAEC;EAAM,CAAC,KAAK;IACpC,MAAMC,IAAc,GAAG,EAAE;IACzB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACG,OAAO,CAACC,MAAM,EAAEF,CAAC,EAAE,EAAE;MAC3C,MAAMG,MAAM,GAAGL,KAAK,CAACG,OAAO,CAACD,CAAC,CAAC;MAC/B,IAAI,OAAOG,MAAM,CAACC,EAAE,CAACC,MAAM,CAACC,GAAG,KAAK,QAAQ,EAAE;QAC1CP,IAAI,CAACQ,IAAI,CAACJ,MAAM,CAACC,EAAE,CAACC,MAAM,CAACC,GAAG,CAAC;MACnC;IACJ;IAEA,IAAIP,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE;MACnB;IACJ;IAEA,MAAM;MAAEM;IAAO,CAAC,GAAG,IAAAC,qBAAc,EAAC,CAAC;IACnC,MAAML,EAAE,GAAG,IAAIM,WAAE,CAAC;MAAEF;IAAO,CAAC,CAAC;IAE7B,KAAK,MAAMF,GAAG,IAAIP,IAAI,EAAE;MACpB,MAAMY,SAAS,GAAGC,aAAI,CAACC,OAAO,CAACP,GAAG,CAAC;MAEnC,KAAK,MAAMQ,OAAO,IAAIpB,QAAQ,EAAE;QAC5B,MAAMqB,UAAU,GAAGD,OAAO,CAACC,UAAU,CAAC;UAClCT,GAAG;UACHK;QACJ,CAAC,CAAC;QAEF,IAAI,CAACI,UAAU,EAAE;UACb;QACJ;QACA,MAAMD,OAAO,CAACE,OAAO,CAAC;UAClBZ,EAAE;UACFE,GAAG;UACHK;QACJ,CAAC,CAAC;MACN;IACJ;EACJ,CAAC,CAAC,CACL;AACL,CAAC;AAACM,OAAA,CAAArB,uBAAA,GAAAA,uBAAA","ignoreList":[]}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BACKWARDS-COMPATIBILITY!
|
|
3
|
-
*
|
|
4
|
-
* This file contains utilities for files that don't have `id/key` structure, meaning, all files created before 5.35.0 release.
|
|
5
|
-
*/
|
|
6
1
|
declare const SUPPORTED_IMAGES: string[];
|
|
7
2
|
declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
|
|
8
3
|
declare const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|