@webiny/api-file-manager 0.0.0-unstable.611c5af35e → 0.0.0-unstable.615a930a68
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/handlers/download/index.js +26 -7
- package/handlers/download/index.js.map +1 -1
- package/handlers/manage/index.js +16 -0
- package/handlers/manage/index.js.map +1 -1
- package/handlers/transform/index.js +16 -6
- package/handlers/transform/index.js.map +1 -1
- package/handlers/transform/loaders/imageLoader.js +17 -0
- package/handlers/transform/loaders/imageLoader.js.map +1 -1
- package/handlers/transform/loaders/index.js +3 -0
- package/handlers/transform/loaders/index.js.map +1 -1
- package/handlers/transform/loaders/sanitizeImageTransformations.js +13 -0
- package/handlers/transform/loaders/sanitizeImageTransformations.js.map +1 -1
- package/handlers/transform/managers/imageManager.js +14 -6
- package/handlers/transform/managers/imageManager.js.map +1 -1
- package/handlers/transform/managers/index.js +3 -0
- package/handlers/transform/managers/index.js.map +1 -1
- package/handlers/transform/optimizeImage.js +6 -0
- package/handlers/transform/optimizeImage.js.map +1 -1
- package/handlers/transform/transformImage.js +5 -0
- package/handlers/transform/transformImage.js.map +1 -1
- package/handlers/transform/utils.js +10 -0
- package/handlers/transform/utils.js.map +1 -1
- package/handlers/utils/getEnvironment.js +2 -0
- package/handlers/utils/getEnvironment.js.map +1 -1
- package/handlers/utils/getObjectParams.js +4 -0
- package/handlers/utils/getObjectParams.js.map +1 -1
- package/handlers/utils/index.js +3 -0
- package/handlers/utils/index.js.map +1 -1
- package/package.json +19 -19
- package/plugins/crud/files/validation.js +6 -0
- package/plugins/crud/files/validation.js.map +1 -1
- package/plugins/crud/files.crud.js +61 -2
- package/plugins/crud/files.crud.js.map +1 -1
- package/plugins/crud/settings.crud.js +18 -1
- package/plugins/crud/settings.crud.js.map +1 -1
- package/plugins/crud/system.crud.js +32 -2
- package/plugins/crud/system.crud.js.map +1 -1
- package/plugins/crud/utils/checkBasePermissions.js +8 -0
- package/plugins/crud/utils/checkBasePermissions.js.map +1 -1
- package/plugins/crud/utils/createFileModel.js +12 -0
- package/plugins/crud/utils/createFileModel.js.map +1 -1
- package/plugins/crud/utils/lifecycleEvents.js +12 -4
- package/plugins/crud/utils/lifecycleEvents.js.map +1 -1
- package/plugins/definitions/FilePhysicalStoragePlugin.js +11 -0
- package/plugins/definitions/FilePhysicalStoragePlugin.js.map +1 -1
- package/plugins/definitions/FilePlugin.js +18 -0
- package/plugins/definitions/FilePlugin.js.map +1 -1
- package/plugins/definitions/FileStorageTransformPlugin.js +12 -1
- package/plugins/definitions/FileStorageTransformPlugin.js.map +1 -1
- package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +5 -0
- package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +1 -1
- package/plugins/definitions/InstallationPlugin.js +11 -0
- package/plugins/definitions/InstallationPlugin.js.map +1 -1
- package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +5 -0
- package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +1 -1
- package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +5 -0
- package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +1 -1
- package/plugins/graphql.js +22 -2
- package/plugins/graphql.js.map +1 -1
- package/plugins/index.js +9 -0
- package/plugins/index.js.map +1 -1
- package/plugins/storage/FileStorage.js +32 -14
- package/plugins/storage/FileStorage.js.map +1 -1
- package/plugins/storage/index.js +4 -0
- package/plugins/storage/index.js.map +1 -1
- package/utils.js +2 -0
- package/utils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["canProcess","params","key","extension","SUPPORTED_IMAGES","includes","startsWith","OPTIMIZED_IMAGE_PREFIX","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","process","s3","deleteObject","getObjectParams","getImageKey","promise","SUPPORTED_TRANSFORMABLE_IMAGES","env","getEnvironment","imagesList","listObjects","Bucket","bucket","Prefix","getOptimizedTransformedImageKeyPrefix","Contents","imageObject","Key"],"sources":["imageManager.ts"],"sourcesContent":["import S3 from \"aws-sdk/clients/s3\";\nimport { getObjectParams, getEnvironment } from \"~/handlers/utils\";\nimport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_IMAGE_PREFIX,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedTransformedImageKeyPrefix\n} from \"../utils\";\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 default {\n canProcess: (params: ImageManagerCanProcessParams) => {\n const { key, extension } = params;\n if (SUPPORTED_IMAGES.includes(extension) === false) {\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(OPTIMIZED_IMAGE_PREFIX) ||\n key.startsWith(OPTIMIZED_TRANSFORMED_IMAGE_PREFIX)\n );\n },\n async process({ s3, key, extension }: ImageManagerProcessParams) {\n // 1. Get optimized image's key.\n\n await s3.deleteObject(getObjectParams(getImageKey({ key }))).promise();\n\n // 2. Search for all transformed images and delete those too.\n if (SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension) === false) {\n return;\n }\n const env = getEnvironment();\n const imagesList = await s3\n .listObjects({\n Bucket: env.bucket,\n Prefix: getOptimizedTransformedImageKeyPrefix(key)\n })\n .promise();\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)).promise();\n }\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["canProcess","params","key","extension","SUPPORTED_IMAGES","includes","startsWith","OPTIMIZED_IMAGE_PREFIX","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","process","s3","deleteObject","getObjectParams","getImageKey","promise","SUPPORTED_TRANSFORMABLE_IMAGES","env","getEnvironment","imagesList","listObjects","Bucket","bucket","Prefix","getOptimizedTransformedImageKeyPrefix","Contents","imageObject","Key"],"sources":["imageManager.ts"],"sourcesContent":["import S3 from \"aws-sdk/clients/s3\";\nimport { getObjectParams, getEnvironment } from \"~/handlers/utils\";\nimport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_IMAGE_PREFIX,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedTransformedImageKeyPrefix\n} from \"../utils\";\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 default {\n canProcess: (params: ImageManagerCanProcessParams) => {\n const { key, extension } = params;\n if (SUPPORTED_IMAGES.includes(extension) === false) {\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(OPTIMIZED_IMAGE_PREFIX) ||\n key.startsWith(OPTIMIZED_TRANSFORMED_IMAGE_PREFIX)\n );\n },\n async process({ s3, key, extension }: ImageManagerProcessParams) {\n // 1. Get optimized image's key.\n\n await s3.deleteObject(getObjectParams(getImageKey({ key }))).promise();\n\n // 2. Search for all transformed images and delete those too.\n if (SUPPORTED_TRANSFORMABLE_IMAGES.includes(extension) === false) {\n return;\n }\n const env = getEnvironment();\n const imagesList = await s3\n .listObjects({\n Bucket: env.bucket,\n Prefix: getOptimizedTransformedImageKeyPrefix(key)\n })\n .promise();\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)).promise();\n }\n }\n};\n"],"mappings":";;;;;;;AACA;;AACA;;eAkBe;EACXA,UAAU,EAAGC,MAAD,IAA0C;IAClD,MAAM;MAAEC,GAAF;MAAOC;IAAP,IAAqBF,MAA3B;;IACA,IAAIG,wBAAA,CAAiBC,QAAjB,CAA0BF,SAA1B,MAAyC,KAA7C,EAAoD;MAChD,OAAO,KAAP;IACH,CAJiD,CAMlD;IACA;IACA;;;IACA,OAAO,EACHD,GAAG,CAACI,UAAJ,CAAeC,8BAAf,KACAL,GAAG,CAACI,UAAJ,CAAeE,0CAAf,CAFG,CAAP;EAIH,CAdU;;EAeX,MAAMC,OAAN,CAAc;IAAEC,EAAF;IAAMR,GAAN;IAAWC;EAAX,CAAd,EAAiE;IAC7D;IAEA,MAAMO,EAAE,CAACC,YAAH,CAAgB,IAAAC,sBAAA,EAAgB,IAAAC,mBAAA,EAAY;MAAEX;IAAF,CAAZ,CAAhB,CAAhB,EAAuDY,OAAvD,EAAN,CAH6D,CAK7D;;IACA,IAAIC,sCAAA,CAA+BV,QAA/B,CAAwCF,SAAxC,MAAuD,KAA3D,EAAkE;MAC9D;IACH;;IACD,MAAMa,GAAG,GAAG,IAAAC,qBAAA,GAAZ;IACA,MAAMC,UAAU,GAAG,MAAMR,EAAE,CACtBS,WADoB,CACR;MACTC,MAAM,EAAEJ,GAAG,CAACK,MADH;MAETC,MAAM,EAAE,IAAAC,6CAAA,EAAsCrB,GAAtC;IAFC,CADQ,EAKpBY,OALoB,EAAzB;;IAOA,IAAI,CAACI,UAAU,CAACM,QAAhB,EAA0B;MACtB;IACH;;IAED,KAAK,MAAMC,WAAX,IAA0BP,UAAU,CAACM,QAArC,EAA+C;MAC3C,IAAI,CAACC,WAAW,CAACC,GAAjB,EAAsB;QAClB;MACH;;MACD,MAAMhB,EAAE,CAACC,YAAH,CAAgB,IAAAC,sBAAA,EAAgBa,WAAW,CAACC,GAA5B,CAAhB,EAAkDZ,OAAlD,EAAN;IACH;EACJ;;AA1CU,C"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _imageManager = _interopRequireDefault(require("./imageManager"));
|
|
11
|
+
|
|
9
12
|
var _default = [_imageManager.default];
|
|
10
13
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["imageManager"],"sources":["index.ts"],"sourcesContent":["import imageManager from \"./imageManager\";\n\nexport default [imageManager];\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["imageManager"],"sources":["index.ts"],"sourcesContent":["import imageManager from \"./imageManager\";\n\nexport default [imageManager];\n"],"mappings":";;;;;;;;;AAAA;;eAEe,CAACA,qBAAD,C"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _sharp = _interopRequireDefault(require("sharp"));
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* Sharp is included in the AWS Lambda layer
|
|
11
14
|
*/
|
|
@@ -24,6 +27,7 @@ var _default = async (buffer, type) => {
|
|
|
24
27
|
force: true
|
|
25
28
|
}).withMetadata().toBuffer();
|
|
26
29
|
}
|
|
30
|
+
|
|
27
31
|
case "image/jpeg":
|
|
28
32
|
case "image/jpg":
|
|
29
33
|
{
|
|
@@ -35,8 +39,10 @@ var _default = async (buffer, type) => {
|
|
|
35
39
|
quality: 90
|
|
36
40
|
}).toBuffer();
|
|
37
41
|
}
|
|
42
|
+
|
|
38
43
|
default:
|
|
39
44
|
return buffer;
|
|
40
45
|
}
|
|
41
46
|
};
|
|
47
|
+
|
|
42
48
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["buffer","type","sharp","resize","width","withoutEnlargement","fit","png","compressionLevel","adaptiveFiltering","force","withMetadata","toBuffer","toFormat","quality"],"sources":["optimizeImage.ts"],"sourcesContent":["/**\n * Sharp is included in the AWS Lambda layer\n */\n// @ts-ignore\nimport sharp from \"sharp\";\nimport { Body } from \"aws-sdk/clients/s3\";\n\nexport default async (buffer: Body, type: string): Promise<Body> => {\n switch (type) {\n case \"image/png\": {\n return await sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .png({ compressionLevel: 9, adaptiveFiltering: true, force: true })\n .withMetadata()\n .toBuffer();\n }\n case \"image/jpeg\":\n case \"image/jpg\": {\n return await sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .toFormat(\"jpeg\", { quality: 90 })\n .toBuffer();\n }\n default:\n return buffer;\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["buffer","type","sharp","resize","width","withoutEnlargement","fit","png","compressionLevel","adaptiveFiltering","force","withMetadata","toBuffer","toFormat","quality"],"sources":["optimizeImage.ts"],"sourcesContent":["/**\n * Sharp is included in the AWS Lambda layer\n */\n// @ts-ignore\nimport sharp from \"sharp\";\nimport { Body } from \"aws-sdk/clients/s3\";\n\nexport default async (buffer: Body, type: string): Promise<Body> => {\n switch (type) {\n case \"image/png\": {\n return await sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .png({ compressionLevel: 9, adaptiveFiltering: true, force: true })\n .withMetadata()\n .toBuffer();\n }\n case \"image/jpeg\":\n case \"image/jpg\": {\n return await sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .toFormat(\"jpeg\", { quality: 90 })\n .toBuffer();\n }\n default:\n return buffer;\n }\n};\n"],"mappings":";;;;;;;;;AAIA;;AAJA;AACA;AACA;AACA;eAIe,OAAOA,MAAP,EAAqBC,IAArB,KAAqD;EAChE,QAAQA,IAAR;IACI,KAAK,WAAL;MAAkB;QACd,OAAO,MAAM,IAAAC,cAAA,EAAMF,MAAN,EACRG,MADQ,CACD;UAAEC,KAAK,EAAE,IAAT;UAAeC,kBAAkB,EAAE,IAAnC;UAAyCC,GAAG,EAAE;QAA9C,CADC,EAERC,GAFQ,CAEJ;UAAEC,gBAAgB,EAAE,CAApB;UAAuBC,iBAAiB,EAAE,IAA1C;UAAgDC,KAAK,EAAE;QAAvD,CAFI,EAGRC,YAHQ,GAIRC,QAJQ,EAAb;MAKH;;IACD,KAAK,YAAL;IACA,KAAK,WAAL;MAAkB;QACd,OAAO,MAAM,IAAAV,cAAA,EAAMF,MAAN,EACRG,MADQ,CACD;UAAEC,KAAK,EAAE,IAAT;UAAeC,kBAAkB,EAAE,IAAnC;UAAyCC,GAAG,EAAE;QAA9C,CADC,EAERO,QAFQ,CAEC,MAFD,EAES;UAAEC,OAAO,EAAE;QAAX,CAFT,EAGRF,QAHQ,EAAb;MAIH;;IACD;MACI,OAAOZ,MAAP;EAhBR;AAkBH,C"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _sharp = _interopRequireDefault(require("sharp"));
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* Sharp is included in the AWS Lambda layer
|
|
11
14
|
*/
|
|
12
15
|
// @ts-ignore
|
|
16
|
+
|
|
13
17
|
/**
|
|
14
18
|
* Only processing "width" at the moment.
|
|
15
19
|
* Check "sanitizeImageTransformations.js" to allow additional image processing transformations.
|
|
@@ -22,4 +26,5 @@ var _default = async (buffer, transformations) => {
|
|
|
22
26
|
width
|
|
23
27
|
}).toBuffer();
|
|
24
28
|
};
|
|
29
|
+
|
|
25
30
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["buffer","transformations","width","sharp","resize","toBuffer"],"sources":["transformImage.ts"],"sourcesContent":["/**\n * Sharp is included in the AWS Lambda layer\n */\n// @ts-ignore\nimport sharp from \"sharp\";\nimport { Body } from \"aws-sdk/clients/s3\";\n\ninterface Transformation {\n width: string;\n}\n/**\n * Only processing \"width\" at the moment.\n * Check \"sanitizeImageTransformations.js\" to allow additional image processing transformations.\n */\nexport default async (buffer: Body, transformations: Transformation): Promise<Body> => {\n const { width } = transformations;\n return await sharp(buffer).resize({ width }).toBuffer();\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["buffer","transformations","width","sharp","resize","toBuffer"],"sources":["transformImage.ts"],"sourcesContent":["/**\n * Sharp is included in the AWS Lambda layer\n */\n// @ts-ignore\nimport sharp from \"sharp\";\nimport { Body } from \"aws-sdk/clients/s3\";\n\ninterface Transformation {\n width: string;\n}\n/**\n * Only processing \"width\" at the moment.\n * Check \"sanitizeImageTransformations.js\" to allow additional image processing transformations.\n */\nexport default async (buffer: Body, transformations: Transformation): Promise<Body> => {\n const { width } = transformations;\n return await sharp(buffer).resize({ width }).toBuffer();\n};\n"],"mappings":";;;;;;;;;AAIA;;AAJA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;eACe,OAAOA,MAAP,EAAqBC,eAArB,KAAwE;EACnF,MAAM;IAAEC;EAAF,IAAYD,eAAlB;EACA,OAAO,MAAM,IAAAE,cAAA,EAAMH,MAAN,EAAcI,MAAd,CAAqB;IAAEF;EAAF,CAArB,EAAgCG,QAAhC,EAAb;AACH,C"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.getOptimizedTransformedImageKeyPrefix = exports.getOptimizedImageKeyPrefix = exports.getImageKey = exports.SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_IMAGES = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectHash = _interopRequireDefault(require("object-hash"));
|
|
11
|
+
|
|
9
12
|
const SUPPORTED_IMAGES = [".jpg", ".jpeg", ".png", ".svg", ".gif"];
|
|
10
13
|
exports.SUPPORTED_IMAGES = SUPPORTED_IMAGES;
|
|
11
14
|
const SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png"];
|
|
@@ -14,14 +17,19 @@ const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
|
14
17
|
exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = OPTIMIZED_TRANSFORMED_IMAGE_PREFIX;
|
|
15
18
|
const OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
16
19
|
exports.OPTIMIZED_IMAGE_PREFIX = OPTIMIZED_IMAGE_PREFIX;
|
|
20
|
+
|
|
17
21
|
const getOptimizedImageKeyPrefix = key => {
|
|
18
22
|
return `${OPTIMIZED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
19
23
|
};
|
|
24
|
+
|
|
20
25
|
exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
|
|
26
|
+
|
|
21
27
|
const getOptimizedTransformedImageKeyPrefix = key => {
|
|
22
28
|
return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
23
29
|
};
|
|
30
|
+
|
|
24
31
|
exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
|
|
32
|
+
|
|
25
33
|
const getImageKey = ({
|
|
26
34
|
key,
|
|
27
35
|
transformations
|
|
@@ -30,7 +38,9 @@ const getImageKey = ({
|
|
|
30
38
|
const prefix = getOptimizedImageKeyPrefix(key);
|
|
31
39
|
return prefix + key;
|
|
32
40
|
}
|
|
41
|
+
|
|
33
42
|
const prefix = getOptimizedTransformedImageKeyPrefix(key);
|
|
34
43
|
return `${prefix}${(0, _objectHash.default)(transformations)}-${key}`;
|
|
35
44
|
};
|
|
45
|
+
|
|
36
46
|
exports.getImageKey = getImageKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SUPPORTED_IMAGES","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","objectHash","getOptimizedTransformedImageKeyPrefix","getImageKey","transformations","prefix"],"sources":["utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".svg\", \".gif\"];\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\".jpg\", \".jpeg\", \".png\"];\n\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n const prefix = getOptimizedImageKeyPrefix(key);\n return prefix + key;\n }\n\n const prefix = getOptimizedTransformedImageKeyPrefix(key);\n return `${prefix}${objectHash(transformations)}-${key}`;\n};\n\nexport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n OPTIMIZED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["SUPPORTED_IMAGES","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","objectHash","getOptimizedTransformedImageKeyPrefix","getImageKey","transformations","prefix"],"sources":["utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\n\nconst SUPPORTED_IMAGES = [\".jpg\", \".jpeg\", \".png\", \".svg\", \".gif\"];\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\".jpg\", \".jpeg\", \".png\"];\n\nconst OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = \"img-o-t-\";\nconst OPTIMIZED_IMAGE_PREFIX = \"img-o-\";\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (key: string): string => {\n return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${objectHash(key)}-`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n const prefix = getOptimizedImageKeyPrefix(key);\n return prefix + key;\n }\n\n const prefix = getOptimizedTransformedImageKeyPrefix(key);\n return `${prefix}${objectHash(transformations)}-${key}`;\n};\n\nexport {\n SUPPORTED_IMAGES,\n SUPPORTED_TRANSFORMABLE_IMAGES,\n OPTIMIZED_TRANSFORMED_IMAGE_PREFIX,\n OPTIMIZED_IMAGE_PREFIX,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":";;;;;;;;;AAAA;;AAEA,MAAMA,gBAAgB,GAAG,CAAC,MAAD,EAAS,OAAT,EAAkB,MAAlB,EAA0B,MAA1B,EAAkC,MAAlC,CAAzB;;AACA,MAAMC,8BAA8B,GAAG,CAAC,MAAD,EAAS,OAAT,EAAkB,MAAlB,CAAvC;;AAEA,MAAMC,kCAAkC,GAAG,UAA3C;;AACA,MAAMC,sBAAsB,GAAG,QAA/B;;;AAEA,MAAMC,0BAA0B,GAAIC,GAAD,IAAyB;EACxD,OAAQ,GAAEF,sBAAuB,GAAE,IAAAG,mBAAA,EAAWD,GAAX,CAAgB,GAAnD;AACH,CAFD;;;;AAIA,MAAME,qCAAqC,GAAIF,GAAD,IAAyB;EACnE,OAAQ,GAAEH,kCAAmC,GAAE,IAAAI,mBAAA,EAAWD,GAAX,CAAgB,GAA/D;AACH,CAFD;;;;AASA,MAAMG,WAAW,GAAG,CAAC;EAAEH,GAAF;EAAOI;AAAP,CAAD,KAAyD;EACzE,IAAI,CAACA,eAAL,EAAsB;IAClB,MAAMC,MAAM,GAAGN,0BAA0B,CAACC,GAAD,CAAzC;IACA,OAAOK,MAAM,GAAGL,GAAhB;EACH;;EAED,MAAMK,MAAM,GAAGH,qCAAqC,CAACF,GAAD,CAApD;EACA,OAAQ,GAAEK,MAAO,GAAE,IAAAJ,mBAAA,EAAWG,eAAX,CAA4B,IAAGJ,GAAI,EAAtD;AACH,CARD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bucket","process","env","S3_BUCKET","region","AWS_REGION"],"sources":["getEnvironment.ts"],"sourcesContent":["export default () => ({\n bucket: process.env.S3_BUCKET as string,\n region: process.env.AWS_REGION as string\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["bucket","process","env","S3_BUCKET","region","AWS_REGION"],"sources":["getEnvironment.ts"],"sourcesContent":["export default () => ({\n bucket: process.env.S3_BUCKET as string,\n region: process.env.AWS_REGION as string\n});\n"],"mappings":";;;;;;;eAAe,OAAO;EAClBA,MAAM,EAAEC,OAAO,CAACC,GAAR,CAAYC,SADF;EAElBC,MAAM,EAAEH,OAAO,CAACC,GAAR,CAAYG;AAFF,CAAP,C"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* Returns website's Bucket and file's Key values.
|
|
11
14
|
*/
|
|
@@ -18,4 +21,5 @@ var _default = filename => {
|
|
|
18
21
|
Key: `${filename}`
|
|
19
22
|
};
|
|
20
23
|
};
|
|
24
|
+
|
|
21
25
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["filename","bucket","Bucket","getEnvironment","Key"],"sources":["getObjectParams.ts"],"sourcesContent":["import getEnvironment from \"./getEnvironment\";\n\nexport interface ObjectParamsResponse {\n Bucket: string;\n Key: string;\n}\n/**\n * Returns website's Bucket and file's Key values.\n */\nexport default (filename: string): ObjectParamsResponse => {\n const { bucket: Bucket } = getEnvironment();\n\n return {\n Bucket,\n Key: `${filename}`\n };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["filename","bucket","Bucket","getEnvironment","Key"],"sources":["getObjectParams.ts"],"sourcesContent":["import getEnvironment from \"./getEnvironment\";\n\nexport interface ObjectParamsResponse {\n Bucket: string;\n Key: string;\n}\n/**\n * Returns website's Bucket and file's Key values.\n */\nexport default (filename: string): ObjectParamsResponse => {\n const { bucket: Bucket } = getEnvironment();\n\n return {\n Bucket,\n Key: `${filename}`\n };\n};\n"],"mappings":";;;;;;;;;AAAA;;AAMA;AACA;AACA;eACgBA,QAAD,IAA4C;EACvD,MAAM;IAAEC,MAAM,EAAEC;EAAV,IAAqB,IAAAC,uBAAA,GAA3B;EAEA,OAAO;IACHD,MADG;IAEHE,GAAG,EAAG,GAAEJ,QAAS;EAFd,CAAP;AAIH,C"}
|
package/handlers/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
@@ -16,5 +17,7 @@ Object.defineProperty(exports, "getObjectParams", {
|
|
|
16
17
|
return _getObjectParams.default;
|
|
17
18
|
}
|
|
18
19
|
});
|
|
20
|
+
|
|
19
21
|
var _getEnvironment = _interopRequireDefault(require("./getEnvironment"));
|
|
22
|
+
|
|
20
23
|
var _getObjectParams = _interopRequireDefault(require("./getObjectParams"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as getEnvironment } from \"./getEnvironment\";\nexport { default as getObjectParams } from \"./getObjectParams\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default as getEnvironment } from \"./getEnvironment\";\nexport { default as getObjectParams } from \"./getObjectParams\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;AACA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-file-manager",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.615a930a68",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fm:base"
|
|
@@ -18,21 +18,21 @@
|
|
|
18
18
|
],
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@babel/runtime": "7.
|
|
21
|
+
"@babel/runtime": "7.19.0",
|
|
22
22
|
"@commodo/fields": "1.1.2-beta.20",
|
|
23
|
-
"@webiny/api": "0.0.0-unstable.
|
|
24
|
-
"@webiny/api-security": "0.0.0-unstable.
|
|
25
|
-
"@webiny/api-tenancy": "0.0.0-unstable.
|
|
26
|
-
"@webiny/api-upgrade": "0.0.0-unstable.
|
|
27
|
-
"@webiny/error": "0.0.0-unstable.
|
|
28
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
29
|
-
"@webiny/handler-aws": "0.0.0-unstable.
|
|
30
|
-
"@webiny/handler-client": "0.0.0-unstable.
|
|
31
|
-
"@webiny/handler-graphql": "0.0.0-unstable.
|
|
32
|
-
"@webiny/plugins": "0.0.0-unstable.
|
|
33
|
-
"@webiny/project-utils": "0.0.0-unstable.
|
|
34
|
-
"@webiny/validation": "0.0.0-unstable.
|
|
35
|
-
"aws-sdk": "2.
|
|
23
|
+
"@webiny/api": "0.0.0-unstable.615a930a68",
|
|
24
|
+
"@webiny/api-security": "0.0.0-unstable.615a930a68",
|
|
25
|
+
"@webiny/api-tenancy": "0.0.0-unstable.615a930a68",
|
|
26
|
+
"@webiny/api-upgrade": "0.0.0-unstable.615a930a68",
|
|
27
|
+
"@webiny/error": "0.0.0-unstable.615a930a68",
|
|
28
|
+
"@webiny/handler": "0.0.0-unstable.615a930a68",
|
|
29
|
+
"@webiny/handler-aws": "0.0.0-unstable.615a930a68",
|
|
30
|
+
"@webiny/handler-client": "0.0.0-unstable.615a930a68",
|
|
31
|
+
"@webiny/handler-graphql": "0.0.0-unstable.615a930a68",
|
|
32
|
+
"@webiny/plugins": "0.0.0-unstable.615a930a68",
|
|
33
|
+
"@webiny/project-utils": "0.0.0-unstable.615a930a68",
|
|
34
|
+
"@webiny/validation": "0.0.0-unstable.615a930a68",
|
|
35
|
+
"aws-sdk": "2.1230.0",
|
|
36
36
|
"commodo-fields-object": "1.0.6",
|
|
37
37
|
"mdbid": "1.0.0",
|
|
38
38
|
"object-hash": "2.2.0",
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"@babel/plugin-transform-runtime": "^7.16.4",
|
|
46
46
|
"@babel/preset-env": "^7.19.4",
|
|
47
47
|
"@babel/preset-typescript": "^7.18.6",
|
|
48
|
-
"@webiny/api-i18n": "^0.0.0-unstable.
|
|
49
|
-
"@webiny/api-i18n-ddb": "^0.0.0-unstable.
|
|
50
|
-
"@webiny/cli": "^0.0.0-unstable.
|
|
48
|
+
"@webiny/api-i18n": "^0.0.0-unstable.615a930a68",
|
|
49
|
+
"@webiny/api-i18n-ddb": "^0.0.0-unstable.615a930a68",
|
|
50
|
+
"@webiny/cli": "^0.0.0-unstable.615a930a68",
|
|
51
51
|
"jest": "^28.1.0",
|
|
52
52
|
"rimraf": "^3.0.2",
|
|
53
53
|
"ttypescript": "^1.5.12",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
]
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "615a930a68d692c832e4f100405eeb3f5a8874af"
|
|
76
76
|
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _FilePlugin = require("../../definitions/FilePlugin");
|
|
11
|
+
|
|
9
12
|
var _createFileModel = _interopRequireDefault(require("../utils/createFileModel"));
|
|
13
|
+
|
|
10
14
|
var _default = () => [new _FilePlugin.FilePlugin({
|
|
11
15
|
beforeCreate: async ({
|
|
12
16
|
data
|
|
@@ -26,10 +30,12 @@ var _default = () => [new _FilePlugin.FilePlugin({
|
|
|
26
30
|
data
|
|
27
31
|
}) => {
|
|
28
32
|
const FileModel = (0, _createFileModel.default)();
|
|
33
|
+
|
|
29
34
|
for (const input of data) {
|
|
30
35
|
const fileInstance = new FileModel().populate(input);
|
|
31
36
|
await fileInstance.validate();
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
39
|
})];
|
|
40
|
+
|
|
35
41
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FilePlugin","beforeCreate","data","FileModel","createFileModel","fileData","populate","validate","beforeUpdate","updatedFileData","beforeBatchCreate","input","fileInstance"],"sources":["validation.ts"],"sourcesContent":["import { FilePlugin } from \"~/plugins/definitions/FilePlugin\";\nimport createFileModel from \"~/plugins/crud/utils/createFileModel\";\n\nexport default (): FilePlugin[] => [\n new FilePlugin({\n beforeCreate: async ({ data }) => {\n const FileModel = createFileModel();\n const fileData = new FileModel().populate(data);\n await fileData.validate();\n },\n beforeUpdate: async ({ data }) => {\n const FileModel = createFileModel(false);\n const updatedFileData = new FileModel().populate(data);\n await updatedFileData.validate();\n },\n beforeBatchCreate: async ({ data }) => {\n const FileModel = createFileModel();\n for (const input of data) {\n const fileInstance = new FileModel().populate(input);\n await fileInstance.validate();\n }\n }\n })\n];\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["FilePlugin","beforeCreate","data","FileModel","createFileModel","fileData","populate","validate","beforeUpdate","updatedFileData","beforeBatchCreate","input","fileInstance"],"sources":["validation.ts"],"sourcesContent":["import { FilePlugin } from \"~/plugins/definitions/FilePlugin\";\nimport createFileModel from \"~/plugins/crud/utils/createFileModel\";\n\nexport default (): FilePlugin[] => [\n new FilePlugin({\n beforeCreate: async ({ data }) => {\n const FileModel = createFileModel();\n const fileData = new FileModel().populate(data);\n await fileData.validate();\n },\n beforeUpdate: async ({ data }) => {\n const FileModel = createFileModel(false);\n const updatedFileData = new FileModel().populate(data);\n await updatedFileData.validate();\n },\n beforeBatchCreate: async ({ data }) => {\n const FileModel = createFileModel();\n for (const input of data) {\n const fileInstance = new FileModel().populate(input);\n await fileInstance.validate();\n }\n }\n })\n];\n"],"mappings":";;;;;;;;;AAAA;;AACA;;eAEe,MAAoB,CAC/B,IAAIA,sBAAJ,CAAe;EACXC,YAAY,EAAE,OAAO;IAAEC;EAAF,CAAP,KAAoB;IAC9B,MAAMC,SAAS,GAAG,IAAAC,wBAAA,GAAlB;IACA,MAAMC,QAAQ,GAAG,IAAIF,SAAJ,GAAgBG,QAAhB,CAAyBJ,IAAzB,CAAjB;IACA,MAAMG,QAAQ,CAACE,QAAT,EAAN;EACH,CALU;EAMXC,YAAY,EAAE,OAAO;IAAEN;EAAF,CAAP,KAAoB;IAC9B,MAAMC,SAAS,GAAG,IAAAC,wBAAA,EAAgB,KAAhB,CAAlB;IACA,MAAMK,eAAe,GAAG,IAAIN,SAAJ,GAAgBG,QAAhB,CAAyBJ,IAAzB,CAAxB;IACA,MAAMO,eAAe,CAACF,QAAhB,EAAN;EACH,CAVU;EAWXG,iBAAiB,EAAE,OAAO;IAAER;EAAF,CAAP,KAAoB;IACnC,MAAMC,SAAS,GAAG,IAAAC,wBAAA,GAAlB;;IACA,KAAK,MAAMO,KAAX,IAAoBT,IAApB,EAA0B;MACtB,MAAMU,YAAY,GAAG,IAAIT,SAAJ,GAAgBG,QAAhB,CAAyBK,KAAzB,CAArB;MACA,MAAMC,YAAY,CAACL,QAAb,EAAN;IACH;EACJ;AAjBU,CAAf,CAD+B,C"}
|
|
@@ -1,65 +1,87 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.default = void 0;
|
|
9
|
+
|
|
8
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
|
|
9
12
|
var _mdbid = _interopRequireDefault(require("mdbid"));
|
|
13
|
+
|
|
10
14
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
15
|
+
|
|
11
16
|
var _apiSecurity = require("@webiny/api-security");
|
|
17
|
+
|
|
12
18
|
var _checkBasePermissions = _interopRequireDefault(require("./utils/checkBasePermissions"));
|
|
19
|
+
|
|
13
20
|
var _api = require("@webiny/api");
|
|
21
|
+
|
|
14
22
|
var _FilePlugin = require("../definitions/FilePlugin");
|
|
23
|
+
|
|
15
24
|
var _FilesStorageOperationsProviderPlugin = require("../definitions/FilesStorageOperationsProviderPlugin");
|
|
25
|
+
|
|
16
26
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
27
|
+
|
|
17
28
|
var _lifecycleEvents = require("./utils/lifecycleEvents");
|
|
29
|
+
|
|
18
30
|
/**
|
|
19
31
|
* Package mdbid does not have types.
|
|
20
32
|
*/
|
|
21
33
|
// @ts-ignore
|
|
22
|
-
|
|
23
34
|
const BATCH_CREATE_MAX_FILES = 20;
|
|
24
|
-
|
|
25
35
|
/**
|
|
26
36
|
* If permission is limited to "own" files only, check that current identity owns the file.
|
|
27
37
|
*/
|
|
38
|
+
|
|
28
39
|
const checkOwnership = (file, permission, context) => {
|
|
29
40
|
if ((permission === null || permission === void 0 ? void 0 : permission.own) === true) {
|
|
30
41
|
const identity = context.security.getIdentity();
|
|
42
|
+
|
|
31
43
|
if (file.createdBy.id !== identity.id) {
|
|
32
44
|
throw new _apiSecurity.NotAuthorizedError();
|
|
33
45
|
}
|
|
34
46
|
}
|
|
35
47
|
};
|
|
48
|
+
|
|
36
49
|
const getLocaleCode = context => {
|
|
37
50
|
if (!context.i18n) {
|
|
38
51
|
throw new _error.default("Missing i18n on the FileManagerContext.", "MISSING_I18N");
|
|
39
52
|
}
|
|
53
|
+
|
|
40
54
|
const locale = context.i18n.getContentLocale();
|
|
55
|
+
|
|
41
56
|
if (!locale) {
|
|
42
57
|
throw new _error.default("Missing content locale on the FileManagerContext.", "MISSING_I18N_CONTENT_LOCALE");
|
|
43
58
|
}
|
|
59
|
+
|
|
44
60
|
if (!locale.code) {
|
|
45
61
|
throw new _error.default("Missing content locale code on the FileManagerContext.", "MISSING_I18N_CONTENT_LOCALE_CODE");
|
|
46
62
|
}
|
|
63
|
+
|
|
47
64
|
return locale.code;
|
|
48
65
|
};
|
|
66
|
+
|
|
49
67
|
const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
50
68
|
const pluginType = _FilesStorageOperationsProviderPlugin.FilesStorageOperationsProviderPlugin.type;
|
|
51
69
|
const providerPlugin = context.plugins.byType(pluginType).find(() => true);
|
|
70
|
+
|
|
52
71
|
if (!providerPlugin) {
|
|
53
72
|
throw new _error.default(`Missing "${pluginType}" plugin.`, "PLUGIN_NOT_FOUND", {
|
|
54
73
|
type: pluginType
|
|
55
74
|
});
|
|
56
75
|
}
|
|
76
|
+
|
|
57
77
|
const storageOperations = await providerPlugin.provide({
|
|
58
78
|
context
|
|
59
79
|
});
|
|
80
|
+
|
|
60
81
|
if (!context.fileManager) {
|
|
61
82
|
context.fileManager = {};
|
|
62
83
|
}
|
|
84
|
+
|
|
63
85
|
const filePlugins = context.plugins.byType(_FilePlugin.FilePlugin.type);
|
|
64
86
|
context.fileManager.files = {
|
|
65
87
|
async getFile(id) {
|
|
@@ -73,12 +95,15 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
73
95
|
locale: getLocaleCode(context)
|
|
74
96
|
}
|
|
75
97
|
});
|
|
98
|
+
|
|
76
99
|
if (!file) {
|
|
77
100
|
throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
|
|
78
101
|
}
|
|
102
|
+
|
|
79
103
|
checkOwnership(file, permission, context);
|
|
80
104
|
return file;
|
|
81
105
|
},
|
|
106
|
+
|
|
82
107
|
async createFile(input) {
|
|
83
108
|
await (0, _checkBasePermissions.default)(context, {
|
|
84
109
|
rwd: "w"
|
|
@@ -102,6 +127,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
102
127
|
locale: getLocaleCode(context),
|
|
103
128
|
webinyVersion: context.WEBINY_VERSION
|
|
104
129
|
});
|
|
130
|
+
|
|
105
131
|
try {
|
|
106
132
|
await (0, _lifecycleEvents.runLifecycleEvent)("beforeCreate", {
|
|
107
133
|
context,
|
|
@@ -124,6 +150,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
124
150
|
}));
|
|
125
151
|
}
|
|
126
152
|
},
|
|
153
|
+
|
|
127
154
|
async updateFile(id, input) {
|
|
128
155
|
const permission = await (0, _checkBasePermissions.default)(context, {
|
|
129
156
|
rwd: "w"
|
|
@@ -135,15 +162,18 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
135
162
|
locale: getLocaleCode(context)
|
|
136
163
|
}
|
|
137
164
|
});
|
|
165
|
+
|
|
138
166
|
if (!original) {
|
|
139
167
|
throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
|
|
140
168
|
}
|
|
169
|
+
|
|
141
170
|
checkOwnership(original, permission, context);
|
|
142
171
|
const file = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, original), input), {}, {
|
|
143
172
|
tags: Array.isArray(input.tags) ? input.tags : Array.isArray(original.tags) ? original.tags : [],
|
|
144
173
|
id: original.id,
|
|
145
174
|
webinyVersion: context.WEBINY_VERSION
|
|
146
175
|
});
|
|
176
|
+
|
|
147
177
|
try {
|
|
148
178
|
await (0, _lifecycleEvents.runLifecycleEvent)("beforeUpdate", {
|
|
149
179
|
context,
|
|
@@ -170,6 +200,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
170
200
|
}));
|
|
171
201
|
}
|
|
172
202
|
},
|
|
203
|
+
|
|
173
204
|
async deleteFile(id) {
|
|
174
205
|
const permission = await (0, _checkBasePermissions.default)(context, {
|
|
175
206
|
rwd: "d"
|
|
@@ -181,10 +212,13 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
181
212
|
locale: getLocaleCode(context)
|
|
182
213
|
}
|
|
183
214
|
});
|
|
215
|
+
|
|
184
216
|
if (!file) {
|
|
185
217
|
throw new _handlerGraphql.NotFoundError(`File with id "${id}" does not exists.`);
|
|
186
218
|
}
|
|
219
|
+
|
|
187
220
|
checkOwnership(file, permission, context);
|
|
221
|
+
|
|
188
222
|
try {
|
|
189
223
|
await (0, _lifecycleEvents.runLifecycleEvent)("beforeDelete", {
|
|
190
224
|
context,
|
|
@@ -205,18 +239,23 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
205
239
|
file
|
|
206
240
|
}));
|
|
207
241
|
}
|
|
242
|
+
|
|
208
243
|
return true;
|
|
209
244
|
},
|
|
245
|
+
|
|
210
246
|
async createFilesInBatch(inputs) {
|
|
211
247
|
if (!Array.isArray(inputs)) {
|
|
212
248
|
throw new _error.default(`"data" must be an array.`, "CREATE_FILES_NON_ARRAY");
|
|
213
249
|
}
|
|
250
|
+
|
|
214
251
|
if (inputs.length === 0) {
|
|
215
252
|
throw new _error.default(`"data" argument must contain at least one file.`, "CREATE_FILES_MIN_FILES");
|
|
216
253
|
}
|
|
254
|
+
|
|
217
255
|
if (inputs.length > BATCH_CREATE_MAX_FILES) {
|
|
218
256
|
throw new _error.default(`"data" argument must not contain more than ${BATCH_CREATE_MAX_FILES} files.`, "CREATE_FILES_MAX_FILES");
|
|
219
257
|
}
|
|
258
|
+
|
|
220
259
|
await (0, _checkBasePermissions.default)(context, {
|
|
221
260
|
rwd: "w"
|
|
222
261
|
});
|
|
@@ -241,6 +280,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
241
280
|
webinyVersion: context.WEBINY_VERSION
|
|
242
281
|
});
|
|
243
282
|
});
|
|
283
|
+
|
|
244
284
|
try {
|
|
245
285
|
await (0, _lifecycleEvents.runLifecycleEvent)("beforeBatchCreate", {
|
|
246
286
|
context,
|
|
@@ -263,6 +303,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
263
303
|
}));
|
|
264
304
|
}
|
|
265
305
|
},
|
|
306
|
+
|
|
266
307
|
async listFiles(params = {}) {
|
|
267
308
|
const permission = await (0, _checkBasePermissions.default)(context, {
|
|
268
309
|
rwd: "r"
|
|
@@ -285,6 +326,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
285
326
|
/**
|
|
286
327
|
* Always override the createdBy received from the user, if any.
|
|
287
328
|
*/
|
|
329
|
+
|
|
288
330
|
if (permission.own === true) {
|
|
289
331
|
const identity = context.security.getIdentity();
|
|
290
332
|
where.createdBy = identity.id;
|
|
@@ -293,9 +335,12 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
293
335
|
* We need to map the old GraphQL definition to the new one.
|
|
294
336
|
* That GQL definition is marked as deprecated.
|
|
295
337
|
*/
|
|
338
|
+
|
|
296
339
|
/**
|
|
297
340
|
* To have standardized where objects across the applications, we transform the types into type_in.
|
|
298
341
|
*/
|
|
342
|
+
|
|
343
|
+
|
|
299
344
|
if (Array.isArray(types) && types.length > 0 && !where.type_in) {
|
|
300
345
|
where.type_in = types;
|
|
301
346
|
}
|
|
@@ -303,22 +348,30 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
303
348
|
* We are assigning search to tag and name search.
|
|
304
349
|
* This should be treated as OR condition in the storage operations.
|
|
305
350
|
*/
|
|
351
|
+
|
|
352
|
+
|
|
306
353
|
if (search && !where.search) {
|
|
307
354
|
where.search = search;
|
|
308
355
|
}
|
|
309
356
|
/**
|
|
310
357
|
* Same as on types/type_in.
|
|
311
358
|
*/
|
|
359
|
+
|
|
360
|
+
|
|
312
361
|
if (Array.isArray(tags) && tags.length > 0 && !where.tag_in) {
|
|
313
362
|
where.tag_in = tags.map(tag => tag.toLowerCase());
|
|
314
363
|
}
|
|
315
364
|
/**
|
|
316
365
|
* Same as on types/type_in.
|
|
317
366
|
*/
|
|
367
|
+
|
|
368
|
+
|
|
318
369
|
if (Array.isArray(ids) && ids.length > 0 && !where.id_in) {
|
|
319
370
|
where.id_in = ids;
|
|
320
371
|
}
|
|
372
|
+
|
|
321
373
|
const sort = Array.isArray(initialSort) && initialSort.length > 0 ? initialSort : ["id_DESC"];
|
|
374
|
+
|
|
322
375
|
try {
|
|
323
376
|
return await storageOperations.list({
|
|
324
377
|
where,
|
|
@@ -335,6 +388,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
335
388
|
}));
|
|
336
389
|
}
|
|
337
390
|
},
|
|
391
|
+
|
|
338
392
|
async listTags({
|
|
339
393
|
where: initialWhere,
|
|
340
394
|
after,
|
|
@@ -350,14 +404,18 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
350
404
|
limit: limit || 100000,
|
|
351
405
|
after
|
|
352
406
|
};
|
|
407
|
+
|
|
353
408
|
try {
|
|
354
409
|
const [tags] = await storageOperations.tags(params);
|
|
410
|
+
|
|
355
411
|
if (Array.isArray(tags) === false) {
|
|
356
412
|
return [];
|
|
357
413
|
}
|
|
358
414
|
/**
|
|
359
415
|
* just to keep it standardized, sort by the tag ASC
|
|
360
416
|
*/
|
|
417
|
+
|
|
418
|
+
|
|
361
419
|
return tags.sort();
|
|
362
420
|
} catch (ex) {
|
|
363
421
|
throw new _error.default(ex.message || "Could not search for tags.", ex.code || "FILE_TAG_SEARCH_ERROR", (0, _objectSpread2.default)((0, _objectSpread2.default)({}, ex.data || {}), {}, {
|
|
@@ -365,6 +423,7 @@ const filesContextCrudPlugin = new _api.ContextPlugin(async context => {
|
|
|
365
423
|
}));
|
|
366
424
|
}
|
|
367
425
|
}
|
|
426
|
+
|
|
368
427
|
};
|
|
369
428
|
});
|
|
370
429
|
filesContextCrudPlugin.name = "FileManagerFilesCrud";
|