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.
Files changed (111) hide show
  1. package/README.md +147 -42
  2. package/dist/chromium/converters/converter.d.ts +1 -1
  3. package/dist/chromium/converters/converter.js +1 -1
  4. package/dist/chromium/converters/converter.js.map +1 -1
  5. package/dist/chromium/converters/html.converter.d.ts +9 -4
  6. package/dist/chromium/converters/html.converter.js +7 -3
  7. package/dist/chromium/converters/html.converter.js.map +1 -1
  8. package/dist/chromium/converters/markdown.converter.d.ts +9 -4
  9. package/dist/chromium/converters/markdown.converter.js +7 -3
  10. package/dist/chromium/converters/markdown.converter.js.map +1 -1
  11. package/dist/chromium/converters/url.converter.d.ts +9 -4
  12. package/dist/chromium/converters/url.converter.js +6 -2
  13. package/dist/chromium/converters/url.converter.js.map +1 -1
  14. package/dist/chromium/index.d.ts +6 -3
  15. package/dist/chromium/index.js +7 -1
  16. package/dist/chromium/index.js.map +1 -1
  17. package/dist/chromium/interfaces/common.types.d.ts +13 -0
  18. package/dist/chromium/interfaces/common.types.js +3 -0
  19. package/dist/chromium/interfaces/common.types.js.map +1 -0
  20. package/dist/chromium/interfaces/converter.types.d.ts +4 -10
  21. package/dist/chromium/interfaces/screenshot.types.d.ts +10 -0
  22. package/dist/chromium/interfaces/screenshot.types.js +3 -0
  23. package/dist/chromium/interfaces/screenshot.types.js.map +1 -0
  24. package/dist/chromium/screenshots/html.screenshot.d.ts +54 -0
  25. package/dist/chromium/screenshots/html.screenshot.js +67 -0
  26. package/dist/chromium/screenshots/html.screenshot.js.map +1 -0
  27. package/dist/chromium/screenshots/markdown.screenshot.d.ts +52 -0
  28. package/dist/chromium/screenshots/markdown.screenshot.js +66 -0
  29. package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -0
  30. package/dist/chromium/screenshots/screenshot.d.ts +18 -0
  31. package/dist/chromium/screenshots/screenshot.js +21 -0
  32. package/dist/chromium/screenshots/screenshot.js.map +1 -0
  33. package/dist/chromium/screenshots/url.screenshot.d.ts +50 -0
  34. package/dist/chromium/screenshots/url.screenshot.js +66 -0
  35. package/dist/chromium/screenshots/url.screenshot.js.map +1 -0
  36. package/dist/chromium/utils/converter.utils.d.ts +2 -12
  37. package/dist/chromium/utils/converter.utils.js +36 -50
  38. package/dist/chromium/utils/converter.utils.js.map +1 -1
  39. package/dist/chromium/utils/screenshot.utils.d.ts +22 -0
  40. package/dist/chromium/utils/screenshot.utils.js +75 -0
  41. package/dist/chromium/utils/screenshot.utils.js.map +1 -0
  42. package/dist/common/gotenberg.utils.d.ts +11 -1
  43. package/dist/common/gotenberg.utils.js +25 -2
  44. package/dist/common/gotenberg.utils.js.map +1 -1
  45. package/dist/common/index.d.ts +3 -3
  46. package/dist/common/index.js.map +1 -1
  47. package/dist/common/types.d.ts +1 -1
  48. package/dist/gotenberg.js +4 -3
  49. package/dist/gotenberg.js.map +1 -1
  50. package/dist/libre-office/index.d.ts +2 -2
  51. package/dist/libre-office/index.js.map +1 -1
  52. package/dist/libre-office/utils/constants.js +80 -76
  53. package/dist/libre-office/utils/constants.js.map +1 -1
  54. package/dist/libre-office/utils/libre-office.utils.d.ts +3 -3
  55. package/dist/libre-office/utils/libre-office.utils.js +5 -5
  56. package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
  57. package/dist/main.config.d.ts +6 -1
  58. package/dist/main.config.js +11 -6
  59. package/dist/main.config.js.map +1 -1
  60. package/dist/main.d.ts +3 -3
  61. package/dist/main.js +4 -1
  62. package/dist/main.js.map +1 -1
  63. package/dist/pdf-engines/index.d.ts +1 -1
  64. package/dist/pdf-engines/index.js.map +1 -1
  65. package/dist/pdf-engines/pdf.engine.d.ts +3 -3
  66. package/dist/pdf-engines/pdf.engine.js +5 -5
  67. package/dist/pdf-engines/pdf.engine.js.map +1 -1
  68. package/dist/pdf-engines/utils/engine.utils.d.ts +2 -2
  69. package/dist/pdf-engines/utils/engine.utils.js +3 -3
  70. package/dist/pdf-engines/utils/engine.utils.js.map +1 -1
  71. package/package.json +20 -12
  72. package/src/.prettierrc.yml +4 -0
  73. package/src/chromium/converters/converter.ts +2 -2
  74. package/src/chromium/converters/html.converter.ts +37 -27
  75. package/src/chromium/converters/markdown.converter.ts +32 -26
  76. package/src/chromium/converters/tests/html.converter.test.ts +97 -73
  77. package/src/chromium/converters/tests/markdown.converter.test.ts +102 -77
  78. package/src/chromium/converters/tests/url.converter.test.ts +90 -66
  79. package/src/chromium/converters/url.converter.ts +31 -25
  80. package/src/chromium/index.ts +6 -3
  81. package/src/chromium/interfaces/common.types.ts +15 -0
  82. package/src/chromium/interfaces/converter.types.ts +4 -12
  83. package/src/chromium/interfaces/screenshot.types.ts +12 -0
  84. package/src/chromium/screenshots/html.screenshot.ts +100 -0
  85. package/src/chromium/screenshots/markdown.screenshot.ts +95 -0
  86. package/src/chromium/screenshots/screenshot.ts +22 -0
  87. package/src/chromium/screenshots/tests/html.screenshot.test.ts +192 -0
  88. package/src/chromium/screenshots/tests/markdown.screenshot.test.ts +176 -0
  89. package/src/chromium/screenshots/tests/url.screenshot.test.ts +166 -0
  90. package/src/chromium/screenshots/url.screenshot.ts +91 -0
  91. package/src/chromium/utils/converter.utils.ts +67 -60
  92. package/src/chromium/utils/screenshot.utils.ts +115 -0
  93. package/src/chromium/utils/tests/converter.utils.test.ts +250 -168
  94. package/src/chromium/utils/tests/screenshot.utils.test.ts +284 -0
  95. package/src/common/constants.ts +3 -3
  96. package/src/common/gotenberg.utils.ts +39 -8
  97. package/src/common/index.ts +3 -3
  98. package/src/common/tests/gotenberg.utils.test.ts +84 -31
  99. package/src/common/types.ts +2 -2
  100. package/src/gotenberg.ts +9 -9
  101. package/src/libre-office/index.ts +2 -2
  102. package/src/libre-office/utils/constants.ts +80 -76
  103. package/src/libre-office/utils/libre-office.utils.ts +21 -18
  104. package/src/libre-office/utils/tests/libre-office.utils.test.ts +58 -49
  105. package/src/main.config.ts +19 -13
  106. package/src/main.ts +10 -3
  107. package/src/pdf-engines/index.ts +1 -1
  108. package/src/pdf-engines/pdf.engine.ts +23 -19
  109. package/src/pdf-engines/tests/pdf.engine.test.ts +52 -49
  110. package/src/pdf-engines/utils/engine.utils.ts +12 -9
  111. package/src/pdf-engines/utils/tests/engine.utils.test.ts +23 -23
@@ -1,12 +1,10 @@
1
- import {constants, createReadStream, promises} from "fs";
2
- import FormData from "form-data";
1
+ import FormData from 'form-data';
3
2
 
4
3
  import {
5
4
  ConversionOptions,
6
- PageProperties,
7
- } from "../interfaces/converter.types";
8
- import {GotenbergUtils, PathLikeOrReadStream} from "../../common";
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 && pageProperties.size.height >= 1.5,
28
- "size is smaller than the minimum printing requirements (i.e. 1.0 x 1.5 in)"
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("paperWidth", pageProperties.size.width);
32
- data.append("paperHeight", pageProperties.size.height);
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
- pageProperties.margins.bottom >= 0 &&
39
- pageProperties.margins.left >= 0 &&
40
- pageProperties.margins.left >= 0,
41
- "negative margins are not allowed"
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("marginTop", pageProperties.margins.top);
45
- data.append("marginBottom", pageProperties.margins.bottom);
46
- data.append("marginLeft", pageProperties.margins.left);
47
- data.append("marginRight", pageProperties.margins.right);
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
- "preferCssPageSize",
55
+ 'preferCssPageSize',
53
56
  String(pageProperties.preferCssPageSize)
54
57
  );
55
58
  }
56
59
 
57
60
  if (pageProperties.printBackground) {
58
- data.append("printBackground", String(pageProperties.printBackground));
61
+ data.append(
62
+ 'printBackground',
63
+ String(pageProperties.printBackground)
64
+ );
59
65
  }
60
66
 
61
67
  if (pageProperties.omitBackground) {
62
- data.append("omitBackground", String(pageProperties.omitBackground));
68
+ data.append(
69
+ 'omitBackground',
70
+ String(pageProperties.omitBackground)
71
+ );
63
72
  }
64
73
 
65
74
  if (pageProperties.landscape) {
66
- data.append("landscape", String(pageProperties.landscape));
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
- "scale is outside of [0.1 - 2] range"
81
+ 'scale is outside of [0.1 - 2] range'
73
82
  );
74
83
 
75
- data.append("scale", pageProperties.scale);
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
- pageProperties.nativePageRanges.to > 0 &&
82
- pageProperties.nativePageRanges.to >=
83
- pageProperties.nativePageRanges.from,
84
- "page ranges syntax error"
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
- "nativePageRanges",
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("pdfa", options.pdfFormat);
115
+ data.append('pdfa', options.pdfFormat);
126
116
  }
127
117
 
128
118
  if (options.pdfUA) {
129
- data.append("pdfua", String(options.pdfUA));
119
+ data.append('pdfua', String(options.pdfUA));
130
120
  }
131
121
 
132
122
  if (options.header) {
133
- const {header} = options;
134
- await ConverterUtils.addFile(data, header, "header.html")
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 ConverterUtils.addFile(data, footer, "footer.html")
128
+ const { footer } = options;
129
+ await GotenbergUtils.addFile(data, footer, 'footer.html');
140
130
  }
141
131
 
142
132
  if (options.emulatedMediaType) {
143
- data.append("emulatedMediaType", options.emulatedMediaType);
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("waitDelay", options.waitDelay);
141
+ data.append('waitDelay', options.waitDelay);
152
142
  }
153
143
 
154
144
  if (options.waitForExpression) {
155
- data.append("waitForExpression", options.waitForExpression);
145
+ data.append('waitForExpression', options.waitForExpression);
156
146
  }
157
147
 
158
148
  if (options.userAgent) {
159
- data.append("userAgent", options.userAgent);
149
+ data.append('userAgent', options.userAgent);
160
150
  }
161
151
 
162
152
  if (options.extraHttpHeaders) {
163
- data.append("extraHttpHeaders", JSON.stringify(options.extraHttpHeaders));
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
- "failOnConsoleExceptions",
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
+ }