chromiumly 2.8.0 → 2.10.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 (52) hide show
  1. package/README.md +38 -0
  2. package/dist/chromium/converters/html.converter.d.ts +12 -2
  3. package/dist/chromium/converters/html.converter.js +5 -3
  4. package/dist/chromium/converters/html.converter.js.map +1 -1
  5. package/dist/chromium/converters/markdown.converter.d.ts +12 -2
  6. package/dist/chromium/converters/markdown.converter.js +5 -3
  7. package/dist/chromium/converters/markdown.converter.js.map +1 -1
  8. package/dist/chromium/converters/url.converter.d.ts +12 -2
  9. package/dist/chromium/converters/url.converter.js +5 -3
  10. package/dist/chromium/converters/url.converter.js.map +1 -1
  11. package/dist/chromium/interfaces/converter.types.d.ts +2 -1
  12. package/dist/chromium/screenshots/html.screenshot.js +2 -2
  13. package/dist/chromium/screenshots/html.screenshot.js.map +1 -1
  14. package/dist/chromium/screenshots/markdown.screenshot.js +2 -2
  15. package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -1
  16. package/dist/chromium/screenshots/url.screenshot.js +2 -2
  17. package/dist/chromium/screenshots/url.screenshot.js.map +1 -1
  18. package/dist/chromium/utils/converter.utils.js +3 -0
  19. package/dist/chromium/utils/converter.utils.js.map +1 -1
  20. package/dist/common/constants.d.ts +4 -0
  21. package/dist/common/constants.js +4 -0
  22. package/dist/common/constants.js.map +1 -1
  23. package/dist/common/index.d.ts +1 -1
  24. package/dist/common/types.d.ts +3 -0
  25. package/dist/libre-office/interfaces/libre-office.types.d.ts +1 -0
  26. package/dist/libre-office/utils/constants.js +103 -53
  27. package/dist/libre-office/utils/constants.js.map +1 -1
  28. package/dist/libre-office/utils/libre-office.utils.js +3 -0
  29. package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
  30. package/dist/main.config.d.ts +5 -1
  31. package/dist/main.config.js +5 -1
  32. package/dist/main.config.js.map +1 -1
  33. package/dist/pdf-engines/pdf.engine.d.ts +23 -1
  34. package/dist/pdf-engines/pdf.engine.js +34 -4
  35. package/dist/pdf-engines/pdf.engine.js.map +1 -1
  36. package/package.json +7 -7
  37. package/src/chromium/converters/html.converter.ts +20 -3
  38. package/src/chromium/converters/markdown.converter.ts +20 -3
  39. package/src/chromium/converters/url.converter.ts +20 -3
  40. package/src/chromium/interfaces/converter.types.ts +2 -1
  41. package/src/chromium/utils/converter.utils.ts +3 -0
  42. package/src/chromium/utils/tests/converter.utils.test.ts +21 -2
  43. package/src/common/constants.ts +4 -0
  44. package/src/common/index.ts +1 -1
  45. package/src/common/types.ts +4 -0
  46. package/src/libre-office/interfaces/libre-office.types.ts +1 -0
  47. package/src/libre-office/utils/constants.ts +103 -53
  48. package/src/libre-office/utils/libre-office.utils.ts +7 -0
  49. package/src/libre-office/utils/tests/libre-office.utils.test.ts +15 -0
  50. package/src/main.config.ts +6 -2
  51. package/src/pdf-engines/pdf.engine.ts +52 -1
  52. package/src/pdf-engines/tests/pdf.engine.test.ts +36 -0
@@ -1,82 +1,132 @@
1
1
  export const LIBRE_OFFICE_EXTENSIONS = [
2
+ '123',
3
+ '602',
4
+ 'abw',
2
5
  'bib',
6
+ 'bmp',
7
+ 'cdr',
8
+ 'cgm',
9
+ 'cmx',
10
+ 'csv',
11
+ 'cwk',
12
+ 'dbf',
13
+ 'dif',
3
14
  'doc',
4
- 'xml',
15
+ 'docm',
5
16
  'docx',
6
- 'fodt',
7
- 'html',
8
- 'ltx',
9
- 'txt',
10
- 'odt',
11
- 'ott',
12
- 'pdb',
13
- 'pdf',
14
- 'psw',
15
- 'rtf',
16
- 'sdw',
17
- 'stw',
18
- 'sxw',
19
- 'uot',
20
- 'vor',
21
- 'wps',
22
- 'epub',
23
- 'png',
24
- 'bmp',
17
+ 'dot',
18
+ 'dotm',
19
+ 'dotx',
20
+ 'dxf',
25
21
  'emf',
26
22
  'eps',
23
+ 'epub',
27
24
  'fodg',
25
+ 'fodp',
26
+ 'fods',
27
+ 'fodt',
28
+ 'fopd',
28
29
  'gif',
30
+ 'htm',
31
+ 'html',
32
+ 'hwp',
33
+ 'jpeg',
29
34
  'jpg',
35
+ 'key',
36
+ 'ltx',
37
+ 'lwp',
38
+ 'mcw',
30
39
  'met',
40
+ 'mml',
41
+ 'mw',
42
+ 'numbers',
31
43
  'odd',
44
+ 'odg',
45
+ 'odm',
46
+ 'odp',
47
+ 'ods',
48
+ 'odt',
32
49
  'otg',
50
+ 'oth',
51
+ 'otp',
52
+ 'ots',
53
+ 'ott',
54
+ 'pages',
33
55
  'pbm',
56
+ 'pcd',
34
57
  'pct',
58
+ 'pcx',
59
+ 'pdb',
60
+ 'pdf',
35
61
  'pgm',
62
+ 'png',
63
+ 'pot',
64
+ 'potm',
65
+ 'potx',
36
66
  'ppm',
67
+ 'pps',
68
+ 'ppt',
69
+ 'pptm',
70
+ 'pptx',
71
+ 'psd',
72
+ 'psw',
73
+ 'pub',
74
+ 'pwp',
75
+ 'pxl',
37
76
  'ras',
77
+ 'rtf',
78
+ 'sda',
79
+ 'sdc',
80
+ 'sdd',
81
+ 'sdp',
82
+ 'sdw',
83
+ 'sgl',
84
+ 'slk',
85
+ 'smf',
86
+ 'stc',
38
87
  'std',
88
+ 'sti',
89
+ 'stw',
39
90
  'svg',
40
91
  'svm',
41
92
  'swf',
93
+ 'sxc',
42
94
  'sxd',
95
+ 'sxg',
96
+ 'sxi',
97
+ 'sxm',
43
98
  'sxw',
99
+ 'tga',
100
+ 'tif',
44
101
  'tiff',
45
- 'xhtml',
46
- 'xpm',
47
- 'fodp',
48
- 'pages',
49
- 'potm',
50
- 'pot',
51
- 'pptx',
52
- 'pps',
53
- 'ppt',
54
- 'pwp',
55
- 'sda',
56
- 'sdd',
57
- 'sti',
58
- 'sxi',
102
+ 'txt',
103
+ 'uof',
59
104
  'uop',
60
- 'wmf',
61
- 'csv',
62
- 'dbf',
63
- 'dif',
64
- 'fods',
65
- 'ods',
66
- 'ots',
67
- 'pxl',
68
- 'sdc',
69
- 'slk',
70
- 'stc',
71
- 'sxc',
72
105
  'uos',
106
+ 'uot',
107
+ 'vdx',
108
+ 'vor',
109
+ 'vsd',
110
+ 'vsdm',
111
+ 'vsdx',
112
+ 'wb2',
113
+ 'wk1',
114
+ 'wks',
115
+ 'wmf',
116
+ 'wpd',
117
+ 'wpg',
118
+ 'wps',
119
+ 'xbm',
120
+ 'xhtml',
73
121
  'xls',
74
- 'xlt',
122
+ 'xlsb',
123
+ 'xlsm',
75
124
  'xlsx',
76
- 'tif',
77
- 'jpeg',
78
- 'odp',
79
- 'odg',
80
- 'dotx',
81
- 'xltx'
125
+ 'xlt',
126
+ 'xltm',
127
+ 'xltx',
128
+ 'xlw',
129
+ 'xml',
130
+ 'xpm',
131
+ 'zabw'
82
132
  ];
@@ -81,5 +81,12 @@ export class LibreOfficeUtils {
81
81
  `${pageProperties.nativePageRanges.from}-${pageProperties.nativePageRanges.to}`
82
82
  );
83
83
  }
84
+
85
+ if (pageProperties.exportFormFields === false) {
86
+ data.append(
87
+ 'exportFormFields',
88
+ String(pageProperties.exportFormFields)
89
+ );
90
+ }
84
91
  }
85
92
  }
@@ -109,6 +109,21 @@ describe('LibreOfficeUtils', () => {
109
109
  });
110
110
  });
111
111
 
112
+ describe('Export form fields', () => {
113
+ describe('when exportFormFields parameter is set', () => {
114
+ it('should append exportFormFields to data', () => {
115
+ LibreOfficeUtils.addPageProperties(data, {
116
+ exportFormFields: false
117
+ });
118
+ expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
119
+ expect(data.append).toHaveBeenCalledWith(
120
+ 'exportFormFields',
121
+ 'false'
122
+ );
123
+ });
124
+ });
125
+ });
126
+
112
127
  describe('Page ranges', () => {
113
128
  describe('when nativePageRanges is valid', () => {
114
129
  it('should append nativePageRanges to data', () => {
@@ -15,7 +15,9 @@ export enum ChromiumRoute {
15
15
  * @enum {string}
16
16
  */
17
17
  enum PdfEngineRoute {
18
- MERGE = 'merge'
18
+ MERGE = 'merge',
19
+ READ_METADATA = 'metadata/read',
20
+ WRITE_METADATA = 'metadata/write'
19
21
  }
20
22
 
21
23
  /**
@@ -75,7 +77,9 @@ export class Chromiumly {
75
77
  * @type {Object}
76
78
  */
77
79
  public static readonly PDF_ENGINE_ROUTES = {
78
- merge: PdfEngineRoute.MERGE
80
+ merge: PdfEngineRoute.MERGE,
81
+ readMetadata: PdfEngineRoute.READ_METADATA,
82
+ writeMetadata: PdfEngineRoute.WRITE_METADATA
79
83
  };
80
84
 
81
85
  /**
@@ -4,7 +4,12 @@ import path from 'path';
4
4
  import FormData from 'form-data';
5
5
 
6
6
  import { Chromiumly } from '../main.config';
7
- import { GotenbergUtils, PathLikeOrReadStream, PdfFormat } from '../common';
7
+ import {
8
+ GotenbergUtils,
9
+ PathLikeOrReadStream,
10
+ PdfFormat,
11
+ Metadata
12
+ } from '../common';
8
13
  import { LibreOfficeUtils, PageProperties } from '../libre-office';
9
14
  import { PDFEngineUtils } from './utils/engine.utils';
10
15
 
@@ -50,6 +55,10 @@ export class PDFEngine {
50
55
  }: {
51
56
  files: PathLikeOrReadStream[];
52
57
  properties?: PageProperties;
58
+ /**
59
+ * @deprecated Starting from Gotenberg version 8.0.0, LibreOffice no longer provides support for pdfFormat.
60
+ * @see {@link https://github.com/gotenberg/gotenberg/releases/tag/v8.0.0}
61
+ */
53
62
  pdfFormat?: PdfFormat;
54
63
  pdfUA?: boolean;
55
64
  merge?: boolean;
@@ -79,6 +88,48 @@ export class PDFEngine {
79
88
  return GotenbergUtils.fetch(endpoint, data);
80
89
  }
81
90
 
91
+ /**
92
+ * Reads metadata from the provided files.
93
+ *
94
+ * @param {PathLikeOrReadStream[]} files An array of PathLikes or ReadStreams to the PDF files.
95
+ * @returns {Promise<Buffer>} A Promise resolving to the metadata buffer.
96
+ */
97
+ public static async readMetadata(
98
+ files: PathLikeOrReadStream[]
99
+ ): Promise<Buffer> {
100
+ const data = new FormData();
101
+
102
+ await PDFEngineUtils.addFiles(files, data);
103
+
104
+ const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.readMetadata}`;
105
+
106
+ return GotenbergUtils.fetch(endpoint, data);
107
+ }
108
+
109
+ /**
110
+ * Writes metadata to the provided PDF files.
111
+ *
112
+ * @param {PathLikeOrReadStream[]} files - An array of PathLikes or ReadStreams to the PDF files.
113
+ * @param {Metadata} metadata - Metadata to be written.
114
+ * @returns {Promise<Buffer>} A Promise that resolves to the PDF file containing metadata as a buffer.
115
+ */
116
+ public static async writeMetadata({
117
+ files,
118
+ metadata
119
+ }: {
120
+ files: PathLikeOrReadStream[];
121
+ metadata: Metadata;
122
+ }): Promise<Buffer> {
123
+ const data = new FormData();
124
+ data.append('metadata', JSON.stringify(metadata));
125
+
126
+ await PDFEngineUtils.addFiles(files, data);
127
+
128
+ const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.writeMetadata}`;
129
+
130
+ return GotenbergUtils.fetch(endpoint, data);
131
+ }
132
+
82
133
  /**
83
134
  * Generates a PDF file from a buffer and saves it to the "__generated__" directory.
84
135
  *
@@ -68,6 +68,42 @@ describe('PDFEngine', () => {
68
68
  });
69
69
  });
70
70
 
71
+ describe('readMetadata', () => {
72
+ it('should return a buffer', async () => {
73
+ mockPromisesAccess.mockResolvedValue();
74
+ mockFetch.mockResolvedValue(new Response('content'));
75
+ const buffer = await PDFEngine.readMetadata(['path/to/file.pdf']);
76
+ expect(buffer).toEqual(Buffer.from('content'));
77
+ expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
78
+ });
79
+ });
80
+
81
+ describe('writeMetadata', () => {
82
+ it('should return a buffer', async () => {
83
+ mockPromisesAccess.mockResolvedValue();
84
+ mockFetch.mockResolvedValue(new Response('content'));
85
+ const buffer = await PDFEngine.writeMetadata({
86
+ files: ['path/to/file.pdf'],
87
+ metadata: {
88
+ Author: 'John Doe',
89
+ Copyright: 'John Doe',
90
+ CreationDate: Date.now(),
91
+ Creator: 'Chromiumly',
92
+ Keywords: ['first', 'second'],
93
+ Marked: true,
94
+ ModDate: Date.now(),
95
+ PDFVersion: 1.7,
96
+ Producer: 'Chromiumly',
97
+ Subject: 'Sample',
98
+ Title: 'Sample',
99
+ Trapped: 'Unknown'
100
+ }
101
+ });
102
+ expect(buffer).toEqual(Buffer.from('content'));
103
+ expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
104
+ });
105
+ });
106
+
71
107
  describe('generate', () => {
72
108
  const mockFilename = 'test.pdf';
73
109
  const mockBuffer = Buffer.from('mock pdf content');