@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.
Files changed (67) hide show
  1. package/handlers/download/index.js +26 -7
  2. package/handlers/download/index.js.map +1 -1
  3. package/handlers/manage/index.js +16 -0
  4. package/handlers/manage/index.js.map +1 -1
  5. package/handlers/transform/index.js +16 -6
  6. package/handlers/transform/index.js.map +1 -1
  7. package/handlers/transform/loaders/imageLoader.js +17 -0
  8. package/handlers/transform/loaders/imageLoader.js.map +1 -1
  9. package/handlers/transform/loaders/index.js +3 -0
  10. package/handlers/transform/loaders/index.js.map +1 -1
  11. package/handlers/transform/loaders/sanitizeImageTransformations.js +13 -0
  12. package/handlers/transform/loaders/sanitizeImageTransformations.js.map +1 -1
  13. package/handlers/transform/managers/imageManager.js +14 -6
  14. package/handlers/transform/managers/imageManager.js.map +1 -1
  15. package/handlers/transform/managers/index.js +3 -0
  16. package/handlers/transform/managers/index.js.map +1 -1
  17. package/handlers/transform/optimizeImage.js +6 -0
  18. package/handlers/transform/optimizeImage.js.map +1 -1
  19. package/handlers/transform/transformImage.js +5 -0
  20. package/handlers/transform/transformImage.js.map +1 -1
  21. package/handlers/transform/utils.js +10 -0
  22. package/handlers/transform/utils.js.map +1 -1
  23. package/handlers/utils/getEnvironment.js +2 -0
  24. package/handlers/utils/getEnvironment.js.map +1 -1
  25. package/handlers/utils/getObjectParams.js +4 -0
  26. package/handlers/utils/getObjectParams.js.map +1 -1
  27. package/handlers/utils/index.js +3 -0
  28. package/handlers/utils/index.js.map +1 -1
  29. package/package.json +19 -19
  30. package/plugins/crud/files/validation.js +6 -0
  31. package/plugins/crud/files/validation.js.map +1 -1
  32. package/plugins/crud/files.crud.js +61 -2
  33. package/plugins/crud/files.crud.js.map +1 -1
  34. package/plugins/crud/settings.crud.js +18 -1
  35. package/plugins/crud/settings.crud.js.map +1 -1
  36. package/plugins/crud/system.crud.js +32 -2
  37. package/plugins/crud/system.crud.js.map +1 -1
  38. package/plugins/crud/utils/checkBasePermissions.js +8 -0
  39. package/plugins/crud/utils/checkBasePermissions.js.map +1 -1
  40. package/plugins/crud/utils/createFileModel.js +12 -0
  41. package/plugins/crud/utils/createFileModel.js.map +1 -1
  42. package/plugins/crud/utils/lifecycleEvents.js +12 -4
  43. package/plugins/crud/utils/lifecycleEvents.js.map +1 -1
  44. package/plugins/definitions/FilePhysicalStoragePlugin.js +11 -0
  45. package/plugins/definitions/FilePhysicalStoragePlugin.js.map +1 -1
  46. package/plugins/definitions/FilePlugin.js +18 -0
  47. package/plugins/definitions/FilePlugin.js.map +1 -1
  48. package/plugins/definitions/FileStorageTransformPlugin.js +12 -1
  49. package/plugins/definitions/FileStorageTransformPlugin.js.map +1 -1
  50. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js +5 -0
  51. package/plugins/definitions/FilesStorageOperationsProviderPlugin.js.map +1 -1
  52. package/plugins/definitions/InstallationPlugin.js +11 -0
  53. package/plugins/definitions/InstallationPlugin.js.map +1 -1
  54. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js +5 -0
  55. package/plugins/definitions/SettingsStorageOperationsProviderPlugin.js.map +1 -1
  56. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js +5 -0
  57. package/plugins/definitions/SystemStorageOperationsProviderPlugin.js.map +1 -1
  58. package/plugins/graphql.js +22 -2
  59. package/plugins/graphql.js.map +1 -1
  60. package/plugins/index.js +9 -0
  61. package/plugins/index.js.map +1 -1
  62. package/plugins/storage/FileStorage.js +32 -14
  63. package/plugins/storage/FileStorage.js.map +1 -1
  64. package/plugins/storage/index.js +4 -0
  65. package/plugins/storage/index.js.map +1 -1
  66. package/utils.js +2 -0
  67. 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":";;;;;;AACA;AACA;AAOkB,eAWH;EACXA,UAAU,EAAGC,MAAoC,IAAK;IAClD,MAAM;MAAEC,GAAG;MAAEC;IAAU,CAAC,GAAGF,MAAM;IACjC,IAAIG,wBAAgB,CAACC,QAAQ,CAACF,SAAS,CAAC,KAAK,KAAK,EAAE;MAChD,OAAO,KAAK;IAChB;;IAEA;IACA;IACA;IACA,OAAO,EACHD,GAAG,CAACI,UAAU,CAACC,8BAAsB,CAAC,IACtCL,GAAG,CAACI,UAAU,CAACE,0CAAkC,CAAC,CACrD;EACL,CAAC;EACD,MAAMC,OAAO,CAAC;IAAEC,EAAE;IAAER,GAAG;IAAEC;EAAqC,CAAC,EAAE;IAC7D;;IAEA,MAAMO,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAAC,IAAAC,mBAAW,EAAC;MAAEX;IAAI,CAAC,CAAC,CAAC,CAAC,CAACY,OAAO,EAAE;;IAEtE;IACA,IAAIC,sCAA8B,CAACV,QAAQ,CAACF,SAAS,CAAC,KAAK,KAAK,EAAE;MAC9D;IACJ;IACA,MAAMa,GAAG,GAAG,IAAAC,qBAAc,GAAE;IAC5B,MAAMC,UAAU,GAAG,MAAMR,EAAE,CACtBS,WAAW,CAAC;MACTC,MAAM,EAAEJ,GAAG,CAACK,MAAM;MAClBC,MAAM,EAAE,IAAAC,6CAAqC,EAACrB,GAAG;IACrD,CAAC,CAAC,CACDY,OAAO,EAAE;IAEd,IAAI,CAACI,UAAU,CAACM,QAAQ,EAAE;MACtB;IACJ;IAEA,KAAK,MAAMC,WAAW,IAAIP,UAAU,CAACM,QAAQ,EAAE;MAC3C,IAAI,CAACC,WAAW,CAACC,GAAG,EAAE;QAClB;MACJ;MACA,MAAMhB,EAAE,CAACC,YAAY,CAAC,IAAAC,sBAAe,EAACa,WAAW,CAACC,GAAG,CAAC,CAAC,CAACZ,OAAO,EAAE;IACrE;EACJ;AACJ,CAAC;AAAA"}
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":";;;;;;;AAAA;AAA0C,eAE3B,CAACA,qBAAY,CAAC;AAAA"}
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":";;;;;;;AAIA;AAJA;AACA;AACA;AACA;AAAA,eAIe,OAAOA,MAAY,EAAEC,IAAY,KAAoB;EAChE,QAAQA,IAAI;IACR,KAAK,WAAW;MAAE;QACd,OAAO,MAAM,IAAAC,cAAK,EAACF,MAAM,CAAC,CACrBG,MAAM,CAAC;UAAEC,KAAK,EAAE,IAAI;UAAEC,kBAAkB,EAAE,IAAI;UAAEC,GAAG,EAAE;QAAS,CAAC,CAAC,CAChEC,GAAG,CAAC;UAAEC,gBAAgB,EAAE,CAAC;UAAEC,iBAAiB,EAAE,IAAI;UAAEC,KAAK,EAAE;QAAK,CAAC,CAAC,CAClEC,YAAY,EAAE,CACdC,QAAQ,EAAE;MACnB;IACA,KAAK,YAAY;IACjB,KAAK,WAAW;MAAE;QACd,OAAO,MAAM,IAAAV,cAAK,EAACF,MAAM,CAAC,CACrBG,MAAM,CAAC;UAAEC,KAAK,EAAE,IAAI;UAAEC,kBAAkB,EAAE,IAAI;UAAEC,GAAG,EAAE;QAAS,CAAC,CAAC,CAChEO,QAAQ,CAAC,MAAM,EAAE;UAAEC,OAAO,EAAE;QAAG,CAAC,CAAC,CACjCF,QAAQ,EAAE;MACnB;IACA;MACI,OAAOZ,MAAM;EAAC;AAE1B,CAAC;AAAA"}
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":";;;;;;;AAIA;AAJA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AAHA,eAIe,OAAOA,MAAY,EAAEC,eAA+B,KAAoB;EACnF,MAAM;IAAEC;EAAM,CAAC,GAAGD,eAAe;EACjC,OAAO,MAAM,IAAAE,cAAK,EAACH,MAAM,CAAC,CAACI,MAAM,CAAC;IAAEF;EAAM,CAAC,CAAC,CAACG,QAAQ,EAAE;AAC3D,CAAC;AAAA"}
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":";;;;;;;AAAA;AAEA,MAAMA,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAAC;AACnE,MAAMC,8BAA8B,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAAC;AAEjE,MAAMC,kCAAkC,GAAG,UAAU;AAAC;AACtD,MAAMC,sBAAsB,GAAG,QAAQ;AAAC;AAExC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,OAAQ,GAAEF,sBAAuB,GAAE,IAAAG,mBAAU,EAACD,GAAG,CAAE,GAAE;AACzD,CAAC;AAAC;AAEF,MAAME,qCAAqC,GAAIF,GAAW,IAAa;EACnE,OAAQ,GAAEH,kCAAmC,GAAE,IAAAI,mBAAU,EAACD,GAAG,CAAE,GAAE;AACrE,CAAC;AAAC;AAOF,MAAMG,WAAW,GAAG,CAAC;EAAEH,GAAG;EAAEI;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,MAAMC,MAAM,GAAGN,0BAA0B,CAACC,GAAG,CAAC;IAC9C,OAAOK,MAAM,GAAGL,GAAG;EACvB;EAEA,MAAMK,MAAM,GAAGH,qCAAqC,CAACF,GAAG,CAAC;EACzD,OAAQ,GAAEK,MAAO,GAAE,IAAAJ,mBAAU,EAACG,eAAe,CAAE,IAAGJ,GAAI,EAAC;AAC3D,CAAC;AAAC"}
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"}
@@ -4,8 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  var _default = () => ({
8
9
  bucket: process.env.S3_BUCKET,
9
10
  region: process.env.AWS_REGION
10
11
  });
12
+
11
13
  exports.default = _default;
@@ -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":";;;;;;eAAe,OAAO;EAClBA,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC,SAAmB;EACvCC,MAAM,EAAEH,OAAO,CAACC,GAAG,CAACG;AACxB,CAAC,CAAC;AAAA"}
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":";;;;;;;AAAA;AAMA;AACA;AACA;AAFA,eAGgBA,QAAgB,IAA2B;EACvD,MAAM;IAAEC,MAAM,EAAEC;EAAO,CAAC,GAAG,IAAAC,uBAAc,GAAE;EAE3C,OAAO;IACHD,MAAM;IACNE,GAAG,EAAG,GAAEJ,QAAS;EACrB,CAAC;AACL,CAAC;AAAA"}
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"}
@@ -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":";;;;;;;;;;;;;;;;;;AAAA;AACA"}
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.611c5af35e",
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.20.1",
21
+ "@babel/runtime": "7.19.0",
22
22
  "@commodo/fields": "1.1.2-beta.20",
23
- "@webiny/api": "0.0.0-unstable.611c5af35e",
24
- "@webiny/api-security": "0.0.0-unstable.611c5af35e",
25
- "@webiny/api-tenancy": "0.0.0-unstable.611c5af35e",
26
- "@webiny/api-upgrade": "0.0.0-unstable.611c5af35e",
27
- "@webiny/error": "0.0.0-unstable.611c5af35e",
28
- "@webiny/handler": "0.0.0-unstable.611c5af35e",
29
- "@webiny/handler-aws": "0.0.0-unstable.611c5af35e",
30
- "@webiny/handler-client": "0.0.0-unstable.611c5af35e",
31
- "@webiny/handler-graphql": "0.0.0-unstable.611c5af35e",
32
- "@webiny/plugins": "0.0.0-unstable.611c5af35e",
33
- "@webiny/project-utils": "0.0.0-unstable.611c5af35e",
34
- "@webiny/validation": "0.0.0-unstable.611c5af35e",
35
- "aws-sdk": "2.1261.0",
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.611c5af35e",
49
- "@webiny/api-i18n-ddb": "^0.0.0-unstable.611c5af35e",
50
- "@webiny/cli": "^0.0.0-unstable.611c5af35e",
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": "cdeed09317c2c0e07cb0d4d88f9ac38a214ddc22"
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":";;;;;;;AAAA;AACA;AAAmE,eAEpD,MAAoB,CAC/B,IAAIA,sBAAU,CAAC;EACXC,YAAY,EAAE,OAAO;IAAEC;EAAK,CAAC,KAAK;IAC9B,MAAMC,SAAS,GAAG,IAAAC,wBAAe,GAAE;IACnC,MAAMC,QAAQ,GAAG,IAAIF,SAAS,EAAE,CAACG,QAAQ,CAACJ,IAAI,CAAC;IAC/C,MAAMG,QAAQ,CAACE,QAAQ,EAAE;EAC7B,CAAC;EACDC,YAAY,EAAE,OAAO;IAAEN;EAAK,CAAC,KAAK;IAC9B,MAAMC,SAAS,GAAG,IAAAC,wBAAe,EAAC,KAAK,CAAC;IACxC,MAAMK,eAAe,GAAG,IAAIN,SAAS,EAAE,CAACG,QAAQ,CAACJ,IAAI,CAAC;IACtD,MAAMO,eAAe,CAACF,QAAQ,EAAE;EACpC,CAAC;EACDG,iBAAiB,EAAE,OAAO;IAAER;EAAK,CAAC,KAAK;IACnC,MAAMC,SAAS,GAAG,IAAAC,wBAAe,GAAE;IACnC,KAAK,MAAMO,KAAK,IAAIT,IAAI,EAAE;MACtB,MAAMU,YAAY,GAAG,IAAIT,SAAS,EAAE,CAACG,QAAQ,CAACK,KAAK,CAAC;MACpD,MAAMC,YAAY,CAACL,QAAQ,EAAE;IACjC;EACJ;AACJ,CAAC,CAAC,CACL;AAAA"}
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";