@tc-libs/file-handler 5.4.0 → 5.5.0
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/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tc-libs/file-handler",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@tc-libs/app-cache": "5.
|
|
6
|
-
"@tc-libs/constant": "5.
|
|
7
|
-
"@tc-libs/database": "5.
|
|
8
|
-
"@tc-libs/file": "5.
|
|
9
|
-
"@tc-libs/storage": "5.
|
|
5
|
+
"@tc-libs/app-cache": "5.5.0",
|
|
6
|
+
"@tc-libs/constant": "5.5.0",
|
|
7
|
+
"@tc-libs/database": "5.5.0",
|
|
8
|
+
"@tc-libs/file": "5.5.0",
|
|
9
|
+
"@tc-libs/storage": "5.5.0",
|
|
10
10
|
"bytes": "3.1.2",
|
|
11
11
|
"fluent-ffmpeg": "^2.1.3",
|
|
12
12
|
"officeparser": "^5.1.1",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-handler.service.js","sourceRoot":"","sources":["../../../../../packages/file-handler/src/services/file-handler.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAA4D;AAC5D,8CAA4D;AAC5D,0DAA0B;AAC1B,+BAAoC;AACpC,0CAA0C;AAC1C,0CAAuC;AACvC,wCAKuB;AACvB,gFAGwC;AAKxC,yCAAuC;AACvC,0CAA6C;
|
|
1
|
+
{"version":3,"file":"file-handler.service.js","sourceRoot":"","sources":["../../../../../packages/file-handler/src/services/file-handler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,23 +12,37 @@ const resizeAndUpload = async (resize, remoteFolder, remoteKey, mime, content, s
|
|
|
12
12
|
// get metadata for estract original width and height
|
|
13
13
|
const metadata = await image.metadata();
|
|
14
14
|
const frameHeight = metadata.pageHeight ?? metadata.height ?? 0;
|
|
15
|
+
// Metadati tolti salvo stripMetadata: false esplicito. Senza EXIF l'orientamento va applicato ai pixel: rotate() lo
|
|
16
|
+
// applica prima del resize, quindi il lato lungo si misura sull'immagine ruotata (orientamenti 5-8: lati scambiati).
|
|
17
|
+
const strip = options.stripMetadata !== false;
|
|
18
|
+
if (strip)
|
|
19
|
+
image.rotate();
|
|
20
|
+
const swapSides = strip && (metadata.orientation ?? 1) >= 5;
|
|
21
|
+
const width = swapSides ? frameHeight : (metadata.width ?? 0);
|
|
22
|
+
const height = swapSides ? (metadata.width ?? 0) : frameHeight;
|
|
15
23
|
if (resize && resize.size && resize.size > 0) {
|
|
16
24
|
// if resize is bigger than original, skip it
|
|
17
25
|
// if (Math.max(metadata.width, metadata.height) < resize.size) return null;
|
|
18
26
|
// check which is the bigger dimension
|
|
19
|
-
const biggerDimension =
|
|
27
|
+
const biggerDimension = width > height ? 'width' : 'height';
|
|
20
28
|
// build the resize param
|
|
21
29
|
const resizeObj = {};
|
|
22
30
|
resizeObj[biggerDimension] = resize.size;
|
|
23
31
|
image.resize(resizeObj);
|
|
24
32
|
}
|
|
25
|
-
|
|
33
|
+
// Con forceWebp il resize si codifica in WebP qualunque sia il formato di partenza; le GIF animate restano animate.
|
|
34
|
+
switch (resize.forceWebp ? 'webp' : metadata.format) {
|
|
26
35
|
case 'jpeg':
|
|
27
36
|
image.jpeg({
|
|
28
37
|
quality: resize.quality,
|
|
29
38
|
progressive: true,
|
|
30
39
|
});
|
|
31
40
|
break;
|
|
41
|
+
case 'webp':
|
|
42
|
+
image.webp({
|
|
43
|
+
quality: resize.quality,
|
|
44
|
+
});
|
|
45
|
+
break;
|
|
32
46
|
case 'png':
|
|
33
47
|
image.png({
|
|
34
48
|
compressionLevel: 9,
|
|
@@ -40,7 +54,11 @@ const resizeAndUpload = async (resize, remoteFolder, remoteKey, mime, content, s
|
|
|
40
54
|
default:
|
|
41
55
|
break;
|
|
42
56
|
}
|
|
43
|
-
|
|
57
|
+
// Senza EXIF, XMP e IPTC resta il solo profilo sRGB, che withMetadata allega comunque.
|
|
58
|
+
if (strip)
|
|
59
|
+
image.withIccProfile('srgb');
|
|
60
|
+
else
|
|
61
|
+
image.withMetadata({ density: 72 });
|
|
44
62
|
// resize img to a buffer
|
|
45
63
|
const { data, info: output } = await image.toBuffer({
|
|
46
64
|
resolveWithObject: true,
|
|
@@ -52,7 +70,7 @@ const resizeAndUpload = async (resize, remoteFolder, remoteKey, mime, content, s
|
|
|
52
70
|
// upload buffer to blob storage
|
|
53
71
|
const storageResponse = await storage.uploadItem(remoteKey, data, {
|
|
54
72
|
path: remoteFolder,
|
|
55
|
-
mime: mime,
|
|
73
|
+
mime: resize.forceWebp ? 'image/webp' : mime,
|
|
56
74
|
acl: options.acl,
|
|
57
75
|
});
|
|
58
76
|
return { info, storageResponse, metadata };
|
|
@@ -87,7 +105,7 @@ const handleImg = async (imgConf, ext, hashName, file, mime, content, fileType,
|
|
|
87
105
|
return response;
|
|
88
106
|
for (const resize of resizes) {
|
|
89
107
|
// build resized img path
|
|
90
|
-
const { info: resizedInfo, storageResponse } = await resizeAndUpload(resize, `${fileType}/${resize.name}`, `${hashName}${ext}`, mime, content, storage, options);
|
|
108
|
+
const { info: resizedInfo, storageResponse } = await resizeAndUpload(resize, `${fileType}/${resize.name}`, `${hashName}${resize.forceWebp ? '.webp' : ext}`, mime, content, storage, options);
|
|
91
109
|
if (!resizedInfo)
|
|
92
110
|
continue;
|
|
93
111
|
response.formats.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jpg.js","sourceRoot":"","sources":["../../../../../../packages/file-handler/src/services/handlers/jpg.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAY1B,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEnB,MAAM,eAAe,GAAG,KAAK,EAC3B,
|
|
1
|
+
{"version":3,"file":"jpg.js","sourceRoot":"","sources":["../../../../../../packages/file-handler/src/services/handlers/jpg.ts"],"names":[],"mappings":"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"}
|