@social-mail/social-mail-web-server 1.5.71 → 1.5.72
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/dist/common/ImagesFolder.d.ts +2 -0
- package/dist/common/ImagesFolder.d.ts.map +1 -1
- package/dist/common/ImagesFolder.js +3 -1
- package/dist/common/ImagesFolder.js.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts +1 -1
- package/dist/server/services/image-converter/ImageConverterService.d.ts.map +1 -1
- package/dist/server/services/image-converter/ImageConverterService.js +119 -53
- package/dist/server/services/image-converter/ImageConverterService.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/common/ImagesFolder.ts +3 -1
- package/src/server/services/image-converter/ImageConverterService.ts +11 -11
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
1
2
|
export declare const ImagesFolder: {
|
|
2
3
|
folder: string;
|
|
3
4
|
file: (name: any) => string;
|
|
@@ -5,5 +6,6 @@ export declare const ImagesFolder: {
|
|
|
5
6
|
export declare const ContentFolder: {
|
|
6
7
|
folder: string;
|
|
7
8
|
file: (name: any) => string;
|
|
9
|
+
localFile: (name: string) => LocalFile;
|
|
8
10
|
};
|
|
9
11
|
//# sourceMappingURL=ImagesFolder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagesFolder.d.ts","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImagesFolder.d.ts","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAO/E,eAAO,MAAM,YAAY;;;CAIxB,CAAC;AAIF,eAAO,MAAM,aAAa;;;sBAGJ,MAAM;CAC3B,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
1
2
|
import { dirname, join } from "path";
|
|
2
3
|
import { fileURLToPath } from "url";
|
|
3
4
|
const metaDir = dirname(import.meta.url);
|
|
@@ -9,6 +10,7 @@ export const ImagesFolder = {
|
|
|
9
10
|
const contentFolder = join(fileURLToPath(metaDir), "..", "..", "content");
|
|
10
11
|
export const ContentFolder = {
|
|
11
12
|
folder: contentFolder,
|
|
12
|
-
file: (name) => join(contentFolder, name)
|
|
13
|
+
file: (name) => join(contentFolder, name),
|
|
14
|
+
localFile: (name) => new LocalFile(join(contentFolder, name), name.split("/").pop(), void 0, () => void 0)
|
|
13
15
|
};
|
|
14
16
|
//# sourceMappingURL=ImagesFolder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImagesFolder.js","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,MAAM;IACN,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CACX,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;CACzB,CAAC;AAGF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ImagesFolder.js","sourceRoot":"","sources":["../../src/common/ImagesFolder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,MAAM;IACN,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CACX,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;CACzB,CAAC;AAGF,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG;IACzB,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC;IACzC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;CACrH,CAAC"}
|
|
@@ -2,7 +2,7 @@ import TempFileService from "../../storage/TempFileService.js";
|
|
|
2
2
|
import { LocalFile } from "@entity-access/server-pages/dist/core/LocalFile.js";
|
|
3
3
|
export default class ImageConverterService {
|
|
4
4
|
tempFileService: TempFileService;
|
|
5
|
-
getImage(file: LocalFile, pageNumber?: any):
|
|
5
|
+
getImage(file: LocalFile, pageNumber?: any, retry?: boolean): any;
|
|
6
6
|
transform(type: any, file: LocalFile, outputFileName?: string): Promise<LocalFile>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=ImageConverterService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageConverterService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAe/E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAGtC,eAAe,EAAE,eAAe,CAAC;IAE3B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,KAAA;
|
|
1
|
+
{"version":3,"file":"ImageConverterService.d.ts","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAe/E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IAGtC,eAAe,EAAE,eAAe,CAAC;IAE3B,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,KAAA,EAAE,KAAK,UAAO;IAyEnD,SAAS,CAAC,IAAI,KAAA,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,SAAa;CA+DrE"}
|
|
@@ -7,6 +7,53 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
11
|
+
if (value !== null && value !== void 0) {
|
|
12
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
13
|
+
var dispose, inner;
|
|
14
|
+
if (async) {
|
|
15
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
16
|
+
dispose = value[Symbol.asyncDispose];
|
|
17
|
+
}
|
|
18
|
+
if (dispose === void 0) {
|
|
19
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
20
|
+
dispose = value[Symbol.dispose];
|
|
21
|
+
if (async) inner = dispose;
|
|
22
|
+
}
|
|
23
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
24
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
25
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
26
|
+
}
|
|
27
|
+
else if (async) {
|
|
28
|
+
env.stack.push({ async: true });
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
};
|
|
32
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
33
|
+
return function (env) {
|
|
34
|
+
function fail(e) {
|
|
35
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
36
|
+
env.hasError = true;
|
|
37
|
+
}
|
|
38
|
+
function next() {
|
|
39
|
+
while (env.stack.length) {
|
|
40
|
+
var rec = env.stack.pop();
|
|
41
|
+
try {
|
|
42
|
+
var result = rec.dispose && rec.dispose.call(rec.value);
|
|
43
|
+
if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
fail(e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (env.hasError) throw env.error;
|
|
50
|
+
}
|
|
51
|
+
return next();
|
|
52
|
+
};
|
|
53
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
54
|
+
var e = new Error(message);
|
|
55
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
56
|
+
});
|
|
10
57
|
import Inject, { RegisterTransient } from "@entity-access/entity-access/dist/di/di.js";
|
|
11
58
|
import TempFileService from "../../storage/TempFileService.js";
|
|
12
59
|
import { join, parse } from "path";
|
|
@@ -21,64 +68,83 @@ import { ContentFolder } from "../../../common/ImagesFolder.js";
|
|
|
21
68
|
const cachePath = `./data/img-cache/`;
|
|
22
69
|
ensureDir(cachePath);
|
|
23
70
|
let ImageConverterService = class ImageConverterService {
|
|
24
|
-
async getImage(file, pageNumber) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
if (/pdf/i.test(file.contentType)) {
|
|
51
|
-
const args = [
|
|
52
|
-
"-singlefile",
|
|
53
|
-
"-png",
|
|
54
|
-
copy.path,
|
|
55
|
-
"png"
|
|
56
|
-
];
|
|
57
|
-
if (pageNumber) {
|
|
58
|
-
args.push("-f");
|
|
59
|
-
args.push(Number(pageNumber).toString());
|
|
60
|
-
}
|
|
61
|
-
await spawnPromise("pdftoppm", args, {
|
|
62
|
-
cwd: folder.folder
|
|
63
|
-
});
|
|
64
|
-
const isPng = /\.png$/i;
|
|
65
|
-
for (const child of await readdir(folder.folder, { withFileTypes: true })) {
|
|
66
|
-
const output = join(child.path, child.name);
|
|
67
|
-
if (isPng.test(child.name)) {
|
|
68
|
-
await copyFile(output, outputFile.path);
|
|
69
|
-
return outputFile;
|
|
71
|
+
async getImage(file, pageNumber, retry = true) {
|
|
72
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
73
|
+
try {
|
|
74
|
+
let outputFile;
|
|
75
|
+
let copy;
|
|
76
|
+
if (/^image\//.test(file.contentType)) {
|
|
77
|
+
if (/\.bmp$/i.test(file.fileName)) {
|
|
78
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
79
|
+
try {
|
|
80
|
+
const f1 = __addDisposableResource(env_2, new TempFolder(), false);
|
|
81
|
+
copy = await f1.copy(file.fileName, file, file.contentType);
|
|
82
|
+
outputFile = await this.tempFileService.createTempFile(".bmp", "bmp", "image/bmp");
|
|
83
|
+
await spawnPromise("convert", [
|
|
84
|
+
copy.path,
|
|
85
|
+
outputFile.path
|
|
86
|
+
]);
|
|
87
|
+
return outputFile;
|
|
88
|
+
}
|
|
89
|
+
catch (e_1) {
|
|
90
|
+
env_2.error = e_1;
|
|
91
|
+
env_2.hasError = true;
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
__disposeResources(env_2);
|
|
95
|
+
}
|
|
70
96
|
}
|
|
97
|
+
return file;
|
|
71
98
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
99
|
+
const folder = __addDisposableResource(env_1, new TempFolder(), false);
|
|
100
|
+
copy = await folder.copy(file.fileName, file, file.contentType);
|
|
101
|
+
outputFile = await this.tempFileService.createTempFile(".png", "png", "image/png");
|
|
102
|
+
if (/^video\//.test(file.contentType)) {
|
|
103
|
+
// this is a video..
|
|
104
|
+
await FFCommand.thumbnail(file, outputFile);
|
|
76
105
|
return outputFile;
|
|
77
106
|
}
|
|
107
|
+
if (/pdf/i.test(file.contentType)) {
|
|
108
|
+
const args = [
|
|
109
|
+
"-singlefile",
|
|
110
|
+
"-png",
|
|
111
|
+
copy.path,
|
|
112
|
+
"png"
|
|
113
|
+
];
|
|
114
|
+
if (pageNumber) {
|
|
115
|
+
args.push("-f");
|
|
116
|
+
args.push(Number(pageNumber).toString());
|
|
117
|
+
}
|
|
118
|
+
await spawnPromise("pdftoppm", args, {
|
|
119
|
+
cwd: folder.folder
|
|
120
|
+
});
|
|
121
|
+
const isPng = /\.png$/i;
|
|
122
|
+
for (const child of await readdir(folder.folder, { withFileTypes: true })) {
|
|
123
|
+
const output = join(child.parentPath, child.name);
|
|
124
|
+
if (isPng.test(child.name)) {
|
|
125
|
+
await copyFile(output, outputFile.path);
|
|
126
|
+
return outputFile;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!existsSync(outputFile.path)) {
|
|
130
|
+
// copy protected.pdf
|
|
131
|
+
if (retry) {
|
|
132
|
+
const src = ContentFolder.localFile("pdf/protected.pdf");
|
|
133
|
+
return await this.getImage(src, pageNumber, false);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// this is some kind of document??
|
|
138
|
+
await Convert.convert(copy, "png", outputFile.path);
|
|
139
|
+
return outputFile;
|
|
140
|
+
}
|
|
141
|
+
catch (e_2) {
|
|
142
|
+
env_1.error = e_2;
|
|
143
|
+
env_1.hasError = true;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
__disposeResources(env_1);
|
|
78
147
|
}
|
|
79
|
-
// this is some kind of document??
|
|
80
|
-
await Convert.convert(copy, "png", outputFile.path);
|
|
81
|
-
return outputFile;
|
|
82
148
|
}
|
|
83
149
|
async transform(type, file, outputFileName = "file.jpg") {
|
|
84
150
|
let { ext } = parse(outputFileName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageConverterService.js","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ImageConverterService.js","sourceRoot":"","sources":["../../../../src/server/services/image-converter/ImageConverterService.ts"],"names":[],"mappings":"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"}
|