@webiny/api-file-manager-s3 6.3.0 → 6.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/assetDelivery/assetDeliveryConfig.js +32 -39
  2. package/assetDelivery/assetDeliveryConfig.js.map +1 -1
  3. package/assetDelivery/createAssetDelivery.js +5 -19
  4. package/assetDelivery/createAssetDelivery.js.map +1 -1
  5. package/assetDelivery/index.js +0 -2
  6. package/assetDelivery/s3/S3AssetResolver.js +21 -22
  7. package/assetDelivery/s3/S3AssetResolver.js.map +1 -1
  8. package/assetDelivery/s3/S3ContentsReader.js +13 -16
  9. package/assetDelivery/s3/S3ContentsReader.js.map +1 -1
  10. package/assetDelivery/s3/S3ErrorAssetReply.js +10 -9
  11. package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -1
  12. package/assetDelivery/s3/S3OutputStrategy.js +23 -27
  13. package/assetDelivery/s3/S3OutputStrategy.js.map +1 -1
  14. package/assetDelivery/s3/S3RedirectAssetReply.js +12 -11
  15. package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -1
  16. package/assetDelivery/s3/S3StreamAssetReply.js +12 -11
  17. package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -1
  18. package/assetDelivery/s3/SharpTransform.js +139 -169
  19. package/assetDelivery/s3/SharpTransform.js.map +1 -1
  20. package/assetDelivery/s3/transformation/AssetKeyGenerator.js +18 -17
  21. package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -1
  22. package/assetDelivery/s3/transformation/CallableContentsReader.js +8 -7
  23. package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -1
  24. package/assetDelivery/s3/transformation/WidthCollection.js +15 -16
  25. package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -1
  26. package/assetDelivery/s3/transformation/utils.js +24 -30
  27. package/assetDelivery/s3/transformation/utils.js.map +1 -1
  28. package/assetDelivery/threatDetection/ObjectKey.js +15 -14
  29. package/assetDelivery/threatDetection/ObjectKey.js.map +1 -1
  30. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +28 -42
  31. package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -1
  32. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +2 -3
  33. package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -1
  34. package/assetDelivery/threatDetection/index.js +0 -2
  35. package/assetDelivery/threatDetection/processThreatScanResult.js +48 -54
  36. package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -1
  37. package/assetDelivery/threatDetection/types.js +0 -3
  38. package/assetDelivery/types.js +0 -3
  39. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js +17 -13
  40. package/enterprise/ApplyThreatScanning/CreateFileWithThreatScanDecorator.js.map +1 -1
  41. package/enterprise/ApplyThreatScanning/feature.js +6 -5
  42. package/enterprise/ApplyThreatScanning/feature.js.map +1 -1
  43. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js +26 -27
  44. package/features/DeleteFileFromBucket/DeleteFileFromBucketHandler.js.map +1 -1
  45. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js +40 -51
  46. package/features/DeleteFileFromBucket/DeleteS3FolderTask.js.map +1 -1
  47. package/features/DeleteFileFromBucket/feature.js +7 -6
  48. package/features/DeleteFileFromBucket/feature.js.map +1 -1
  49. package/features/ExtractMetadata/ExtractMetadataHandler.js +18 -19
  50. package/features/ExtractMetadata/ExtractMetadataHandler.js.map +1 -1
  51. package/features/ExtractMetadata/ExtractMetadataTask.js +75 -114
  52. package/features/ExtractMetadata/ExtractMetadataTask.js.map +1 -1
  53. package/features/ExtractMetadata/feature.js +7 -6
  54. package/features/ExtractMetadata/feature.js.map +1 -1
  55. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js +20 -19
  56. package/features/FlushCache/FlushCacheOnFileDeleteHandler.js.map +1 -1
  57. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js +22 -26
  58. package/features/FlushCache/FlushCacheOnFileUpdateHandler.js.map +1 -1
  59. package/features/FlushCache/InvalidateCacheTask.js +63 -75
  60. package/features/FlushCache/InvalidateCacheTask.js.map +1 -1
  61. package/features/FlushCache/feature.js +8 -7
  62. package/features/FlushCache/feature.js.map +1 -1
  63. package/features/GetFileContentsById/GetFileContentsByIdUseCase.d.ts +13 -0
  64. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js +40 -0
  65. package/features/GetFileContentsById/GetFileContentsByIdUseCase.js.map +1 -0
  66. package/features/GetFileContentsById/feature.d.ts +4 -0
  67. package/features/GetFileContentsById/feature.js +11 -0
  68. package/features/GetFileContentsById/feature.js.map +1 -0
  69. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.d.ts +13 -0
  70. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js +40 -0
  71. package/features/GetFileContentsByKey/GetFileContentsByKeyUseCase.js.map +1 -0
  72. package/features/GetFileContentsByKey/feature.d.ts +4 -0
  73. package/features/GetFileContentsByKey/feature.js +11 -0
  74. package/features/GetFileContentsByKey/feature.js.map +1 -0
  75. package/features/WriteFileMetadata/MetadataReader.js +9 -10
  76. package/features/WriteFileMetadata/MetadataReader.js.map +1 -1
  77. package/features/WriteFileMetadata/MetadataWriter.js +23 -25
  78. package/features/WriteFileMetadata/MetadataWriter.js.map +1 -1
  79. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js +14 -12
  80. package/features/WriteFileMetadata/WriteMetadataAfterBatchCreateHandler.js.map +1 -1
  81. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js +16 -12
  82. package/features/WriteFileMetadata/WriteMetadataAfterCreateHandler.js.map +1 -1
  83. package/features/WriteFileMetadata/feature.js +7 -6
  84. package/features/WriteFileMetadata/feature.js.map +1 -1
  85. package/graphql/checkPermissions.js +17 -32
  86. package/graphql/checkPermissions.js.map +1 -1
  87. package/graphql/schema.js +99 -102
  88. package/graphql/schema.js.map +1 -1
  89. package/index.js +19 -13
  90. package/index.js.map +1 -1
  91. package/multiPartUpload/CompleteMultiPartUploadUseCase.js +50 -53
  92. package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -1
  93. package/multiPartUpload/CreateMultiPartUploadUseCase.js +31 -38
  94. package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -1
  95. package/package.json +18 -18
  96. package/types.js +0 -2
  97. package/utils/CdnPathsGenerator.js +8 -4
  98. package/utils/CdnPathsGenerator.js.map +1 -1
  99. package/utils/FileExtension.js +12 -13
  100. package/utils/FileExtension.js.map +1 -1
  101. package/utils/FileKey.js +29 -21
  102. package/utils/FileKey.js.map +1 -1
  103. package/utils/FileKey.test.js +49 -49
  104. package/utils/FileKey.test.js.map +1 -1
  105. package/utils/FileNormalizer.js +34 -35
  106. package/utils/FileNormalizer.js.map +1 -1
  107. package/utils/FileUploadModifier.js +32 -32
  108. package/utils/FileUploadModifier.js.map +1 -1
  109. package/utils/createFileNormalizerFromContext.js +5 -4
  110. package/utils/createFileNormalizerFromContext.js.map +1 -1
  111. package/utils/getPresignedPostPayload.js +36 -33
  112. package/utils/getPresignedPostPayload.js.map +1 -1
  113. package/utils/mimeTypes.js +6 -10
  114. package/utils/mimeTypes.js.map +1 -1
  115. package/utils/uploadFileToS3.js +11 -10
  116. package/utils/uploadFileToS3.js.map +1 -1
  117. package/assetDelivery/index.js.map +0 -1
  118. package/assetDelivery/threatDetection/index.js.map +0 -1
  119. package/assetDelivery/threatDetection/types.js.map +0 -1
  120. package/assetDelivery/types.js.map +0 -1
  121. package/types.js.map +0 -1
@@ -1,182 +1,152 @@
1
1
  import sharp from "sharp";
2
2
  import { WidthCollection } from "./transformation/WidthCollection.js";
3
- import * as utils from "./transformation/utils.js";
4
3
  import { CallableContentsReader } from "./transformation/CallableContentsReader.js";
5
4
  import { AssetKeyGenerator } from "./transformation/AssetKeyGenerator.js";
6
- export class SharpTransform {
7
- constructor(params) {
8
- this.params = params;
9
- }
10
- async transform(assetRequest, asset) {
11
- if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(asset.getExtension())) {
12
- console.log(`Transformations/optimizations of ${asset.getContentType()} assets are not supported. Skipping.`);
13
- return asset;
5
+ import * as __rspack_external__transformation_utils_js_d3dc8821 from "./transformation/utils.js";
6
+ class SharpTransform {
7
+ constructor(params){
8
+ this.params = params;
14
9
  }
15
-
16
- // `original` is part of the request, but it won't even get to this point in the execution.
17
- // oxlint-disable-next-line typescript/no-unused-vars
18
- const {
19
- original,
20
- ...options
21
- } = assetRequest.getOptions();
22
- const transformedAsset = asset.clone();
23
- if (Object.keys(options).length > 0) {
24
- // Transformations were requested.
25
- return this.transformAsset(transformedAsset, options);
10
+ async transform(assetRequest, asset) {
11
+ if (!__rspack_external__transformation_utils_js_d3dc8821.SUPPORTED_TRANSFORMABLE_IMAGES.includes(asset.getExtension())) {
12
+ console.log(`Transformations/optimizations of ${asset.getContentType()} assets are not supported. Skipping.`);
13
+ return asset;
14
+ }
15
+ const { original, ...options } = assetRequest.getOptions();
16
+ const transformedAsset = asset.clone();
17
+ if (Object.keys(options).length > 0) return this.transformAsset(transformedAsset, options);
18
+ return this.optimizeAsset(transformedAsset);
26
19
  }
27
-
28
- // Return an optimized asset.
29
- return this.optimizeAsset(transformedAsset);
30
- }
31
- async transformAsset(asset, options) {
32
- if (options.width) {
33
- const {
34
- s3,
35
- bucket
36
- } = this.params;
37
- const assetKey = new AssetKeyGenerator(asset);
38
- const transformedAssetKey = assetKey.getTransformedImageKey(options);
39
- try {
40
- const {
41
- Body
42
- } = await s3.getObject({
43
- Bucket: bucket,
44
- Key: transformedAssetKey
45
- });
46
- if (!Body) {
47
- throw new Error(`Missing image body!`);
20
+ async transformAsset(asset, options) {
21
+ if (options.width) {
22
+ const { s3, bucket } = this.params;
23
+ const assetKey = new AssetKeyGenerator(asset);
24
+ const transformedAssetKey = assetKey.getTransformedImageKey(options);
25
+ try {
26
+ const { Body } = await s3.getObject({
27
+ Bucket: bucket,
28
+ Key: transformedAssetKey
29
+ });
30
+ if (!Body) throw new Error("Missing image body!");
31
+ const buffer = Buffer.from(await Body.transformToByteArray());
32
+ const newAsset = asset.withProps({
33
+ size: buffer.length
34
+ });
35
+ newAsset.setContentsReader(new CallableContentsReader(()=>buffer));
36
+ console.log("Return a previously transformed asset", {
37
+ key: transformedAssetKey,
38
+ size: newAsset.getSize()
39
+ });
40
+ return newAsset;
41
+ } catch {
42
+ const optimizedImage = await this.optimizeAsset(asset);
43
+ const widths = new WidthCollection(this.params.imageResizeWidths);
44
+ const width = widths.getClosestOrMax(options.width);
45
+ console.log(`Resize the asset (width: ${width})`);
46
+ const buffer = await optimizedImage.getContents();
47
+ const transformedBuffer = await sharp(buffer, {
48
+ animated: this.isAssetAnimated(asset)
49
+ }).withMetadata().resize({
50
+ width,
51
+ withoutEnlargement: true
52
+ }).toBuffer();
53
+ const newAsset = asset.withProps({
54
+ size: transformedBuffer.length
55
+ });
56
+ newAsset.setContentsReader(new CallableContentsReader(()=>transformedBuffer));
57
+ await s3.putObject({
58
+ Bucket: bucket,
59
+ Key: transformedAssetKey,
60
+ ContentType: newAsset.getContentType(),
61
+ Body: await newAsset.getContents()
62
+ });
63
+ console.log("Return the resized asset", {
64
+ key: transformedAssetKey,
65
+ size: newAsset.getSize()
66
+ });
67
+ return newAsset;
68
+ }
48
69
  }
49
- const buffer = Buffer.from(await Body.transformToByteArray());
50
- const newAsset = asset.withProps({
51
- size: buffer.length
52
- });
53
- newAsset.setContentsReader(new CallableContentsReader(() => buffer));
54
- console.log(`Return a previously transformed asset`, {
55
- key: transformedAssetKey,
56
- size: newAsset.getSize()
57
- });
58
- return newAsset;
59
- } catch {
60
- const optimizedImage = await this.optimizeAsset(asset);
61
- const widths = new WidthCollection(this.params.imageResizeWidths);
62
- const width = widths.getClosestOrMax(options.width);
63
-
64
- /**
65
- * `width` is the only transformation we currently support.
66
- */
67
- console.log(`Resize the asset (width: ${width})`);
68
- const buffer = await optimizedImage.getContents();
69
- const transformedBuffer = await sharp(buffer, {
70
- animated: this.isAssetAnimated(asset)
71
- }).withMetadata().resize({
72
- width,
73
- withoutEnlargement: true
74
- }).toBuffer();
75
-
76
- /**
77
- * Transformations are applied to the optimized image.
78
- */
79
- const newAsset = asset.withProps({
80
- size: transformedBuffer.length
81
- });
82
- newAsset.setContentsReader(new CallableContentsReader(() => transformedBuffer));
83
- await s3.putObject({
84
- Bucket: bucket,
85
- Key: transformedAssetKey,
86
- ContentType: newAsset.getContentType(),
87
- Body: await newAsset.getContents()
88
- });
89
- console.log(`Return the resized asset`, {
90
- key: transformedAssetKey,
91
- size: newAsset.getSize()
70
+ return asset;
71
+ }
72
+ async optimizeAsset(asset) {
73
+ const { s3, bucket } = this.params;
74
+ console.log("Optimize asset", {
75
+ id: asset.getId(),
76
+ key: asset.getKey(),
77
+ size: asset.getSize(),
78
+ type: asset.getContentType()
92
79
  });
93
- return newAsset;
94
- }
80
+ const assetKey = new AssetKeyGenerator(asset);
81
+ const optimizedAssetKey = assetKey.getOptimizedImageKey();
82
+ try {
83
+ const { Body } = await s3.getObject({
84
+ Bucket: bucket,
85
+ Key: optimizedAssetKey
86
+ });
87
+ if (!Body) throw new Error("Missing image body!");
88
+ console.log("Return a previously optimized asset", optimizedAssetKey);
89
+ const buffer = Buffer.from(await Body.transformToByteArray());
90
+ const newAsset = asset.withProps({
91
+ size: buffer.length
92
+ });
93
+ newAsset.setContentsReader(new CallableContentsReader(()=>buffer));
94
+ return newAsset;
95
+ } catch {
96
+ console.log("Create an optimized version of the original asset", asset.getKey());
97
+ const buffer = await asset.getContents();
98
+ const optimizationMap = {
99
+ "image/png": (buffer)=>this.optimizePng(buffer),
100
+ "image/jpeg": (buffer)=>this.optimizeJpeg(buffer),
101
+ "image/jpg": (buffer)=>this.optimizeJpeg(buffer)
102
+ };
103
+ const optimization = optimizationMap[asset.getContentType()];
104
+ if (!optimization) {
105
+ console.log(`No optimizations defined for ${asset.getContentType()}`);
106
+ return asset;
107
+ }
108
+ const optimizedBuffer = await optimization(buffer).toBuffer();
109
+ console.log("Optimized asset size", optimizedBuffer.length);
110
+ const newAsset = asset.withProps({
111
+ size: optimizedBuffer.length
112
+ });
113
+ newAsset.setContentsReader(new CallableContentsReader(()=>optimizedBuffer));
114
+ await s3.putObject({
115
+ Bucket: bucket,
116
+ Key: optimizedAssetKey,
117
+ ContentType: newAsset.getContentType(),
118
+ Body: await newAsset.getContents()
119
+ });
120
+ return newAsset;
121
+ }
95
122
  }
96
- return asset;
97
- }
98
- async optimizeAsset(asset) {
99
- const {
100
- s3,
101
- bucket
102
- } = this.params;
103
- console.log("Optimize asset", {
104
- id: asset.getId(),
105
- key: asset.getKey(),
106
- size: asset.getSize(),
107
- type: asset.getContentType()
108
- });
109
- const assetKey = new AssetKeyGenerator(asset);
110
- const optimizedAssetKey = assetKey.getOptimizedImageKey();
111
- try {
112
- const {
113
- Body
114
- } = await s3.getObject({
115
- Bucket: bucket,
116
- Key: optimizedAssetKey
117
- });
118
- if (!Body) {
119
- throw new Error(`Missing image body!`);
120
- }
121
- console.log("Return a previously optimized asset", optimizedAssetKey);
122
- const buffer = Buffer.from(await Body.transformToByteArray());
123
- const newAsset = asset.withProps({
124
- size: buffer.length
125
- });
126
- newAsset.setContentsReader(new CallableContentsReader(() => buffer));
127
- return newAsset;
128
- } catch {
129
- console.log("Create an optimized version of the original asset", asset.getKey());
130
- // If not found, create an optimized version of the original asset.
131
- const buffer = await asset.getContents();
132
- const optimizationMap = {
133
- "image/png": buffer => this.optimizePng(buffer),
134
- "image/jpeg": buffer => this.optimizeJpeg(buffer),
135
- "image/jpg": buffer => this.optimizeJpeg(buffer)
136
- };
137
- const optimization = optimizationMap[asset.getContentType()];
138
- if (!optimization) {
139
- console.log(`No optimizations defined for ${asset.getContentType()}`);
140
- return asset;
141
- }
142
- const optimizedBuffer = await optimization(buffer).toBuffer();
143
- console.log("Optimized asset size", optimizedBuffer.length);
144
- const newAsset = asset.withProps({
145
- size: optimizedBuffer.length
146
- });
147
- newAsset.setContentsReader(new CallableContentsReader(() => optimizedBuffer));
148
- await s3.putObject({
149
- Bucket: bucket,
150
- Key: optimizedAssetKey,
151
- ContentType: newAsset.getContentType(),
152
- Body: await newAsset.getContents()
153
- });
154
- return newAsset;
123
+ isAssetAnimated(asset) {
124
+ return [
125
+ "gif",
126
+ "webp"
127
+ ].includes(asset.getExtension());
128
+ }
129
+ optimizePng(buffer) {
130
+ return sharp(buffer).resize({
131
+ width: 2560,
132
+ withoutEnlargement: true,
133
+ fit: "inside"
134
+ }).png({
135
+ compressionLevel: 9,
136
+ adaptiveFiltering: true,
137
+ force: true
138
+ }).withMetadata();
139
+ }
140
+ optimizeJpeg(buffer) {
141
+ return sharp(buffer).resize({
142
+ width: 2560,
143
+ withoutEnlargement: true,
144
+ fit: "inside"
145
+ }).withMetadata().toFormat("jpeg", {
146
+ quality: 90
147
+ });
155
148
  }
156
- }
157
- isAssetAnimated(asset) {
158
- return ["gif", "webp"].includes(asset.getExtension());
159
- }
160
- optimizePng(buffer) {
161
- return sharp(buffer).resize({
162
- width: 2560,
163
- withoutEnlargement: true,
164
- fit: "inside"
165
- }).png({
166
- compressionLevel: 9,
167
- adaptiveFiltering: true,
168
- force: true
169
- }).withMetadata();
170
- }
171
- optimizeJpeg(buffer) {
172
- return sharp(buffer).resize({
173
- width: 2560,
174
- withoutEnlargement: true,
175
- fit: "inside"
176
- }).withMetadata().toFormat("jpeg", {
177
- quality: 90
178
- });
179
- }
180
149
  }
150
+ export { SharpTransform };
181
151
 
182
152
  //# sourceMappingURL=SharpTransform.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["sharp","WidthCollection","utils","CallableContentsReader","AssetKeyGenerator","SharpTransform","constructor","params","transform","assetRequest","asset","SUPPORTED_TRANSFORMABLE_IMAGES","includes","getExtension","console","log","getContentType","original","options","getOptions","transformedAsset","clone","Object","keys","length","transformAsset","optimizeAsset","width","s3","bucket","assetKey","transformedAssetKey","getTransformedImageKey","Body","getObject","Bucket","Key","Error","buffer","Buffer","from","transformToByteArray","newAsset","withProps","size","setContentsReader","key","getSize","optimizedImage","widths","imageResizeWidths","getClosestOrMax","getContents","transformedBuffer","animated","isAssetAnimated","withMetadata","resize","withoutEnlargement","toBuffer","putObject","ContentType","id","getId","getKey","type","optimizedAssetKey","getOptimizedImageKey","optimizationMap","optimizePng","optimizeJpeg","optimization","optimizedBuffer","fit","png","compressionLevel","adaptiveFiltering","force","toFormat","quality"],"sources":["SharpTransform.ts"],"sourcesContent":["import sharp from \"sharp\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n Asset,\n AssetRequest,\n AssetRequestOptions,\n AssetTransformationStrategy\n} from \"@webiny/api-file-manager\";\nimport { WidthCollection } from \"./transformation/WidthCollection.js\";\nimport * as utils from \"./transformation/utils.js\";\nimport { CallableContentsReader } from \"./transformation/CallableContentsReader.js\";\nimport { AssetKeyGenerator } from \"./transformation/AssetKeyGenerator.js\";\n\ninterface SharpTransformationParams {\n s3: S3;\n bucket: string;\n imageResizeWidths: number[];\n}\n\nexport class SharpTransform implements AssetTransformationStrategy {\n private readonly params: SharpTransformationParams;\n\n constructor(params: SharpTransformationParams) {\n this.params = params;\n }\n\n async transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(asset.getExtension())) {\n console.log(\n `Transformations/optimizations of ${asset.getContentType()} assets are not supported. Skipping.`\n );\n return asset;\n }\n\n // `original` is part of the request, but it won't even get to this point in the execution.\n // oxlint-disable-next-line typescript/no-unused-vars\n const { original, ...options } = assetRequest.getOptions();\n\n const transformedAsset = asset.clone();\n\n if (Object.keys(options).length > 0) {\n // Transformations were requested.\n return this.transformAsset(transformedAsset, options);\n }\n\n // Return an optimized asset.\n return this.optimizeAsset(transformedAsset);\n }\n\n private async transformAsset(asset: Asset, options: Omit<AssetRequestOptions, \"original\">) {\n if (options.width) {\n const { s3, bucket } = this.params;\n\n const assetKey = new AssetKeyGenerator(asset);\n const transformedAssetKey = assetKey.getTransformedImageKey(options);\n\n try {\n const { Body } = await s3.getObject({\n Bucket: bucket,\n Key: transformedAssetKey\n });\n\n if (!Body) {\n throw new Error(`Missing image body!`);\n }\n\n const buffer = Buffer.from(await Body.transformToByteArray());\n\n const newAsset = asset.withProps({ size: buffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => buffer));\n\n console.log(`Return a previously transformed asset`, {\n key: transformedAssetKey,\n size: newAsset.getSize()\n });\n\n return newAsset;\n } catch {\n const optimizedImage = await this.optimizeAsset(asset);\n\n const widths = new WidthCollection(this.params.imageResizeWidths);\n const width = widths.getClosestOrMax(options.width);\n\n /**\n * `width` is the only transformation we currently support.\n */\n console.log(`Resize the asset (width: ${width})`);\n const buffer = await optimizedImage.getContents();\n const transformedBuffer = await sharp(buffer, {\n animated: this.isAssetAnimated(asset)\n })\n .withMetadata()\n .resize({ width, withoutEnlargement: true })\n .toBuffer();\n\n /**\n * Transformations are applied to the optimized image.\n */\n const newAsset = asset.withProps({ size: transformedBuffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => transformedBuffer));\n\n await s3.putObject({\n Bucket: bucket,\n Key: transformedAssetKey,\n ContentType: newAsset.getContentType(),\n Body: await newAsset.getContents()\n });\n\n console.log(`Return the resized asset`, {\n key: transformedAssetKey,\n size: newAsset.getSize()\n });\n\n return newAsset;\n }\n }\n\n return asset;\n }\n\n private async optimizeAsset(asset: Asset) {\n const { s3, bucket } = this.params;\n\n console.log(\"Optimize asset\", {\n id: asset.getId(),\n key: asset.getKey(),\n size: asset.getSize(),\n type: asset.getContentType()\n });\n\n const assetKey = new AssetKeyGenerator(asset);\n const optimizedAssetKey = assetKey.getOptimizedImageKey();\n\n try {\n const { Body } = await s3.getObject({\n Bucket: bucket,\n Key: optimizedAssetKey\n });\n\n if (!Body) {\n throw new Error(`Missing image body!`);\n }\n\n console.log(\"Return a previously optimized asset\", optimizedAssetKey);\n\n const buffer = Buffer.from(await Body.transformToByteArray());\n\n const newAsset = asset.withProps({ size: buffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => buffer));\n\n return newAsset;\n } catch {\n console.log(\"Create an optimized version of the original asset\", asset.getKey());\n // If not found, create an optimized version of the original asset.\n const buffer = await asset.getContents();\n\n const optimizationMap: Record<string, ((buffer: Buffer) => sharp.Sharp) | undefined> = {\n \"image/png\": (buffer: Buffer) => this.optimizePng(buffer),\n \"image/jpeg\": (buffer: Buffer) => this.optimizeJpeg(buffer),\n \"image/jpg\": (buffer: Buffer) => this.optimizeJpeg(buffer)\n };\n\n const optimization = optimizationMap[asset.getContentType()];\n\n if (!optimization) {\n console.log(`No optimizations defined for ${asset.getContentType()}`);\n return asset;\n }\n\n const optimizedBuffer = await optimization(buffer).toBuffer();\n\n console.log(\"Optimized asset size\", optimizedBuffer.length);\n\n const newAsset = asset.withProps({ size: optimizedBuffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => optimizedBuffer));\n\n await s3.putObject({\n Bucket: bucket,\n Key: optimizedAssetKey,\n ContentType: newAsset.getContentType(),\n Body: await newAsset.getContents()\n });\n\n return newAsset;\n }\n }\n\n private isAssetAnimated(asset: Asset) {\n return [\"gif\", \"webp\"].includes(asset.getExtension());\n }\n\n private optimizePng(buffer: Buffer) {\n return sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .png({ compressionLevel: 9, adaptiveFiltering: true, force: true })\n .withMetadata();\n }\n\n private optimizeJpeg(buffer: Buffer) {\n return sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .withMetadata()\n .toFormat(\"jpeg\", { quality: 90 });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/SharpTransform.js","sources":["../../../src/assetDelivery/s3/SharpTransform.ts"],"sourcesContent":["import sharp from \"sharp\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n Asset,\n AssetRequest,\n AssetRequestOptions,\n AssetTransformationStrategy\n} from \"@webiny/api-file-manager\";\nimport { WidthCollection } from \"./transformation/WidthCollection.js\";\nimport * as utils from \"./transformation/utils.js\";\nimport { CallableContentsReader } from \"./transformation/CallableContentsReader.js\";\nimport { AssetKeyGenerator } from \"./transformation/AssetKeyGenerator.js\";\n\ninterface SharpTransformationParams {\n s3: S3;\n bucket: string;\n imageResizeWidths: number[];\n}\n\nexport class SharpTransform implements AssetTransformationStrategy {\n private readonly params: SharpTransformationParams;\n\n constructor(params: SharpTransformationParams) {\n this.params = params;\n }\n\n async transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset> {\n if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(asset.getExtension())) {\n console.log(\n `Transformations/optimizations of ${asset.getContentType()} assets are not supported. Skipping.`\n );\n return asset;\n }\n\n // `original` is part of the request, but it won't even get to this point in the execution.\n // oxlint-disable-next-line typescript/no-unused-vars\n const { original, ...options } = assetRequest.getOptions();\n\n const transformedAsset = asset.clone();\n\n if (Object.keys(options).length > 0) {\n // Transformations were requested.\n return this.transformAsset(transformedAsset, options);\n }\n\n // Return an optimized asset.\n return this.optimizeAsset(transformedAsset);\n }\n\n private async transformAsset(asset: Asset, options: Omit<AssetRequestOptions, \"original\">) {\n if (options.width) {\n const { s3, bucket } = this.params;\n\n const assetKey = new AssetKeyGenerator(asset);\n const transformedAssetKey = assetKey.getTransformedImageKey(options);\n\n try {\n const { Body } = await s3.getObject({\n Bucket: bucket,\n Key: transformedAssetKey\n });\n\n if (!Body) {\n throw new Error(`Missing image body!`);\n }\n\n const buffer = Buffer.from(await Body.transformToByteArray());\n\n const newAsset = asset.withProps({ size: buffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => buffer));\n\n console.log(`Return a previously transformed asset`, {\n key: transformedAssetKey,\n size: newAsset.getSize()\n });\n\n return newAsset;\n } catch {\n const optimizedImage = await this.optimizeAsset(asset);\n\n const widths = new WidthCollection(this.params.imageResizeWidths);\n const width = widths.getClosestOrMax(options.width);\n\n /**\n * `width` is the only transformation we currently support.\n */\n console.log(`Resize the asset (width: ${width})`);\n const buffer = await optimizedImage.getContents();\n const transformedBuffer = await sharp(buffer, {\n animated: this.isAssetAnimated(asset)\n })\n .withMetadata()\n .resize({ width, withoutEnlargement: true })\n .toBuffer();\n\n /**\n * Transformations are applied to the optimized image.\n */\n const newAsset = asset.withProps({ size: transformedBuffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => transformedBuffer));\n\n await s3.putObject({\n Bucket: bucket,\n Key: transformedAssetKey,\n ContentType: newAsset.getContentType(),\n Body: await newAsset.getContents()\n });\n\n console.log(`Return the resized asset`, {\n key: transformedAssetKey,\n size: newAsset.getSize()\n });\n\n return newAsset;\n }\n }\n\n return asset;\n }\n\n private async optimizeAsset(asset: Asset) {\n const { s3, bucket } = this.params;\n\n console.log(\"Optimize asset\", {\n id: asset.getId(),\n key: asset.getKey(),\n size: asset.getSize(),\n type: asset.getContentType()\n });\n\n const assetKey = new AssetKeyGenerator(asset);\n const optimizedAssetKey = assetKey.getOptimizedImageKey();\n\n try {\n const { Body } = await s3.getObject({\n Bucket: bucket,\n Key: optimizedAssetKey\n });\n\n if (!Body) {\n throw new Error(`Missing image body!`);\n }\n\n console.log(\"Return a previously optimized asset\", optimizedAssetKey);\n\n const buffer = Buffer.from(await Body.transformToByteArray());\n\n const newAsset = asset.withProps({ size: buffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => buffer));\n\n return newAsset;\n } catch {\n console.log(\"Create an optimized version of the original asset\", asset.getKey());\n // If not found, create an optimized version of the original asset.\n const buffer = await asset.getContents();\n\n const optimizationMap: Record<string, ((buffer: Buffer) => sharp.Sharp) | undefined> = {\n \"image/png\": (buffer: Buffer) => this.optimizePng(buffer),\n \"image/jpeg\": (buffer: Buffer) => this.optimizeJpeg(buffer),\n \"image/jpg\": (buffer: Buffer) => this.optimizeJpeg(buffer)\n };\n\n const optimization = optimizationMap[asset.getContentType()];\n\n if (!optimization) {\n console.log(`No optimizations defined for ${asset.getContentType()}`);\n return asset;\n }\n\n const optimizedBuffer = await optimization(buffer).toBuffer();\n\n console.log(\"Optimized asset size\", optimizedBuffer.length);\n\n const newAsset = asset.withProps({ size: optimizedBuffer.length });\n newAsset.setContentsReader(new CallableContentsReader(() => optimizedBuffer));\n\n await s3.putObject({\n Bucket: bucket,\n Key: optimizedAssetKey,\n ContentType: newAsset.getContentType(),\n Body: await newAsset.getContents()\n });\n\n return newAsset;\n }\n }\n\n private isAssetAnimated(asset: Asset) {\n return [\"gif\", \"webp\"].includes(asset.getExtension());\n }\n\n private optimizePng(buffer: Buffer) {\n return sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .png({ compressionLevel: 9, adaptiveFiltering: true, force: true })\n .withMetadata();\n }\n\n private optimizeJpeg(buffer: Buffer) {\n return sharp(buffer)\n .resize({ width: 2560, withoutEnlargement: true, fit: \"inside\" })\n .withMetadata()\n .toFormat(\"jpeg\", { quality: 90 });\n }\n}\n"],"names":["SharpTransform","params","assetRequest","asset","utils","console","original","options","transformedAsset","Object","s3","bucket","assetKey","AssetKeyGenerator","transformedAssetKey","Body","Error","buffer","Buffer","newAsset","CallableContentsReader","optimizedImage","widths","WidthCollection","width","transformedBuffer","sharp","optimizedAssetKey","optimizationMap","optimization","optimizedBuffer"],"mappings":"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"}
@@ -1,20 +1,21 @@
1
- import * as newUtils from "./utils.js";
2
- export class AssetKeyGenerator {
3
- constructor(asset) {
4
- this.asset = asset;
5
- this.utils = newUtils;
6
- }
7
- getOptimizedImageKey() {
8
- return this.utils.getImageKey({
9
- key: this.asset.getKey()
10
- });
11
- }
12
- getTransformedImageKey(transformations) {
13
- return this.utils.getImageKey({
14
- key: this.asset.getKey(),
15
- transformations
16
- });
17
- }
1
+ import * as __rspack_external__utils_js_d88b7fe1 from "./utils.js";
2
+ class AssetKeyGenerator {
3
+ constructor(asset){
4
+ this.asset = asset;
5
+ this.utils = __rspack_external__utils_js_d88b7fe1;
6
+ }
7
+ getOptimizedImageKey() {
8
+ return this.utils.getImageKey({
9
+ key: this.asset.getKey()
10
+ });
11
+ }
12
+ getTransformedImageKey(transformations) {
13
+ return this.utils.getImageKey({
14
+ key: this.asset.getKey(),
15
+ transformations
16
+ });
17
+ }
18
18
  }
19
+ export { AssetKeyGenerator };
19
20
 
20
21
  //# sourceMappingURL=AssetKeyGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["newUtils","AssetKeyGenerator","constructor","asset","utils","getOptimizedImageKey","getImageKey","key","getKey","getTransformedImageKey","transformations"],"sources":["AssetKeyGenerator.ts"],"sourcesContent":["import type { Asset } from \"@webiny/api-file-manager\";\nimport * as newUtils from \"./utils.js\";\n\nexport class AssetKeyGenerator {\n private utils: typeof newUtils;\n private asset: Asset;\n\n constructor(asset: Asset) {\n this.asset = asset;\n this.utils = newUtils;\n }\n\n getOptimizedImageKey() {\n return this.utils.getImageKey({ key: this.asset.getKey() });\n }\n getTransformedImageKey(transformations: Record<string, any>) {\n return this.utils.getImageKey({ key: this.asset.getKey(), transformations });\n }\n}\n"],"mappings":"AACA,OAAO,KAAKA,QAAQ;AAEpB,OAAO,MAAMC,iBAAiB,CAAC;EAI3BC,WAAWA,CAACC,KAAY,EAAE;IACtB,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,KAAK,GAAGJ,QAAQ;EACzB;EAEAK,oBAAoBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACD,KAAK,CAACE,WAAW,CAAC;MAAEC,GAAG,EAAE,IAAI,CAACJ,KAAK,CAACK,MAAM,CAAC;IAAE,CAAC,CAAC;EAC/D;EACAC,sBAAsBA,CAACC,eAAoC,EAAE;IACzD,OAAO,IAAI,CAACN,KAAK,CAACE,WAAW,CAAC;MAAEC,GAAG,EAAE,IAAI,CAACJ,KAAK,CAACK,MAAM,CAAC,CAAC;MAAEE;IAAgB,CAAC,CAAC;EAChF;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/transformation/AssetKeyGenerator.js","sources":["../../../../src/assetDelivery/s3/transformation/AssetKeyGenerator.ts"],"sourcesContent":["import type { Asset } from \"@webiny/api-file-manager\";\nimport * as newUtils from \"./utils.js\";\n\nexport class AssetKeyGenerator {\n private utils: typeof newUtils;\n private asset: Asset;\n\n constructor(asset: Asset) {\n this.asset = asset;\n this.utils = newUtils;\n }\n\n getOptimizedImageKey() {\n return this.utils.getImageKey({ key: this.asset.getKey() });\n }\n getTransformedImageKey(transformations: Record<string, any>) {\n return this.utils.getImageKey({ key: this.asset.getKey(), transformations });\n }\n}\n"],"names":["AssetKeyGenerator","asset","newUtils","transformations"],"mappings":";AAGO,MAAMA;IAIT,YAAYC,KAAY,CAAE;QACtB,IAAI,CAAC,KAAK,GAAGA;QACb,IAAI,CAAC,KAAK,GAAGC;IACjB;IAEA,uBAAuB;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;QAAG;IAC7D;IACA,uBAAuBC,eAAoC,EAAE;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAIA;QAAgB;IAC9E;AACJ"}
@@ -1,10 +1,11 @@
1
- export class CallableContentsReader {
2
- constructor(callable) {
3
- this.callable = callable;
4
- }
5
- async read() {
6
- return this.callable();
7
- }
1
+ class CallableContentsReader {
2
+ constructor(callable){
3
+ this.callable = callable;
4
+ }
5
+ async read() {
6
+ return this.callable();
7
+ }
8
8
  }
9
+ export { CallableContentsReader };
9
10
 
10
11
  //# sourceMappingURL=CallableContentsReader.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CallableContentsReader","constructor","callable","read"],"sources":["CallableContentsReader.ts"],"sourcesContent":["import type { AssetContentsReader } from \"@webiny/api-file-manager\";\n\ninterface ContentsCallable {\n (): Promise<Buffer> | Buffer;\n}\n\nexport class CallableContentsReader implements AssetContentsReader {\n private readonly callable: ContentsCallable;\n\n constructor(callable: ContentsCallable) {\n this.callable = callable;\n }\n\n async read(): Promise<Buffer> {\n return this.callable();\n }\n}\n"],"mappings":"AAMA,OAAO,MAAMA,sBAAsB,CAAgC;EAG/DC,WAAWA,CAACC,QAA0B,EAAE;IACpC,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC5B;EAEA,MAAMC,IAAIA,CAAA,EAAoB;IAC1B,OAAO,IAAI,CAACD,QAAQ,CAAC,CAAC;EAC1B;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/transformation/CallableContentsReader.js","sources":["../../../../src/assetDelivery/s3/transformation/CallableContentsReader.ts"],"sourcesContent":["import type { AssetContentsReader } from \"@webiny/api-file-manager\";\n\ninterface ContentsCallable {\n (): Promise<Buffer> | Buffer;\n}\n\nexport class CallableContentsReader implements AssetContentsReader {\n private readonly callable: ContentsCallable;\n\n constructor(callable: ContentsCallable) {\n this.callable = callable;\n }\n\n async read(): Promise<Buffer> {\n return this.callable();\n }\n}\n"],"names":["CallableContentsReader","callable"],"mappings":"AAMO,MAAMA;IAGT,YAAYC,QAA0B,CAAE;QACpC,IAAI,CAAC,QAAQ,GAAGA;IACpB;IAEA,MAAM,OAAwB;QAC1B,OAAO,IAAI,CAAC,QAAQ;IACxB;AACJ"}
@@ -1,20 +1,19 @@
1
- export class WidthCollection {
2
- constructor(values) {
3
- this.values = values.sort((a, b) => a - b);
4
- }
5
- max() {
6
- return Math.max(...this.values);
7
- }
8
- min() {
9
- return Math.min(...this.values);
10
- }
11
- getClosestOrMax(value) {
12
- if (!value) {
13
- return this.max();
1
+ class WidthCollection {
2
+ constructor(values){
3
+ this.values = values.sort((a, b)=>a - b);
4
+ }
5
+ max() {
6
+ return Math.max(...this.values);
7
+ }
8
+ min() {
9
+ return Math.min(...this.values);
10
+ }
11
+ getClosestOrMax(value) {
12
+ if (!value) return this.max();
13
+ const gteGivenValue = this.values.filter((w)=>w >= value);
14
+ return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
14
15
  }
15
- const gteGivenValue = this.values.filter(w => w >= value);
16
- return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
17
- }
18
16
  }
17
+ export { WidthCollection };
19
18
 
20
19
  //# sourceMappingURL=WidthCollection.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["WidthCollection","constructor","values","sort","a","b","max","Math","min","getClosestOrMax","value","gteGivenValue","filter","w","length"],"sources":["WidthCollection.ts"],"sourcesContent":["export class WidthCollection {\n private readonly values: number[];\n\n constructor(values: number[]) {\n this.values = values.sort((a, b) => a - b);\n }\n\n max() {\n return Math.max(...this.values);\n }\n\n min() {\n return Math.min(...this.values);\n }\n\n getClosestOrMax(value: number | undefined): number {\n if (!value) {\n return this.max();\n }\n const gteGivenValue = this.values.filter(w => w >= value);\n return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAe,CAAC;EAGzBC,WAAWA,CAACC,MAAgB,EAAE;IAC1B,IAAI,CAACA,MAAM,GAAGA,MAAM,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;EAC9C;EAEAC,GAAGA,CAAA,EAAG;IACF,OAAOC,IAAI,CAACD,GAAG,CAAC,GAAG,IAAI,CAACJ,MAAM,CAAC;EACnC;EAEAM,GAAGA,CAAA,EAAG;IACF,OAAOD,IAAI,CAACC,GAAG,CAAC,GAAG,IAAI,CAACN,MAAM,CAAC;EACnC;EAEAO,eAAeA,CAACC,KAAyB,EAAU;IAC/C,IAAI,CAACA,KAAK,EAAE;MACR,OAAO,IAAI,CAACJ,GAAG,CAAC,CAAC;IACrB;IACA,MAAMK,aAAa,GAAG,IAAI,CAACT,MAAM,CAACU,MAAM,CAACC,CAAC,IAAIA,CAAC,IAAIH,KAAK,CAAC;IACzD,OAAOC,aAAa,CAACG,MAAM,GAAG,CAAC,GAAGH,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAACL,GAAG,CAAC,CAAC;EACnE;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/transformation/WidthCollection.js","sources":["../../../../src/assetDelivery/s3/transformation/WidthCollection.ts"],"sourcesContent":["export class WidthCollection {\n private readonly values: number[];\n\n constructor(values: number[]) {\n this.values = values.sort((a, b) => a - b);\n }\n\n max() {\n return Math.max(...this.values);\n }\n\n min() {\n return Math.min(...this.values);\n }\n\n getClosestOrMax(value: number | undefined): number {\n if (!value) {\n return this.max();\n }\n const gteGivenValue = this.values.filter(w => w >= value);\n return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();\n }\n}\n"],"names":["WidthCollection","values","a","b","Math","value","gteGivenValue","w"],"mappings":"AAAO,MAAMA;IAGT,YAAYC,MAAgB,CAAE;QAC1B,IAAI,CAAC,MAAM,GAAGA,OAAO,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IAC5C;IAEA,MAAM;QACF,OAAOC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEA,MAAM;QACF,OAAOA,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM;IAClC;IAEA,gBAAgBC,KAAyB,EAAU;QAC/C,IAAI,CAACA,OACD,OAAO,IAAI,CAAC,GAAG;QAEnB,MAAMC,gBAAgB,IAAI,CAAC,MAAM,CAAC,MAAM,CAACC,CAAAA,IAAKA,KAAKF;QACnD,OAAOC,cAAc,MAAM,GAAG,IAAIA,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG;IACjE;AACJ"}
@@ -1,36 +1,30 @@
1
- import objectHash from "object-hash";
2
- import path from "node:path";
3
- const SUPPORTED_TRANSFORMABLE_IMAGES = ["jpg", "jpeg", "png", "webp"];
4
- const parseKey = key => {
5
- const filename = path.basename(key);
6
- const dirname = path.dirname(key);
7
- return {
8
- filename,
9
- dirname
10
- };
1
+ import object_hash from "object-hash";
2
+ import node_path from "node:path";
3
+ const SUPPORTED_TRANSFORMABLE_IMAGES = [
4
+ "jpg",
5
+ "jpeg",
6
+ "png",
7
+ "webp"
8
+ ];
9
+ const parseKey = (key)=>{
10
+ const filename = node_path.basename(key);
11
+ const dirname = node_path.dirname(key);
12
+ return {
13
+ filename,
14
+ dirname
15
+ };
11
16
  };
12
- const getOptimizedImageKeyPrefix = key => {
13
- const {
14
- filename,
15
- dirname
16
- } = parseKey(key);
17
- return `${dirname}/optimized/${filename}`;
17
+ const getOptimizedImageKeyPrefix = (key)=>{
18
+ const { filename, dirname } = parseKey(key);
19
+ return `${dirname}/optimized/${filename}`;
18
20
  };
19
- const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash) => {
20
- const {
21
- filename,
22
- dirname
23
- } = parseKey(key);
24
- return `${dirname}/optimized/${transformationsHash}-${filename}`;
21
+ const getOptimizedTransformedImageKeyPrefix = (key, transformationsHash)=>{
22
+ const { filename, dirname } = parseKey(key);
23
+ return `${dirname}/optimized/${transformationsHash}-${filename}`;
25
24
  };
26
- const getImageKey = ({
27
- key,
28
- transformations
29
- }) => {
30
- if (!transformations) {
31
- return getOptimizedImageKeyPrefix(key);
32
- }
33
- return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));
25
+ const getImageKey = ({ key, transformations })=>{
26
+ if (!transformations) return getOptimizedImageKeyPrefix(key);
27
+ return getOptimizedTransformedImageKeyPrefix(key, object_hash(transformations));
34
28
  };
35
29
  export { SUPPORTED_TRANSFORMABLE_IMAGES, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
36
30
 
@@ -1 +1 @@
1
- {"version":3,"names":["objectHash","path","SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","basename","dirname","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations"],"sources":["utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${transformationsHash}-${filename}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,aAAa;AACpC,OAAOC,IAAI,MAAM,WAAW;AAE5B,MAAMC,8BAA8B,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;AAErE,MAAMC,QAAQ,GAAIC,GAAW,IAAK;EAC9B,MAAMC,QAAQ,GAAGJ,IAAI,CAACK,QAAQ,CAACF,GAAG,CAAC;EACnC,MAAMG,OAAO,GAAGN,IAAI,CAACM,OAAO,CAACH,GAAG,CAAC;EAEjC,OAAO;IAAEC,QAAQ;IAAEE;EAAQ,CAAC;AAChC,CAAC;AAED,MAAMC,0BAA0B,GAAIJ,GAAW,IAAa;EACxD,MAAM;IAAEC,QAAQ;IAAEE;EAAQ,CAAC,GAAGJ,QAAQ,CAACC,GAAG,CAAC;EAE3C,OAAO,GAAGG,OAAO,cAAcF,QAAQ,EAAE;AAC7C,CAAC;AAED,MAAMI,qCAAqC,GAAGA,CAC1CL,GAAW,EACXM,mBAA2B,KAClB;EACT,MAAM;IAAEL,QAAQ;IAAEE;EAAQ,CAAC,GAAGJ,QAAQ,CAACC,GAAG,CAAC;EAE3C,OAAO,GAAGG,OAAO,cAAcG,mBAAmB,IAAIL,QAAQ,EAAE;AACpE,CAAC;AAOD,MAAMM,WAAW,GAAGA,CAAC;EAAEP,GAAG;EAAEQ;AAAmC,CAAC,KAAa;EACzE,IAAI,CAACA,eAAe,EAAE;IAClB,OAAOJ,0BAA0B,CAACJ,GAAG,CAAC;EAC1C;EAEA,OAAOK,qCAAqC,CAACL,GAAG,EAAEJ,UAAU,CAACY,eAAe,CAAC,CAAC;AAClF,CAAC;AAED,SACIV,8BAA8B,EAC9BS,WAAW,EACXH,0BAA0B,EAC1BC,qCAAqC","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/s3/transformation/utils.js","sources":["../../../../src/assetDelivery/s3/transformation/utils.ts"],"sourcesContent":["import objectHash from \"object-hash\";\nimport path from \"node:path\";\n\nconst SUPPORTED_TRANSFORMABLE_IMAGES = [\"jpg\", \"jpeg\", \"png\", \"webp\"];\n\nconst parseKey = (key: string) => {\n const filename = path.basename(key);\n const dirname = path.dirname(key);\n\n return { filename, dirname };\n};\n\nconst getOptimizedImageKeyPrefix = (key: string): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${filename}`;\n};\n\nconst getOptimizedTransformedImageKeyPrefix = (\n key: string,\n transformationsHash: string\n): string => {\n const { filename, dirname } = parseKey(key);\n\n return `${dirname}/optimized/${transformationsHash}-${filename}`;\n};\n\ninterface GetImageKeyParams {\n key: string;\n transformations?: any;\n}\n\nconst getImageKey = ({ key, transformations }: GetImageKeyParams): string => {\n if (!transformations) {\n return getOptimizedImageKeyPrefix(key);\n }\n\n return getOptimizedTransformedImageKeyPrefix(key, objectHash(transformations));\n};\n\nexport {\n SUPPORTED_TRANSFORMABLE_IMAGES,\n getImageKey,\n getOptimizedImageKeyPrefix,\n getOptimizedTransformedImageKeyPrefix\n};\n"],"names":["SUPPORTED_TRANSFORMABLE_IMAGES","parseKey","key","filename","path","dirname","getOptimizedImageKeyPrefix","getOptimizedTransformedImageKeyPrefix","transformationsHash","getImageKey","transformations","objectHash"],"mappings":";;AAGA,MAAMA,iCAAiC;IAAC;IAAO;IAAQ;IAAO;CAAO;AAErE,MAAMC,WAAW,CAACC;IACd,MAAMC,WAAWC,UAAAA,QAAa,CAACF;IAC/B,MAAMG,UAAUD,UAAAA,OAAY,CAACF;IAE7B,OAAO;QAAEC;QAAUE;IAAQ;AAC/B;AAEA,MAAMC,6BAA6B,CAACJ;IAChC,MAAM,EAAEC,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEF,UAAU;AAC7C;AAEA,MAAMI,wCAAwC,CAC1CL,KACAM;IAEA,MAAM,EAAEL,QAAQ,EAAEE,OAAO,EAAE,GAAGJ,SAASC;IAEvC,OAAO,GAAGG,QAAQ,WAAW,EAAEG,oBAAoB,CAAC,EAAEL,UAAU;AACpE;AAOA,MAAMM,cAAc,CAAC,EAAEP,GAAG,EAAEQ,eAAe,EAAqB;IAC5D,IAAI,CAACA,iBACD,OAAOJ,2BAA2BJ;IAGtC,OAAOK,sCAAsCL,KAAKS,YAAWD;AACjE"}
@@ -1,17 +1,18 @@
1
- export class ObjectKey {
2
- static from(key) {
3
- return new ObjectKey(key);
4
- }
5
- constructor(key) {
6
- this.bucketKey = key;
7
- }
8
- id() {
9
- const [id] = this.relativeKey().split("/");
10
- return id;
11
- }
12
- relativeKey() {
13
- return this.bucketKey.replace(/^tenants\/[^/]+\/files\//, "");
14
- }
1
+ class ObjectKey {
2
+ static from(key) {
3
+ return new ObjectKey(key);
4
+ }
5
+ constructor(key){
6
+ this.bucketKey = key;
7
+ }
8
+ id() {
9
+ const [id] = this.relativeKey().split("/");
10
+ return id;
11
+ }
12
+ relativeKey() {
13
+ return this.bucketKey.replace(/^tenants\/[^/]+\/files\//, "");
14
+ }
15
15
  }
16
+ export { ObjectKey };
16
17
 
17
18
  //# sourceMappingURL=ObjectKey.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ObjectKey","from","key","constructor","bucketKey","id","relativeKey","split","replace"],"sources":["ObjectKey.ts"],"sourcesContent":["export class ObjectKey {\n private bucketKey: string;\n\n static from(key: string) {\n return new ObjectKey(key);\n }\n\n private constructor(key: string) {\n this.bucketKey = key;\n }\n\n id() {\n const [id] = this.relativeKey().split(\"/\");\n return id;\n }\n\n relativeKey() {\n return this.bucketKey.replace(/^tenants\\/[^/]+\\/files\\//, \"\");\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,SAAS,CAAC;EAGnB,OAAOC,IAAIA,CAACC,GAAW,EAAE;IACrB,OAAO,IAAIF,SAAS,CAACE,GAAG,CAAC;EAC7B;EAEQC,WAAWA,CAACD,GAAW,EAAE;IAC7B,IAAI,CAACE,SAAS,GAAGF,GAAG;EACxB;EAEAG,EAAEA,CAAA,EAAG;IACD,MAAM,CAACA,EAAE,CAAC,GAAG,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,GAAG,CAAC;IAC1C,OAAOF,EAAE;EACb;EAEAC,WAAWA,CAAA,EAAG;IACV,OAAO,IAAI,CAACF,SAAS,CAACI,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;EACjE;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"assetDelivery/threatDetection/ObjectKey.js","sources":["../../../src/assetDelivery/threatDetection/ObjectKey.ts"],"sourcesContent":["export class ObjectKey {\n private bucketKey: string;\n\n static from(key: string) {\n return new ObjectKey(key);\n }\n\n private constructor(key: string) {\n this.bucketKey = key;\n }\n\n id() {\n const [id] = this.relativeKey().split(\"/\");\n return id;\n }\n\n relativeKey() {\n return this.bucketKey.replace(/^tenants\\/[^/]+\\/files\\//, \"\");\n }\n}\n"],"names":["ObjectKey","key","id"],"mappings":"AAAO,MAAMA;IAGT,OAAO,KAAKC,GAAW,EAAE;QACrB,OAAO,IAAID,UAAUC;IACzB;IAEA,YAAoBA,GAAW,CAAE;QAC7B,IAAI,CAAC,SAAS,GAAGA;IACrB;IAEA,KAAK;QACD,MAAM,CAACC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACtC,OAAOA;IACX;IAEA,cAAc;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,4BAA4B;IAC9D;AACJ"}