@webiny/api-file-manager-s3 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assetDelivery/assetDeliveryConfig.d.ts +2 -0
- package/assetDelivery/assetDeliveryConfig.js +52 -0
- package/assetDelivery/assetDeliveryConfig.js.map +1 -0
- package/assetDelivery/createAssetDelivery.d.ts +3 -0
- package/assetDelivery/createAssetDelivery.js +30 -0
- package/assetDelivery/createAssetDelivery.js.map +1 -0
- package/assetDelivery/createCustomAssetDelivery.d.ts +12 -0
- package/assetDelivery/createCustomAssetDelivery.js +28 -0
- package/assetDelivery/createCustomAssetDelivery.js.map +1 -0
- package/assetDelivery/customAssets/CustomAsset.d.ts +6 -0
- package/assetDelivery/customAssets/CustomAsset.js +14 -0
- package/assetDelivery/customAssets/CustomAsset.js.map +1 -0
- package/assetDelivery/customAssets/CustomAssetProcessor.d.ts +10 -0
- package/assetDelivery/customAssets/CustomAssetProcessor.js +25 -0
- package/assetDelivery/customAssets/CustomAssetProcessor.js.map +1 -0
- package/assetDelivery/customAssets/S3CustomAssetResolver.d.ts +15 -0
- package/assetDelivery/customAssets/S3CustomAssetResolver.js +90 -0
- package/assetDelivery/customAssets/S3CustomAssetResolver.js.map +1 -0
- package/assetDelivery/customAssets/customAssetDeliveryConfig.d.ts +1 -0
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js +30 -0
- package/assetDelivery/customAssets/customAssetDeliveryConfig.js.map +1 -0
- package/assetDelivery/index.d.ts +9 -0
- package/assetDelivery/index.js +70 -0
- package/assetDelivery/index.js.map +1 -0
- package/assetDelivery/s3/S3AssetMetadataReader.d.ts +15 -0
- package/assetDelivery/s3/S3AssetMetadataReader.js +36 -0
- package/assetDelivery/s3/S3AssetMetadataReader.js.map +1 -0
- package/assetDelivery/s3/S3AssetResolver.d.ts +9 -0
- package/assetDelivery/s3/S3AssetResolver.js +37 -0
- package/assetDelivery/s3/S3AssetResolver.js.map +1 -0
- package/assetDelivery/s3/S3ContentsReader.d.ts +10 -0
- package/assetDelivery/s3/S3ContentsReader.js +27 -0
- package/assetDelivery/s3/S3ContentsReader.js.map +1 -0
- package/assetDelivery/s3/S3ErrorAssetReply.d.ts +4 -0
- package/assetDelivery/s3/S3ErrorAssetReply.js +20 -0
- package/assetDelivery/s3/S3ErrorAssetReply.js.map +1 -0
- package/assetDelivery/s3/S3OutputStrategy.d.ts +15 -0
- package/assetDelivery/s3/S3OutputStrategy.js +40 -0
- package/assetDelivery/s3/S3OutputStrategy.js.map +1 -0
- package/assetDelivery/s3/S3RedirectAssetReply.d.ts +4 -0
- package/assetDelivery/s3/S3RedirectAssetReply.js +23 -0
- package/assetDelivery/s3/S3RedirectAssetReply.js.map +1 -0
- package/assetDelivery/s3/S3StreamAssetReply.d.ts +5 -0
- package/assetDelivery/s3/S3StreamAssetReply.js +23 -0
- package/assetDelivery/s3/S3StreamAssetReply.js.map +1 -0
- package/assetDelivery/s3/SharpTransform.d.ts +18 -0
- package/assetDelivery/s3/SharpTransform.js +192 -0
- package/assetDelivery/s3/SharpTransform.js.map +1 -0
- package/assetDelivery/s3/transformation/AssetKeyGenerator.d.ts +8 -0
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js +29 -0
- package/assetDelivery/s3/transformation/AssetKeyGenerator.js.map +1 -0
- package/assetDelivery/s3/transformation/CallableContentsReader.d.ts +12 -0
- package/assetDelivery/s3/transformation/CallableContentsReader.js +17 -0
- package/assetDelivery/s3/transformation/CallableContentsReader.js.map +1 -0
- package/assetDelivery/s3/transformation/WidthCollection.d.ts +7 -0
- package/assetDelivery/s3/transformation/WidthCollection.js +27 -0
- package/assetDelivery/s3/transformation/WidthCollection.js.map +1 -0
- package/assetDelivery/s3/transformation/legacyUtils.d.ts +12 -0
- package/assetDelivery/s3/transformation/legacyUtils.js +34 -0
- package/assetDelivery/s3/transformation/legacyUtils.js.map +1 -0
- package/assetDelivery/s3/transformation/utils.d.ts +11 -0
- package/assetDelivery/s3/transformation/utils.js +33 -0
- package/assetDelivery/s3/transformation/utils.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js +62 -0
- package/assetDelivery/threatDetection/createThreatDetectionEventHandler.js.map +1 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.d.ts +2 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js +13 -0
- package/assetDelivery/threatDetection/createThreatDetectionPluginLoader.js.map +1 -0
- package/assetDelivery/threatDetection/index.d.ts +2 -0
- package/assetDelivery/threatDetection/index.js +29 -0
- package/assetDelivery/threatDetection/index.js.map +1 -0
- package/assetDelivery/threatDetection/processThreatScanResult.d.ts +2 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js +66 -0
- package/assetDelivery/threatDetection/processThreatScanResult.js.map +1 -0
- package/assetDelivery/threatDetection/types.d.ts +13 -0
- package/assetDelivery/threatDetection/types.js +7 -0
- package/assetDelivery/threatDetection/types.js.map +1 -0
- package/assetDelivery/types.d.ts +11 -0
- package/assetDelivery/types.js +7 -0
- package/assetDelivery/types.js.map +1 -0
- package/flushCdnCache/CdnPathsGenerator.d.ts +4 -0
- package/flushCdnCache/CdnPathsGenerator.js +14 -0
- package/flushCdnCache/CdnPathsGenerator.js.map +1 -0
- package/flushCdnCache/InvalidateCacheTask.d.ts +18 -0
- package/flushCdnCache/InvalidateCacheTask.js +78 -0
- package/flushCdnCache/InvalidateCacheTask.js.map +1 -0
- package/flushCdnCache/flushCacheOnFileDelete.d.ts +3 -0
- package/flushCdnCache/flushCacheOnFileDelete.js +34 -0
- package/flushCdnCache/flushCacheOnFileDelete.js.map +1 -0
- package/flushCdnCache/flushCacheOnFileUpdate.d.ts +3 -0
- package/flushCdnCache/flushCacheOnFileUpdate.js +40 -0
- package/flushCdnCache/flushCacheOnFileUpdate.js.map +1 -0
- package/flushCdnCache/index.d.ts +1 -0
- package/flushCdnCache/index.js +15 -0
- package/flushCdnCache/index.js.map +1 -0
- package/flushCdnCache/invalidateCacheTaskDefinition.d.ts +2 -0
- package/flushCdnCache/invalidateCacheTaskDefinition.js +22 -0
- package/flushCdnCache/invalidateCacheTaskDefinition.js.map +1 -0
- package/index.d.ts +4 -1
- package/index.js +27 -7
- package/index.js.map +1 -0
- package/multiPartUpload/CompleteMultiPartUploadUseCase.d.ts +15 -0
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js +65 -0
- package/multiPartUpload/CompleteMultiPartUploadUseCase.js.map +1 -0
- package/multiPartUpload/CreateMultiPartUploadUseCase.d.ts +20 -0
- package/multiPartUpload/CreateMultiPartUploadUseCase.js +48 -0
- package/multiPartUpload/CreateMultiPartUploadUseCase.js.map +1 -0
- package/package.json +29 -16
- package/plugins/addFileMetadata.d.ts +10 -0
- package/plugins/addFileMetadata.js +67 -0
- package/plugins/addFileMetadata.js.map +1 -0
- package/plugins/checkPermissions.d.ts +4 -0
- package/plugins/checkPermissions.js +44 -0
- package/plugins/checkPermissions.js.map +1 -0
- package/plugins/fileStorageS3.d.ts +2 -2
- package/plugins/fileStorageS3.js +47 -46
- package/plugins/fileStorageS3.js.map +1 -0
- package/plugins/graphqlFileStorageS3.d.ts +2 -2
- package/plugins/graphqlFileStorageS3.js +137 -59
- package/plugins/graphqlFileStorageS3.js.map +1 -0
- package/types.d.ts +20 -0
- package/types.js +7 -1
- package/types.js.map +1 -0
- package/utils/FileExtension.d.ts +6 -0
- package/utils/FileExtension.js +24 -0
- package/utils/FileExtension.js.map +1 -0
- package/utils/FileKey.d.ts +11 -0
- package/utils/FileKey.js +33 -0
- package/utils/FileKey.js.map +1 -0
- package/utils/FileKey.test.d.ts +1 -0
- package/utils/FileKey.test.js +60 -0
- package/utils/FileKey.test.js.map +1 -0
- package/utils/FileNormalizer.d.ts +18 -0
- package/utils/FileNormalizer.js +49 -0
- package/utils/FileNormalizer.js.map +1 -0
- package/utils/FileUploadModifier.d.ts +30 -0
- package/utils/FileUploadModifier.js +49 -0
- package/utils/FileUploadModifier.js.map +1 -0
- package/utils/createFileNormalizerFromContext.d.ts +3 -0
- package/utils/createFileNormalizerFromContext.js +15 -0
- package/utils/createFileNormalizerFromContext.js.map +1 -0
- package/utils/getPresignedPostPayload.d.ts +3 -11
- package/utils/getPresignedPostPayload.js +14 -55
- package/utils/getPresignedPostPayload.js.map +1 -0
- package/utils/mimeTypes.d.ts +5 -0
- package/utils/mimeTypes.js +23 -0
- package/utils/mimeTypes.js.map +1 -0
- package/utils/uploadFileToS3.d.ts +5 -1
- package/utils/uploadFileToS3.js +9 -12
- package/utils/uploadFileToS3.js.map +1 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.S3ContentsReader = void 0;
|
|
7
|
+
class S3ContentsReader {
|
|
8
|
+
constructor(s3, bucket) {
|
|
9
|
+
this.s3 = s3;
|
|
10
|
+
this.bucket = bucket;
|
|
11
|
+
}
|
|
12
|
+
async read(asset) {
|
|
13
|
+
const {
|
|
14
|
+
Body
|
|
15
|
+
} = await this.s3.getObject({
|
|
16
|
+
Bucket: this.bucket,
|
|
17
|
+
Key: asset.getKey()
|
|
18
|
+
});
|
|
19
|
+
if (!Body) {
|
|
20
|
+
throw Error(`Unable to read ${asset.getKey()}!`);
|
|
21
|
+
}
|
|
22
|
+
return Buffer.from(await Body.transformToByteArray());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.S3ContentsReader = S3ContentsReader;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=S3ContentsReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["S3ContentsReader","constructor","s3","bucket","read","asset","Body","getObject","Bucket","Key","getKey","Error","Buffer","from","transformToByteArray","exports"],"sources":["S3ContentsReader.ts"],"sourcesContent":["import type { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport type { Asset, AssetContentsReader } from \"@webiny/api-file-manager\";\n\nexport class S3ContentsReader implements AssetContentsReader {\n private s3: S3;\n private readonly bucket: string;\n\n constructor(s3: S3, bucket: string) {\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async read(asset: Asset): Promise<Buffer> {\n const { Body } = await this.s3.getObject({\n Bucket: this.bucket,\n Key: asset.getKey()\n });\n\n if (!Body) {\n throw Error(`Unable to read ${asset.getKey()}!`);\n }\n\n return Buffer.from(await Body.transformToByteArray());\n }\n}\n"],"mappings":";;;;;;AAGO,MAAMA,gBAAgB,CAAgC;EAIzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAE;IAChC,IAAI,CAACD,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMC,IAAIA,CAACC,KAAY,EAAmB;IACtC,MAAM;MAAEC;IAAK,CAAC,GAAG,MAAM,IAAI,CAACJ,EAAE,CAACK,SAAS,CAAC;MACrCC,MAAM,EAAE,IAAI,CAACL,MAAM;MACnBM,GAAG,EAAEJ,KAAK,CAACK,MAAM,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,CAACJ,IAAI,EAAE;MACP,MAAMK,KAAK,CAAC,kBAAkBN,KAAK,CAACK,MAAM,CAAC,CAAC,GAAG,CAAC;IACpD;IAEA,OAAOE,MAAM,CAACC,IAAI,CAAC,MAAMP,IAAI,CAACQ,oBAAoB,CAAC,CAAC,CAAC;EACzD;AACJ;AAACC,OAAA,CAAAf,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.S3ErrorAssetReply = void 0;
|
|
7
|
+
var _apiFileManager = require("@webiny/api-file-manager");
|
|
8
|
+
class S3ErrorAssetReply extends _apiFileManager.AssetReply {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super({
|
|
11
|
+
code: 400,
|
|
12
|
+
body: () => ({
|
|
13
|
+
error: message
|
|
14
|
+
})
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.S3ErrorAssetReply = S3ErrorAssetReply;
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=S3ErrorAssetReply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_apiFileManager","require","S3ErrorAssetReply","AssetReply","constructor","message","code","body","error","exports"],"sources":["S3ErrorAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\n\nexport class S3ErrorAssetReply extends AssetReply {\n constructor(message: string) {\n super({\n code: 400,\n body: () => ({ error: message })\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAEO,MAAMC,iBAAiB,SAASC,0BAAU,CAAC;EAC9CC,WAAWA,CAACC,OAAe,EAAE;IACzB,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,IAAI,EAAEA,CAAA,MAAO;QAAEC,KAAK,EAAEH;MAAQ,CAAC;IACnC,CAAC,CAAC;EACN;AACJ;AAACI,OAAA,CAAAP,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Asset, AssetOutputStrategy, AssetReply } from "@webiny/api-file-manager";
|
|
2
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
3
|
+
/**
|
|
4
|
+
* This strategy outputs an asset taking into account the size of the asset contents.
|
|
5
|
+
* If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.
|
|
6
|
+
*/
|
|
7
|
+
export declare class S3OutputStrategy implements AssetOutputStrategy {
|
|
8
|
+
private readonly s3;
|
|
9
|
+
private readonly bucket;
|
|
10
|
+
private readonly presignedUrlTtl;
|
|
11
|
+
private readonly assetStreamingMaxSize;
|
|
12
|
+
constructor(s3: S3, bucket: string, presignedUrlTtl: number, assetStreamingMaxSize: number);
|
|
13
|
+
output(asset: Asset): Promise<AssetReply>;
|
|
14
|
+
protected getPresignedUrl(asset: Asset): Promise<string>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.S3OutputStrategy = void 0;
|
|
7
|
+
var _clientS = require("@webiny/aws-sdk/client-s3");
|
|
8
|
+
var _S3RedirectAssetReply = require("./S3RedirectAssetReply");
|
|
9
|
+
var _S3StreamAssetReply = require("./S3StreamAssetReply");
|
|
10
|
+
/**
|
|
11
|
+
* This strategy outputs an asset taking into account the size of the asset contents.
|
|
12
|
+
* If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.
|
|
13
|
+
*/
|
|
14
|
+
class S3OutputStrategy {
|
|
15
|
+
constructor(s3, bucket, presignedUrlTtl, assetStreamingMaxSize) {
|
|
16
|
+
this.assetStreamingMaxSize = assetStreamingMaxSize;
|
|
17
|
+
this.presignedUrlTtl = presignedUrlTtl;
|
|
18
|
+
this.s3 = s3;
|
|
19
|
+
this.bucket = bucket;
|
|
20
|
+
}
|
|
21
|
+
async output(asset) {
|
|
22
|
+
if (asset.getSize() > this.assetStreamingMaxSize) {
|
|
23
|
+
console.log(`Asset size is greater than ${this.assetStreamingMaxSize}; redirecting to a presigned S3 URL.`);
|
|
24
|
+
return new _S3RedirectAssetReply.S3RedirectAssetReply(await this.getPresignedUrl(asset), this.presignedUrlTtl);
|
|
25
|
+
}
|
|
26
|
+
console.log(`Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`);
|
|
27
|
+
return new _S3StreamAssetReply.S3StreamAssetReply(asset);
|
|
28
|
+
}
|
|
29
|
+
getPresignedUrl(asset) {
|
|
30
|
+
return (0, _clientS.getSignedUrl)(this.s3, new _clientS.GetObjectCommand({
|
|
31
|
+
Bucket: this.bucket,
|
|
32
|
+
Key: asset.getKey()
|
|
33
|
+
}), {
|
|
34
|
+
expiresIn: this.presignedUrlTtl
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.S3OutputStrategy = S3OutputStrategy;
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=S3OutputStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_clientS","require","_S3RedirectAssetReply","_S3StreamAssetReply","S3OutputStrategy","constructor","s3","bucket","presignedUrlTtl","assetStreamingMaxSize","output","asset","getSize","console","log","S3RedirectAssetReply","getPresignedUrl","S3StreamAssetReply","getSignedUrl","GetObjectCommand","Bucket","Key","getKey","expiresIn","exports"],"sources":["S3OutputStrategy.ts"],"sourcesContent":["import type { Asset, AssetOutputStrategy, AssetReply } from \"@webiny/api-file-manager\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport { GetObjectCommand, getSignedUrl } from \"@webiny/aws-sdk/client-s3\";\nimport { S3RedirectAssetReply } from \"~/assetDelivery/s3/S3RedirectAssetReply\";\nimport { S3StreamAssetReply } from \"~/assetDelivery/s3/S3StreamAssetReply\";\n\n/**\n * This strategy outputs an asset taking into account the size of the asset contents.\n * If the asset is larger than 5MB, a presigned URL will be generated, and a redirect will happen.\n */\nexport class S3OutputStrategy implements AssetOutputStrategy {\n private readonly s3: S3;\n private readonly bucket: string;\n private readonly presignedUrlTtl: number;\n private readonly assetStreamingMaxSize: number;\n\n constructor(s3: S3, bucket: string, presignedUrlTtl: number, assetStreamingMaxSize: number) {\n this.assetStreamingMaxSize = assetStreamingMaxSize;\n this.presignedUrlTtl = presignedUrlTtl;\n this.s3 = s3;\n this.bucket = bucket;\n }\n\n async output(asset: Asset): Promise<AssetReply> {\n if (asset.getSize() > this.assetStreamingMaxSize) {\n console.log(\n `Asset size is greater than ${this.assetStreamingMaxSize}; redirecting to a presigned S3 URL.`\n );\n\n return new S3RedirectAssetReply(\n await this.getPresignedUrl(asset),\n this.presignedUrlTtl\n );\n }\n\n console.log(\n `Asset size is smaller than ${this.assetStreamingMaxSize}; streaming directly from Lambda function.`\n );\n return new S3StreamAssetReply(asset);\n }\n\n protected getPresignedUrl(asset: Asset) {\n return getSignedUrl(\n this.s3,\n new GetObjectCommand({\n Bucket: this.bucket,\n Key: asset.getKey()\n }),\n { expiresIn: this.presignedUrlTtl }\n );\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAMG,gBAAgB,CAAgC;EAMzDC,WAAWA,CAACC,EAAM,EAAEC,MAAc,EAAEC,eAAuB,EAAEC,qBAA6B,EAAE;IACxF,IAAI,CAACA,qBAAqB,GAAGA,qBAAqB;IAClD,IAAI,CAACD,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAGA,MAAM;EACxB;EAEA,MAAMG,MAAMA,CAACC,KAAY,EAAuB;IAC5C,IAAIA,KAAK,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,CAACH,qBAAqB,EAAE;MAC9CI,OAAO,CAACC,GAAG,CACP,8BAA8B,IAAI,CAACL,qBAAqB,sCAC5D,CAAC;MAED,OAAO,IAAIM,0CAAoB,CAC3B,MAAM,IAAI,CAACC,eAAe,CAACL,KAAK,CAAC,EACjC,IAAI,CAACH,eACT,CAAC;IACL;IAEAK,OAAO,CAACC,GAAG,CACP,8BAA8B,IAAI,CAACL,qBAAqB,4CAC5D,CAAC;IACD,OAAO,IAAIQ,sCAAkB,CAACN,KAAK,CAAC;EACxC;EAEUK,eAAeA,CAACL,KAAY,EAAE;IACpC,OAAO,IAAAO,qBAAY,EACf,IAAI,CAACZ,EAAE,EACP,IAAIa,yBAAgB,CAAC;MACjBC,MAAM,EAAE,IAAI,CAACb,MAAM;MACnBc,GAAG,EAAEV,KAAK,CAACW,MAAM,CAAC;IACtB,CAAC,CAAC,EACF;MAAEC,SAAS,EAAE,IAAI,CAACf;IAAgB,CACtC,CAAC;EACL;AACJ;AAACgB,OAAA,CAAApB,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.S3RedirectAssetReply = void 0;
|
|
7
|
+
var _apiFileManager = require("@webiny/api-file-manager");
|
|
8
|
+
var _handler = require("@webiny/handler");
|
|
9
|
+
class S3RedirectAssetReply extends _apiFileManager.AssetReply {
|
|
10
|
+
constructor(url, cacheDuration) {
|
|
11
|
+
super({
|
|
12
|
+
code: 301,
|
|
13
|
+
headers: _handler.ResponseHeaders.create({
|
|
14
|
+
location: url,
|
|
15
|
+
"cache-control": "public, max-age=" + cacheDuration
|
|
16
|
+
}),
|
|
17
|
+
body: () => ""
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.S3RedirectAssetReply = S3RedirectAssetReply;
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=S3RedirectAssetReply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_apiFileManager","require","_handler","S3RedirectAssetReply","AssetReply","constructor","url","cacheDuration","code","headers","ResponseHeaders","create","location","body","exports"],"sources":["S3RedirectAssetReply.ts"],"sourcesContent":["import { AssetReply } from \"@webiny/api-file-manager\";\nimport { ResponseHeaders } from \"@webiny/handler\";\n\nexport class S3RedirectAssetReply extends AssetReply {\n constructor(url: string, cacheDuration: number) {\n super({\n code: 301,\n headers: ResponseHeaders.create({\n location: url,\n \"cache-control\": \"public, max-age=\" + cacheDuration\n }),\n body: () => \"\"\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEO,MAAME,oBAAoB,SAASC,0BAAU,CAAC;EACjDC,WAAWA,CAACC,GAAW,EAAEC,aAAqB,EAAE;IAC5C,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,OAAO,EAAEC,wBAAe,CAACC,MAAM,CAAC;QAC5BC,QAAQ,EAAEN,GAAG;QACb,eAAe,EAAE,kBAAkB,GAAGC;MAC1C,CAAC,CAAC;MACFM,IAAI,EAAEA,CAAA,KAAM;IAChB,CAAC,CAAC;EACN;AACJ;AAACC,OAAA,CAAAX,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.S3StreamAssetReply = void 0;
|
|
7
|
+
var _apiFileManager = require("@webiny/api-file-manager");
|
|
8
|
+
var _handler = require("@webiny/handler");
|
|
9
|
+
class S3StreamAssetReply extends _apiFileManager.AssetReply {
|
|
10
|
+
constructor(asset) {
|
|
11
|
+
super({
|
|
12
|
+
code: 200,
|
|
13
|
+
headers: _handler.ResponseHeaders.create({
|
|
14
|
+
"cache-control": `public, max-age=${86400 * 365}`,
|
|
15
|
+
"content-type": asset.getContentType()
|
|
16
|
+
}),
|
|
17
|
+
body: () => asset.getContents()
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.S3StreamAssetReply = S3StreamAssetReply;
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=S3StreamAssetReply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_apiFileManager","require","_handler","S3StreamAssetReply","AssetReply","constructor","asset","code","headers","ResponseHeaders","create","getContentType","body","getContents","exports"],"sources":["S3StreamAssetReply.ts"],"sourcesContent":["import type { Asset } from \"@webiny/api-file-manager\";\nimport { AssetReply } from \"@webiny/api-file-manager\";\nimport { ResponseHeaders } from \"@webiny/handler\";\n\nexport class S3StreamAssetReply extends AssetReply {\n constructor(asset: Asset) {\n super({\n code: 200,\n headers: ResponseHeaders.create({\n \"cache-control\": `public, max-age=${86400 * 365}`,\n \"content-type\": asset.getContentType()\n }),\n body: () => asset.getContents()\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,eAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEO,MAAME,kBAAkB,SAASC,0BAAU,CAAC;EAC/CC,WAAWA,CAACC,KAAY,EAAE;IACtB,KAAK,CAAC;MACFC,IAAI,EAAE,GAAG;MACTC,OAAO,EAAEC,wBAAe,CAACC,MAAM,CAAC;QAC5B,eAAe,EAAE,mBAAmB,KAAK,GAAG,GAAG,EAAE;QACjD,cAAc,EAAEJ,KAAK,CAACK,cAAc,CAAC;MACzC,CAAC,CAAC;MACFC,IAAI,EAAEA,CAAA,KAAMN,KAAK,CAACO,WAAW,CAAC;IAClC,CAAC,CAAC;EACN;AACJ;AAACC,OAAA,CAAAX,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { S3 } from "@webiny/aws-sdk/client-s3";
|
|
2
|
+
import type { Asset, AssetRequest, AssetTransformationStrategy } from "@webiny/api-file-manager";
|
|
3
|
+
interface SharpTransformationParams {
|
|
4
|
+
s3: S3;
|
|
5
|
+
bucket: string;
|
|
6
|
+
imageResizeWidths: number[];
|
|
7
|
+
}
|
|
8
|
+
export declare class SharpTransform implements AssetTransformationStrategy {
|
|
9
|
+
private readonly params;
|
|
10
|
+
constructor(params: SharpTransformationParams);
|
|
11
|
+
transform(assetRequest: AssetRequest, asset: Asset): Promise<Asset>;
|
|
12
|
+
private transformAsset;
|
|
13
|
+
private optimizeAsset;
|
|
14
|
+
private isAssetAnimated;
|
|
15
|
+
private optimizePng;
|
|
16
|
+
private optimizeJpeg;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.SharpTransform = void 0;
|
|
9
|
+
var _sharp = _interopRequireDefault(require("sharp"));
|
|
10
|
+
var _WidthCollection = require("./transformation/WidthCollection");
|
|
11
|
+
var utils = _interopRequireWildcard(require("./transformation/utils"));
|
|
12
|
+
var _CallableContentsReader = require("./transformation/CallableContentsReader");
|
|
13
|
+
var _AssetKeyGenerator = require("./transformation/AssetKeyGenerator");
|
|
14
|
+
class SharpTransform {
|
|
15
|
+
constructor(params) {
|
|
16
|
+
this.params = params;
|
|
17
|
+
}
|
|
18
|
+
async transform(assetRequest, asset) {
|
|
19
|
+
if (!utils.SUPPORTED_TRANSFORMABLE_IMAGES.includes(asset.getExtension())) {
|
|
20
|
+
console.log(`Transformations/optimizations of ${asset.getContentType()} assets are not supported. Skipping.`);
|
|
21
|
+
return asset;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// `original` is part of the request, but it won't even get to this point in the execution.
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
26
|
+
const {
|
|
27
|
+
original,
|
|
28
|
+
...options
|
|
29
|
+
} = assetRequest.getOptions();
|
|
30
|
+
const transformedAsset = asset.clone();
|
|
31
|
+
if (Object.keys(options).length > 0) {
|
|
32
|
+
// Transformations were requested.
|
|
33
|
+
return this.transformAsset(transformedAsset, options);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Return an optimized asset.
|
|
37
|
+
return this.optimizeAsset(transformedAsset);
|
|
38
|
+
}
|
|
39
|
+
async transformAsset(asset, options) {
|
|
40
|
+
console.log("Transform asset", options);
|
|
41
|
+
if (options.width) {
|
|
42
|
+
const {
|
|
43
|
+
s3,
|
|
44
|
+
bucket
|
|
45
|
+
} = this.params;
|
|
46
|
+
const assetKey = new _AssetKeyGenerator.AssetKeyGenerator(asset);
|
|
47
|
+
const transformedAssetKey = assetKey.getTransformedImageKey(options);
|
|
48
|
+
try {
|
|
49
|
+
const {
|
|
50
|
+
Body
|
|
51
|
+
} = await s3.getObject({
|
|
52
|
+
Bucket: bucket,
|
|
53
|
+
Key: transformedAssetKey
|
|
54
|
+
});
|
|
55
|
+
if (!Body) {
|
|
56
|
+
throw new Error(`Missing image body!`);
|
|
57
|
+
}
|
|
58
|
+
const buffer = Buffer.from(await Body.transformToByteArray());
|
|
59
|
+
const newAsset = asset.withProps({
|
|
60
|
+
size: buffer.length
|
|
61
|
+
});
|
|
62
|
+
newAsset.setContentsReader(new _CallableContentsReader.CallableContentsReader(() => buffer));
|
|
63
|
+
console.log(`Return a previously transformed asset`, {
|
|
64
|
+
key: transformedAssetKey,
|
|
65
|
+
size: newAsset.getSize()
|
|
66
|
+
});
|
|
67
|
+
return newAsset;
|
|
68
|
+
} catch (e) {
|
|
69
|
+
const optimizedImage = await this.optimizeAsset(asset);
|
|
70
|
+
const widths = new _WidthCollection.WidthCollection(this.params.imageResizeWidths);
|
|
71
|
+
const width = widths.getClosestOrMax(options.width);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* `width` is the only transformation we currently support.
|
|
75
|
+
*/
|
|
76
|
+
console.log(`Resize the asset (width: ${width})`);
|
|
77
|
+
const buffer = await optimizedImage.getContents();
|
|
78
|
+
const transformedBuffer = await (0, _sharp.default)(buffer, {
|
|
79
|
+
animated: this.isAssetAnimated(asset)
|
|
80
|
+
}).withMetadata().resize({
|
|
81
|
+
width,
|
|
82
|
+
withoutEnlargement: true
|
|
83
|
+
}).toBuffer();
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Transformations are applied to the optimized image.
|
|
87
|
+
*/
|
|
88
|
+
const newAsset = asset.withProps({
|
|
89
|
+
size: transformedBuffer.length
|
|
90
|
+
});
|
|
91
|
+
newAsset.setContentsReader(new _CallableContentsReader.CallableContentsReader(() => transformedBuffer));
|
|
92
|
+
await s3.putObject({
|
|
93
|
+
Bucket: bucket,
|
|
94
|
+
Key: transformedAssetKey,
|
|
95
|
+
ContentType: newAsset.getContentType(),
|
|
96
|
+
Body: await newAsset.getContents()
|
|
97
|
+
});
|
|
98
|
+
console.log(`Return the resized asset`, {
|
|
99
|
+
key: transformedAssetKey,
|
|
100
|
+
size: newAsset.getSize()
|
|
101
|
+
});
|
|
102
|
+
return newAsset;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return asset;
|
|
106
|
+
}
|
|
107
|
+
async optimizeAsset(asset) {
|
|
108
|
+
const {
|
|
109
|
+
s3,
|
|
110
|
+
bucket
|
|
111
|
+
} = this.params;
|
|
112
|
+
console.log("Optimize asset", {
|
|
113
|
+
id: asset.getId(),
|
|
114
|
+
key: asset.getKey(),
|
|
115
|
+
size: asset.getSize(),
|
|
116
|
+
type: asset.getContentType()
|
|
117
|
+
});
|
|
118
|
+
const assetKey = new _AssetKeyGenerator.AssetKeyGenerator(asset);
|
|
119
|
+
const optimizedAssetKey = assetKey.getOptimizedImageKey();
|
|
120
|
+
try {
|
|
121
|
+
const {
|
|
122
|
+
Body
|
|
123
|
+
} = await s3.getObject({
|
|
124
|
+
Bucket: bucket,
|
|
125
|
+
Key: optimizedAssetKey
|
|
126
|
+
});
|
|
127
|
+
if (!Body) {
|
|
128
|
+
throw new Error(`Missing image body!`);
|
|
129
|
+
}
|
|
130
|
+
console.log("Return a previously optimized asset", optimizedAssetKey);
|
|
131
|
+
const buffer = Buffer.from(await Body.transformToByteArray());
|
|
132
|
+
const newAsset = asset.withProps({
|
|
133
|
+
size: buffer.length
|
|
134
|
+
});
|
|
135
|
+
newAsset.setContentsReader(new _CallableContentsReader.CallableContentsReader(() => buffer));
|
|
136
|
+
return newAsset;
|
|
137
|
+
} catch (e) {
|
|
138
|
+
console.log("Create an optimized version of the original asset", asset.getKey());
|
|
139
|
+
// If not found, create an optimized version of the original asset.
|
|
140
|
+
const buffer = await asset.getContents();
|
|
141
|
+
const optimizationMap = {
|
|
142
|
+
"image/png": buffer => this.optimizePng(buffer),
|
|
143
|
+
"image/jpeg": buffer => this.optimizeJpeg(buffer),
|
|
144
|
+
"image/jpg": buffer => this.optimizeJpeg(buffer)
|
|
145
|
+
};
|
|
146
|
+
const optimization = optimizationMap[asset.getContentType()];
|
|
147
|
+
if (!optimization) {
|
|
148
|
+
console.log(`No optimizations defined for ${asset.getContentType()}`);
|
|
149
|
+
return asset;
|
|
150
|
+
}
|
|
151
|
+
const optimizedBuffer = await optimization(buffer).toBuffer();
|
|
152
|
+
console.log("Optimized asset size", optimizedBuffer.length);
|
|
153
|
+
const newAsset = asset.withProps({
|
|
154
|
+
size: optimizedBuffer.length
|
|
155
|
+
});
|
|
156
|
+
newAsset.setContentsReader(new _CallableContentsReader.CallableContentsReader(() => optimizedBuffer));
|
|
157
|
+
await s3.putObject({
|
|
158
|
+
Bucket: bucket,
|
|
159
|
+
Key: optimizedAssetKey,
|
|
160
|
+
ContentType: newAsset.getContentType(),
|
|
161
|
+
Body: await newAsset.getContents()
|
|
162
|
+
});
|
|
163
|
+
return newAsset;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
isAssetAnimated(asset) {
|
|
167
|
+
return ["gif", "webp"].includes(asset.getExtension());
|
|
168
|
+
}
|
|
169
|
+
optimizePng(buffer) {
|
|
170
|
+
return (0, _sharp.default)(buffer).resize({
|
|
171
|
+
width: 2560,
|
|
172
|
+
withoutEnlargement: true,
|
|
173
|
+
fit: "inside"
|
|
174
|
+
}).png({
|
|
175
|
+
compressionLevel: 9,
|
|
176
|
+
adaptiveFiltering: true,
|
|
177
|
+
force: true
|
|
178
|
+
}).withMetadata();
|
|
179
|
+
}
|
|
180
|
+
optimizeJpeg(buffer) {
|
|
181
|
+
return (0, _sharp.default)(buffer).resize({
|
|
182
|
+
width: 2560,
|
|
183
|
+
withoutEnlargement: true,
|
|
184
|
+
fit: "inside"
|
|
185
|
+
}).withMetadata().toFormat("jpeg", {
|
|
186
|
+
quality: 90
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
exports.SharpTransform = SharpTransform;
|
|
191
|
+
|
|
192
|
+
//# sourceMappingURL=SharpTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_sharp","_interopRequireDefault","require","_WidthCollection","utils","_interopRequireWildcard","_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","AssetKeyGenerator","transformedAssetKey","getTransformedImageKey","Body","getObject","Bucket","Key","Error","buffer","Buffer","from","transformToByteArray","newAsset","withProps","size","setContentsReader","CallableContentsReader","key","getSize","e","optimizedImage","widths","WidthCollection","imageResizeWidths","getClosestOrMax","getContents","transformedBuffer","sharp","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","exports"],"sources":["SharpTransform.ts"],"sourcesContent":["import sharp from \"sharp\";\nimport type { S3 } from \"@webiny/aws-sdk/client-s3\";\nimport type {\n Asset,\n AssetRequest,\n AssetRequestOptions,\n AssetTransformationStrategy\n} from \"@webiny/api-file-manager\";\nimport { WidthCollection } from \"./transformation/WidthCollection\";\nimport * as utils from \"./transformation/utils\";\nimport { CallableContentsReader } from \"./transformation/CallableContentsReader\";\nimport { AssetKeyGenerator } from \"./transformation/AssetKeyGenerator\";\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 // eslint-disable-next-line @typescript-eslint/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 console.log(\"Transform asset\", options);\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 (e) {\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 (e) {\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":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Asset } from "@webiny/api-file-manager";
|
|
2
|
+
export declare class AssetKeyGenerator {
|
|
3
|
+
private utils;
|
|
4
|
+
private asset;
|
|
5
|
+
constructor(asset: Asset);
|
|
6
|
+
getOptimizedImageKey(): string;
|
|
7
|
+
getTransformedImageKey(transformations: Record<string, any>): string;
|
|
8
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AssetKeyGenerator = void 0;
|
|
8
|
+
var newUtils = _interopRequireWildcard(require("./utils"));
|
|
9
|
+
var legacyUtils = _interopRequireWildcard(require("./legacyUtils"));
|
|
10
|
+
class AssetKeyGenerator {
|
|
11
|
+
constructor(asset) {
|
|
12
|
+
this.asset = asset;
|
|
13
|
+
this.utils = asset.getKey().includes("/") ? newUtils : legacyUtils;
|
|
14
|
+
}
|
|
15
|
+
getOptimizedImageKey() {
|
|
16
|
+
return this.utils.getImageKey({
|
|
17
|
+
key: this.asset.getKey()
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
getTransformedImageKey(transformations) {
|
|
21
|
+
return this.utils.getImageKey({
|
|
22
|
+
key: this.asset.getKey(),
|
|
23
|
+
transformations
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.AssetKeyGenerator = AssetKeyGenerator;
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=AssetKeyGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["newUtils","_interopRequireWildcard","require","legacyUtils","AssetKeyGenerator","constructor","asset","utils","getKey","includes","getOptimizedImageKey","getImageKey","key","getTransformedImageKey","transformations","exports"],"sources":["AssetKeyGenerator.ts"],"sourcesContent":["import type { Asset } from \"@webiny/api-file-manager\";\nimport * as newUtils from \"./utils\";\nimport * as legacyUtils from \"./legacyUtils\";\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 = asset.getKey().includes(\"/\") ? newUtils : legacyUtils;\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,IAAAA,QAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,uBAAA,CAAAC,OAAA;AAEO,MAAME,iBAAiB,CAAC;EAI3BC,WAAWA,CAACC,KAAY,EAAE;IACtB,IAAI,CAACA,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,KAAK,GAAGD,KAAK,CAACE,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,GAAG,CAAC,GAAGT,QAAQ,GAAGG,WAAW;EACtE;EAEAO,oBAAoBA,CAAA,EAAG;IACnB,OAAO,IAAI,CAACH,KAAK,CAACI,WAAW,CAAC;MAAEC,GAAG,EAAE,IAAI,CAACN,KAAK,CAACE,MAAM,CAAC;IAAE,CAAC,CAAC;EAC/D;EACAK,sBAAsBA,CAACC,eAAoC,EAAE;IACzD,OAAO,IAAI,CAACP,KAAK,CAACI,WAAW,CAAC;MAAEC,GAAG,EAAE,IAAI,CAACN,KAAK,CAACE,MAAM,CAAC,CAAC;MAAEM;IAAgB,CAAC,CAAC;EAChF;AACJ;AAACC,OAAA,CAAAX,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type { AssetContentsReader } from "@webiny/api-file-manager";
|
|
4
|
+
interface ContentsCallable {
|
|
5
|
+
(): Promise<Buffer> | Buffer;
|
|
6
|
+
}
|
|
7
|
+
export declare class CallableContentsReader implements AssetContentsReader {
|
|
8
|
+
private readonly callable;
|
|
9
|
+
constructor(callable: ContentsCallable);
|
|
10
|
+
read(): Promise<Buffer>;
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CallableContentsReader = void 0;
|
|
7
|
+
class CallableContentsReader {
|
|
8
|
+
constructor(callable) {
|
|
9
|
+
this.callable = callable;
|
|
10
|
+
}
|
|
11
|
+
async read() {
|
|
12
|
+
return this.callable();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.CallableContentsReader = CallableContentsReader;
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=CallableContentsReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CallableContentsReader","constructor","callable","read","exports"],"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":";;;;;;AAMO,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;AAACE,OAAA,CAAAJ,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.WidthCollection = void 0;
|
|
7
|
+
class WidthCollection {
|
|
8
|
+
constructor(values) {
|
|
9
|
+
this.values = values.sort((a, b) => a - b);
|
|
10
|
+
}
|
|
11
|
+
max() {
|
|
12
|
+
return Math.max(...this.values);
|
|
13
|
+
}
|
|
14
|
+
min() {
|
|
15
|
+
return Math.min(...this.values);
|
|
16
|
+
}
|
|
17
|
+
getClosestOrMax(value) {
|
|
18
|
+
if (!value) {
|
|
19
|
+
return this.max();
|
|
20
|
+
}
|
|
21
|
+
const gteGivenValue = this.values.filter(w => w >= value);
|
|
22
|
+
return gteGivenValue.length > 0 ? gteGivenValue[0] : this.max();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.WidthCollection = WidthCollection;
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=WidthCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["WidthCollection","constructor","values","sort","a","b","max","Math","min","getClosestOrMax","value","gteGivenValue","filter","w","length","exports"],"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":";;;;;;AAAO,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;AAACS,OAAA,CAAAf,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const SUPPORTED_IMAGES: string[];
|
|
2
|
+
declare const SUPPORTED_TRANSFORMABLE_IMAGES: string[];
|
|
3
|
+
declare const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
4
|
+
declare const OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
5
|
+
declare const getOptimizedImageKeyPrefix: (key: string) => string;
|
|
6
|
+
declare const getOptimizedTransformedImageKeyPrefix: (key: string) => string;
|
|
7
|
+
interface GetImageKeyParams {
|
|
8
|
+
key: string;
|
|
9
|
+
transformations?: any;
|
|
10
|
+
}
|
|
11
|
+
declare const getImageKey: ({ key, transformations }: GetImageKeyParams) => string;
|
|
12
|
+
export { SUPPORTED_IMAGES, SUPPORTED_TRANSFORMABLE_IMAGES, OPTIMIZED_TRANSFORMED_IMAGE_PREFIX, OPTIMIZED_IMAGE_PREFIX, getImageKey, getOptimizedImageKeyPrefix, getOptimizedTransformedImageKeyPrefix };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getOptimizedTransformedImageKeyPrefix = exports.getOptimizedImageKeyPrefix = exports.getImageKey = exports.SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_IMAGES = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = void 0;
|
|
8
|
+
var _objectHash = _interopRequireDefault(require("object-hash"));
|
|
9
|
+
const SUPPORTED_IMAGES = exports.SUPPORTED_IMAGES = [".jpg", ".jpeg", ".png", ".svg", ".gif"];
|
|
10
|
+
const SUPPORTED_TRANSFORMABLE_IMAGES = exports.SUPPORTED_TRANSFORMABLE_IMAGES = [".jpg", ".jpeg", ".png"];
|
|
11
|
+
const OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = exports.OPTIMIZED_TRANSFORMED_IMAGE_PREFIX = "img-o-t-";
|
|
12
|
+
const OPTIMIZED_IMAGE_PREFIX = exports.OPTIMIZED_IMAGE_PREFIX = "img-o-";
|
|
13
|
+
const getOptimizedImageKeyPrefix = key => {
|
|
14
|
+
return `${OPTIMIZED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
15
|
+
};
|
|
16
|
+
exports.getOptimizedImageKeyPrefix = getOptimizedImageKeyPrefix;
|
|
17
|
+
const getOptimizedTransformedImageKeyPrefix = key => {
|
|
18
|
+
return `${OPTIMIZED_TRANSFORMED_IMAGE_PREFIX}${(0, _objectHash.default)(key)}-`;
|
|
19
|
+
};
|
|
20
|
+
exports.getOptimizedTransformedImageKeyPrefix = getOptimizedTransformedImageKeyPrefix;
|
|
21
|
+
const getImageKey = ({
|
|
22
|
+
key,
|
|
23
|
+
transformations
|
|
24
|
+
}) => {
|
|
25
|
+
if (!transformations) {
|
|
26
|
+
const prefix = getOptimizedImageKeyPrefix(key);
|
|
27
|
+
return prefix + key;
|
|
28
|
+
}
|
|
29
|
+
const prefix = getOptimizedTransformedImageKeyPrefix(key);
|
|
30
|
+
return `${prefix}${(0, _objectHash.default)(transformations)}-${key}`;
|
|
31
|
+
};
|
|
32
|
+
exports.getImageKey = getImageKey;
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=legacyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_objectHash","_interopRequireDefault","require","SUPPORTED_IMAGES","exports","SUPPORTED_TRANSFORMABLE_IMAGES","OPTIMIZED_TRANSFORMED_IMAGE_PREFIX","OPTIMIZED_IMAGE_PREFIX","getOptimizedImageKeyPrefix","key","objectHash","getOptimizedTransformedImageKeyPrefix","getImageKey","transformations","prefix"],"sources":["legacyUtils.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,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AAClE,MAAME,8BAA8B,GAAAD,OAAA,CAAAC,8BAAA,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAEhE,MAAMC,kCAAkC,GAAAF,OAAA,CAAAE,kCAAA,GAAG,UAAU;AACrD,MAAMC,sBAAsB,GAAAH,OAAA,CAAAG,sBAAA,GAAG,QAAQ;AAEvC,MAAMC,0BAA0B,GAAIC,GAAW,IAAa;EACxD,OAAO,GAAGF,sBAAsB,GAAG,IAAAG,mBAAU,EAACD,GAAG,CAAC,GAAG;AACzD,CAAC;AAACL,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEF,MAAMG,qCAAqC,GAAIF,GAAW,IAAa;EACnE,OAAO,GAAGH,kCAAkC,GAAG,IAAAI,mBAAU,EAACD,GAAG,CAAC,GAAG;AACrE,CAAC;AAACL,OAAA,CAAAO,qCAAA,GAAAA,qCAAA;AAOF,MAAMC,WAAW,GAAGA,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,OAAO,GAAGK,MAAM,GAAG,IAAAJ,mBAAU,EAACG,eAAe,CAAC,IAAIJ,GAAG,EAAE;AAC3D,CAAC;AAACL,OAAA,CAAAQ,WAAA,GAAAA,WAAA","ignoreList":[]}
|