chromiumly 2.6.0 → 2.8.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/README.md +147 -42
- package/dist/chromium/converters/converter.d.ts +1 -1
- package/dist/chromium/converters/converter.js +1 -1
- package/dist/chromium/converters/converter.js.map +1 -1
- package/dist/chromium/converters/html.converter.d.ts +9 -4
- package/dist/chromium/converters/html.converter.js +7 -3
- package/dist/chromium/converters/html.converter.js.map +1 -1
- package/dist/chromium/converters/markdown.converter.d.ts +9 -4
- package/dist/chromium/converters/markdown.converter.js +7 -3
- package/dist/chromium/converters/markdown.converter.js.map +1 -1
- package/dist/chromium/converters/url.converter.d.ts +9 -4
- package/dist/chromium/converters/url.converter.js +6 -2
- package/dist/chromium/converters/url.converter.js.map +1 -1
- package/dist/chromium/index.d.ts +6 -3
- package/dist/chromium/index.js +7 -1
- package/dist/chromium/index.js.map +1 -1
- package/dist/chromium/interfaces/common.types.d.ts +13 -0
- package/dist/chromium/interfaces/common.types.js +3 -0
- package/dist/chromium/interfaces/common.types.js.map +1 -0
- package/dist/chromium/interfaces/converter.types.d.ts +4 -10
- package/dist/chromium/interfaces/screenshot.types.d.ts +10 -0
- package/dist/chromium/interfaces/screenshot.types.js +3 -0
- package/dist/chromium/interfaces/screenshot.types.js.map +1 -0
- package/dist/chromium/screenshots/html.screenshot.d.ts +54 -0
- package/dist/chromium/screenshots/html.screenshot.js +67 -0
- package/dist/chromium/screenshots/html.screenshot.js.map +1 -0
- package/dist/chromium/screenshots/markdown.screenshot.d.ts +52 -0
- package/dist/chromium/screenshots/markdown.screenshot.js +66 -0
- package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -0
- package/dist/chromium/screenshots/screenshot.d.ts +18 -0
- package/dist/chromium/screenshots/screenshot.js +21 -0
- package/dist/chromium/screenshots/screenshot.js.map +1 -0
- package/dist/chromium/screenshots/url.screenshot.d.ts +50 -0
- package/dist/chromium/screenshots/url.screenshot.js +66 -0
- package/dist/chromium/screenshots/url.screenshot.js.map +1 -0
- package/dist/chromium/utils/converter.utils.d.ts +2 -12
- package/dist/chromium/utils/converter.utils.js +36 -50
- package/dist/chromium/utils/converter.utils.js.map +1 -1
- package/dist/chromium/utils/screenshot.utils.d.ts +22 -0
- package/dist/chromium/utils/screenshot.utils.js +75 -0
- package/dist/chromium/utils/screenshot.utils.js.map +1 -0
- package/dist/common/gotenberg.utils.d.ts +11 -1
- package/dist/common/gotenberg.utils.js +25 -2
- package/dist/common/gotenberg.utils.js.map +1 -1
- package/dist/common/index.d.ts +3 -3
- package/dist/common/index.js.map +1 -1
- package/dist/common/types.d.ts +1 -1
- package/dist/gotenberg.js +4 -3
- package/dist/gotenberg.js.map +1 -1
- package/dist/libre-office/index.d.ts +2 -2
- package/dist/libre-office/index.js.map +1 -1
- package/dist/libre-office/utils/constants.js +80 -76
- package/dist/libre-office/utils/constants.js.map +1 -1
- package/dist/libre-office/utils/libre-office.utils.d.ts +3 -3
- package/dist/libre-office/utils/libre-office.utils.js +5 -5
- package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
- package/dist/main.config.d.ts +6 -1
- package/dist/main.config.js +11 -6
- package/dist/main.config.js.map +1 -1
- package/dist/main.d.ts +3 -3
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/pdf-engines/index.d.ts +1 -1
- package/dist/pdf-engines/index.js.map +1 -1
- package/dist/pdf-engines/pdf.engine.d.ts +3 -3
- package/dist/pdf-engines/pdf.engine.js +5 -5
- package/dist/pdf-engines/pdf.engine.js.map +1 -1
- package/dist/pdf-engines/utils/engine.utils.d.ts +2 -2
- package/dist/pdf-engines/utils/engine.utils.js +3 -3
- package/dist/pdf-engines/utils/engine.utils.js.map +1 -1
- package/package.json +20 -12
- package/src/.prettierrc.yml +4 -0
- package/src/chromium/converters/converter.ts +2 -2
- package/src/chromium/converters/html.converter.ts +37 -27
- package/src/chromium/converters/markdown.converter.ts +32 -26
- package/src/chromium/converters/tests/html.converter.test.ts +97 -73
- package/src/chromium/converters/tests/markdown.converter.test.ts +102 -77
- package/src/chromium/converters/tests/url.converter.test.ts +90 -66
- package/src/chromium/converters/url.converter.ts +31 -25
- package/src/chromium/index.ts +6 -3
- package/src/chromium/interfaces/common.types.ts +15 -0
- package/src/chromium/interfaces/converter.types.ts +4 -12
- package/src/chromium/interfaces/screenshot.types.ts +12 -0
- package/src/chromium/screenshots/html.screenshot.ts +100 -0
- package/src/chromium/screenshots/markdown.screenshot.ts +95 -0
- package/src/chromium/screenshots/screenshot.ts +22 -0
- package/src/chromium/screenshots/tests/html.screenshot.test.ts +192 -0
- package/src/chromium/screenshots/tests/markdown.screenshot.test.ts +176 -0
- package/src/chromium/screenshots/tests/url.screenshot.test.ts +166 -0
- package/src/chromium/screenshots/url.screenshot.ts +91 -0
- package/src/chromium/utils/converter.utils.ts +67 -60
- package/src/chromium/utils/screenshot.utils.ts +115 -0
- package/src/chromium/utils/tests/converter.utils.test.ts +250 -168
- package/src/chromium/utils/tests/screenshot.utils.test.ts +284 -0
- package/src/common/constants.ts +3 -3
- package/src/common/gotenberg.utils.ts +39 -8
- package/src/common/index.ts +3 -3
- package/src/common/tests/gotenberg.utils.test.ts +84 -31
- package/src/common/types.ts +2 -2
- package/src/gotenberg.ts +9 -9
- package/src/libre-office/index.ts +2 -2
- package/src/libre-office/utils/constants.ts +80 -76
- package/src/libre-office/utils/libre-office.utils.ts +21 -18
- package/src/libre-office/utils/tests/libre-office.utils.test.ts +58 -49
- package/src/main.config.ts +19 -13
- package/src/main.ts +10 -3
- package/src/pdf-engines/index.ts +1 -1
- package/src/pdf-engines/pdf.engine.ts +23 -19
- package/src/pdf-engines/tests/pdf.engine.test.ts +52 -49
- package/src/pdf-engines/utils/engine.utils.ts +12 -9
- package/src/pdf-engines/utils/tests/engine.utils.test.ts +23 -23
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import FormData from "form-data";
|
|
1
|
+
import FormData from 'form-data';
|
|
3
2
|
|
|
4
3
|
import {
|
|
5
4
|
ConversionOptions,
|
|
6
|
-
PageProperties
|
|
7
|
-
} from
|
|
8
|
-
import {GotenbergUtils
|
|
9
|
-
import {ReadStream} from "fs";
|
|
5
|
+
PageProperties
|
|
6
|
+
} from '../interfaces/converter.types';
|
|
7
|
+
import { GotenbergUtils } from '../../common';
|
|
10
8
|
|
|
11
9
|
/**
|
|
12
10
|
* Utility class for handling common tasks related to conversion.
|
|
@@ -22,94 +20,86 @@ export class ConverterUtils {
|
|
|
22
20
|
data: FormData,
|
|
23
21
|
pageProperties: PageProperties
|
|
24
22
|
): void {
|
|
23
|
+
if (pageProperties.singlePage) {
|
|
24
|
+
data.append('singlePage', String(pageProperties.singlePage));
|
|
25
|
+
}
|
|
26
|
+
|
|
25
27
|
if (pageProperties.size) {
|
|
26
28
|
GotenbergUtils.assert(
|
|
27
|
-
pageProperties.size.width >= 1.0 &&
|
|
28
|
-
|
|
29
|
+
pageProperties.size.width >= 1.0 &&
|
|
30
|
+
pageProperties.size.height >= 1.5,
|
|
31
|
+
'size is smaller than the minimum printing requirements (i.e. 1.0 x 1.5 in)'
|
|
29
32
|
);
|
|
30
33
|
|
|
31
|
-
data.append(
|
|
32
|
-
data.append(
|
|
34
|
+
data.append('paperWidth', pageProperties.size.width);
|
|
35
|
+
data.append('paperHeight', pageProperties.size.height);
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
if (pageProperties.margins) {
|
|
36
39
|
GotenbergUtils.assert(
|
|
37
40
|
pageProperties.margins.top >= 0 &&
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
pageProperties.margins.bottom >= 0 &&
|
|
42
|
+
pageProperties.margins.left >= 0 &&
|
|
43
|
+
pageProperties.margins.left >= 0,
|
|
44
|
+
'negative margins are not allowed'
|
|
42
45
|
);
|
|
43
46
|
|
|
44
|
-
data.append(
|
|
45
|
-
data.append(
|
|
46
|
-
data.append(
|
|
47
|
-
data.append(
|
|
47
|
+
data.append('marginTop', pageProperties.margins.top);
|
|
48
|
+
data.append('marginBottom', pageProperties.margins.bottom);
|
|
49
|
+
data.append('marginLeft', pageProperties.margins.left);
|
|
50
|
+
data.append('marginRight', pageProperties.margins.right);
|
|
48
51
|
}
|
|
49
52
|
|
|
50
53
|
if (pageProperties.preferCssPageSize) {
|
|
51
54
|
data.append(
|
|
52
|
-
|
|
55
|
+
'preferCssPageSize',
|
|
53
56
|
String(pageProperties.preferCssPageSize)
|
|
54
57
|
);
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
if (pageProperties.printBackground) {
|
|
58
|
-
data.append(
|
|
61
|
+
data.append(
|
|
62
|
+
'printBackground',
|
|
63
|
+
String(pageProperties.printBackground)
|
|
64
|
+
);
|
|
59
65
|
}
|
|
60
66
|
|
|
61
67
|
if (pageProperties.omitBackground) {
|
|
62
|
-
data.append(
|
|
68
|
+
data.append(
|
|
69
|
+
'omitBackground',
|
|
70
|
+
String(pageProperties.omitBackground)
|
|
71
|
+
);
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
if (pageProperties.landscape) {
|
|
66
|
-
data.append(
|
|
75
|
+
data.append('landscape', String(pageProperties.landscape));
|
|
67
76
|
}
|
|
68
77
|
|
|
69
78
|
if (pageProperties.scale) {
|
|
70
79
|
GotenbergUtils.assert(
|
|
71
80
|
pageProperties.scale >= 0.1 && pageProperties.scale <= 2.0,
|
|
72
|
-
|
|
81
|
+
'scale is outside of [0.1 - 2] range'
|
|
73
82
|
);
|
|
74
83
|
|
|
75
|
-
data.append(
|
|
84
|
+
data.append('scale', pageProperties.scale);
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
if (pageProperties.nativePageRanges) {
|
|
79
88
|
GotenbergUtils.assert(
|
|
80
89
|
pageProperties.nativePageRanges.from > 0 &&
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
90
|
+
pageProperties.nativePageRanges.to > 0 &&
|
|
91
|
+
pageProperties.nativePageRanges.to >=
|
|
92
|
+
pageProperties.nativePageRanges.from,
|
|
93
|
+
'page ranges syntax error'
|
|
85
94
|
);
|
|
86
95
|
|
|
87
96
|
data.append(
|
|
88
|
-
|
|
97
|
+
'nativePageRanges',
|
|
89
98
|
`${pageProperties.nativePageRanges.from}-${pageProperties.nativePageRanges.to}`
|
|
90
99
|
);
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
102
|
|
|
94
|
-
/**
|
|
95
|
-
* Adds a file to the FormData object.
|
|
96
|
-
*
|
|
97
|
-
* @param {FormData} data - The FormData object to which the file will be added.
|
|
98
|
-
* @param {PathLikeOrReadStream} file - The file to be added (either a PathLike or a ReadStream).
|
|
99
|
-
* @param {string} name - The name to be used for the file in the FormData.
|
|
100
|
-
* @returns {Promise<void>} A Promise that resolves once the file has been added.
|
|
101
|
-
*/
|
|
102
|
-
public static async addFile(data: FormData, file: PathLikeOrReadStream, name: string) {
|
|
103
|
-
if (Buffer.isBuffer(file)) {
|
|
104
|
-
data.append("files", file, name);
|
|
105
|
-
} else if (file instanceof ReadStream) {
|
|
106
|
-
data.append("files", file, name);
|
|
107
|
-
} else {
|
|
108
|
-
await promises.access(file, constants.R_OK);
|
|
109
|
-
data.append("files", createReadStream(file), name);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
103
|
/**
|
|
114
104
|
* Customizes the FormData object based on the provided conversion options.
|
|
115
105
|
*
|
|
@@ -122,25 +112,25 @@ export class ConverterUtils {
|
|
|
122
112
|
options: ConversionOptions
|
|
123
113
|
): Promise<void> {
|
|
124
114
|
if (options.pdfFormat) {
|
|
125
|
-
data.append(
|
|
115
|
+
data.append('pdfa', options.pdfFormat);
|
|
126
116
|
}
|
|
127
117
|
|
|
128
118
|
if (options.pdfUA) {
|
|
129
|
-
data.append(
|
|
119
|
+
data.append('pdfua', String(options.pdfUA));
|
|
130
120
|
}
|
|
131
121
|
|
|
132
122
|
if (options.header) {
|
|
133
|
-
const {header} = options;
|
|
134
|
-
await
|
|
123
|
+
const { header } = options;
|
|
124
|
+
await GotenbergUtils.addFile(data, header, 'header.html');
|
|
135
125
|
}
|
|
136
126
|
|
|
137
127
|
if (options.footer) {
|
|
138
|
-
const {footer} = options;
|
|
139
|
-
await
|
|
128
|
+
const { footer } = options;
|
|
129
|
+
await GotenbergUtils.addFile(data, footer, 'footer.html');
|
|
140
130
|
}
|
|
141
131
|
|
|
142
132
|
if (options.emulatedMediaType) {
|
|
143
|
-
data.append(
|
|
133
|
+
data.append('emulatedMediaType', options.emulatedMediaType);
|
|
144
134
|
}
|
|
145
135
|
|
|
146
136
|
if (options.properties) {
|
|
@@ -148,26 +138,43 @@ export class ConverterUtils {
|
|
|
148
138
|
}
|
|
149
139
|
|
|
150
140
|
if (options.waitDelay) {
|
|
151
|
-
data.append(
|
|
141
|
+
data.append('waitDelay', options.waitDelay);
|
|
152
142
|
}
|
|
153
143
|
|
|
154
144
|
if (options.waitForExpression) {
|
|
155
|
-
data.append(
|
|
145
|
+
data.append('waitForExpression', options.waitForExpression);
|
|
156
146
|
}
|
|
157
147
|
|
|
158
148
|
if (options.userAgent) {
|
|
159
|
-
data.append(
|
|
149
|
+
data.append('userAgent', options.userAgent);
|
|
160
150
|
}
|
|
161
151
|
|
|
162
152
|
if (options.extraHttpHeaders) {
|
|
163
|
-
data.append(
|
|
153
|
+
data.append(
|
|
154
|
+
'extraHttpHeaders',
|
|
155
|
+
JSON.stringify(options.extraHttpHeaders)
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (options.failOnHttpStatusCodes) {
|
|
160
|
+
data.append(
|
|
161
|
+
'failOnHttpStatusCodes',
|
|
162
|
+
JSON.stringify(options.failOnHttpStatusCodes)
|
|
163
|
+
);
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
if (options.failOnConsoleExceptions) {
|
|
167
167
|
data.append(
|
|
168
|
-
|
|
168
|
+
'failOnConsoleExceptions',
|
|
169
169
|
String(options.failOnConsoleExceptions)
|
|
170
170
|
);
|
|
171
171
|
}
|
|
172
|
+
|
|
173
|
+
if (options.skipNetworkIdleEvent) {
|
|
174
|
+
data.append(
|
|
175
|
+
'skipNetworkIdleEvent',
|
|
176
|
+
String(options.skipNetworkIdleEvent)
|
|
177
|
+
);
|
|
178
|
+
}
|
|
172
179
|
}
|
|
173
180
|
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ImageProperties,
|
|
3
|
+
ScreenshotOptions
|
|
4
|
+
} from './../interfaces/screenshot.types';
|
|
5
|
+
import FormData from 'form-data';
|
|
6
|
+
|
|
7
|
+
import { GotenbergUtils } from '../../common';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Utility class for handling common tasks related to screenshot.
|
|
11
|
+
*/
|
|
12
|
+
export class ScreenshotUtils {
|
|
13
|
+
/**
|
|
14
|
+
* Adds page properties to the FormData object based on the provided imageProperties.
|
|
15
|
+
*
|
|
16
|
+
* @param {FormData} data - The FormData object to which page properties will be added.
|
|
17
|
+
* @param {ImageProperties} imageProperties - The page properties to be added to the FormData.
|
|
18
|
+
*/
|
|
19
|
+
public static addImageProperties(
|
|
20
|
+
data: FormData,
|
|
21
|
+
imageProperties: ImageProperties
|
|
22
|
+
): void {
|
|
23
|
+
data.append('format', imageProperties.format);
|
|
24
|
+
|
|
25
|
+
if (imageProperties.quality) {
|
|
26
|
+
GotenbergUtils.assert(
|
|
27
|
+
imageProperties.format === 'jpeg',
|
|
28
|
+
'Compression quality is exclusively supported for JPEG format.'
|
|
29
|
+
);
|
|
30
|
+
GotenbergUtils.assert(
|
|
31
|
+
imageProperties.quality >= 0 && imageProperties.quality <= 100,
|
|
32
|
+
'Invalid compression quality. Please provide a value between 0 and 100.'
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
data.append('quality', imageProperties.quality);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (imageProperties.omitBackground) {
|
|
39
|
+
data.append(
|
|
40
|
+
'omitBackground',
|
|
41
|
+
String(imageProperties.omitBackground)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Customizes the FormData object based on the provided screenshot options.
|
|
48
|
+
*
|
|
49
|
+
* @param {FormData} data - The FormData object to be customized.
|
|
50
|
+
* @param {ScreenshotOptions} options - The screenshot options to apply to the FormData.
|
|
51
|
+
* @returns {Promise<void>} A Promise that resolves once the customization is complete.
|
|
52
|
+
*/
|
|
53
|
+
public static async customize(
|
|
54
|
+
data: FormData,
|
|
55
|
+
options: ScreenshotOptions
|
|
56
|
+
): Promise<void> {
|
|
57
|
+
if (options.header) {
|
|
58
|
+
const { header } = options;
|
|
59
|
+
await GotenbergUtils.addFile(data, header, 'header.html');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (options.footer) {
|
|
63
|
+
const { footer } = options;
|
|
64
|
+
await GotenbergUtils.addFile(data, footer, 'footer.html');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (options.emulatedMediaType) {
|
|
68
|
+
data.append('emulatedMediaType', options.emulatedMediaType);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (options.properties) {
|
|
72
|
+
ScreenshotUtils.addImageProperties(data, options.properties);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (options.waitDelay) {
|
|
76
|
+
data.append('waitDelay', options.waitDelay);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (options.waitForExpression) {
|
|
80
|
+
data.append('waitForExpression', options.waitForExpression);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (options.extraHttpHeaders) {
|
|
84
|
+
data.append(
|
|
85
|
+
'extraHttpHeaders',
|
|
86
|
+
JSON.stringify(options.extraHttpHeaders)
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (options.failOnHttpStatusCodes) {
|
|
91
|
+
data.append(
|
|
92
|
+
'failOnHttpStatusCodes',
|
|
93
|
+
JSON.stringify(options.failOnHttpStatusCodes)
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (options.failOnConsoleExceptions) {
|
|
98
|
+
data.append(
|
|
99
|
+
'failOnConsoleExceptions',
|
|
100
|
+
String(options.failOnConsoleExceptions)
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (options.skipNetworkIdleEvent) {
|
|
105
|
+
data.append(
|
|
106
|
+
'skipNetworkIdleEvent',
|
|
107
|
+
String(options.skipNetworkIdleEvent)
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (options.optimizeForSpeed) {
|
|
112
|
+
data.append('optimizeForSpeed', String(options.optimizeForSpeed));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|