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,20 +1,20 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import {createReadStream, promises} from "fs";
3
- import FormData from "form-data";
4
- import fs from "fs/promises";
5
- import fetch from "node-fetch";
6
- import path from "path";
2
+ import { createReadStream, promises } from 'fs';
3
+ import FormData from 'form-data';
4
+ import fs from 'fs/promises';
5
+ import fetch from 'node-fetch';
6
+ import path from 'path';
7
7
 
8
- import {PdfFormat} from "../../common";
9
- import {PDFEngine} from "../pdf.engine";
8
+ import { PdfFormat } from '../../common';
9
+ import { PDFEngine } from '../pdf.engine';
10
10
 
11
- const {Response} = jest.requireActual("node-fetch");
12
- jest.mock("node-fetch", () => jest.fn());
11
+ const { Response } = jest.requireActual('node-fetch');
12
+ jest.mock('node-fetch', () => jest.fn());
13
13
 
14
- describe("PDFEngine", () => {
15
- const mockPromisesAccess = jest.spyOn(promises, "access");
14
+ describe('PDFEngine', () => {
15
+ const mockPromisesAccess = jest.spyOn(promises, 'access');
16
16
  const mockFetch = fetch as jest.MockedFunction<typeof fetch>;
17
- const mockFormDataAppend = jest.spyOn(FormData.prototype, "append");
17
+ const mockFormDataAppend = jest.spyOn(FormData.prototype, 'append');
18
18
 
19
19
  beforeEach(() => {
20
20
  (createReadStream as jest.Mock) = jest
@@ -26,72 +26,75 @@ describe("PDFEngine", () => {
26
26
  jest.resetAllMocks();
27
27
  });
28
28
 
29
- describe("convert", () => {
30
- describe("when no properties are passed", () => {
31
- it("should return a buffer", async () => {
29
+ describe('convert', () => {
30
+ describe('when no properties are passed', () => {
31
+ it('should return a buffer', async () => {
32
32
  mockPromisesAccess.mockResolvedValue();
33
- mockFetch.mockResolvedValue(new Response("content"));
33
+ mockFetch.mockResolvedValue(new Response('content'));
34
34
  const buffer = await PDFEngine.convert({
35
- files: ["path/to/file.docx", "path/to/file.bib"],
35
+ files: ['path/to/file.docx', 'path/to/file.bib']
36
36
  });
37
- expect(buffer).toEqual(Buffer.from("content"));
37
+ expect(buffer).toEqual(Buffer.from('content'));
38
38
  expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
39
39
  });
40
40
  });
41
41
 
42
- describe("when properties are passed", () => {
43
- it("should return a buffer", async () => {
42
+ describe('when properties are passed', () => {
43
+ it('should return a buffer', async () => {
44
44
  mockPromisesAccess.mockResolvedValue();
45
- mockFetch.mockResolvedValue(new Response("content"));
45
+ mockFetch.mockResolvedValue(new Response('content'));
46
46
  const buffer = await PDFEngine.convert({
47
- files: ["path/to/file.docx", "path/to/file.bib"],
48
- properties: {landscape: true},
47
+ files: ['path/to/file.docx', 'path/to/file.bib'],
48
+ properties: { landscape: true },
49
49
  pdfFormat: PdfFormat.A_1a,
50
50
  pdfUA: true,
51
- merge: true,
51
+ merge: true
52
52
  });
53
- expect(buffer).toEqual(Buffer.from("content"));
53
+ expect(buffer).toEqual(Buffer.from('content'));
54
54
  expect(mockFormDataAppend).toHaveBeenCalledTimes(6);
55
55
  });
56
56
  });
57
57
  });
58
58
 
59
- describe("merge", () => {
60
- it("should return a buffer", async () => {
59
+ describe('merge', () => {
60
+ it('should return a buffer', async () => {
61
61
  mockPromisesAccess.mockResolvedValue();
62
- mockFetch.mockResolvedValue(new Response("content"));
62
+ mockFetch.mockResolvedValue(new Response('content'));
63
63
  const buffer = await PDFEngine.merge({
64
- files: ["path/to/file.pdf", "path/to/another-file.pdf"],
64
+ files: ['path/to/file.pdf', 'path/to/another-file.pdf']
65
65
  });
66
- expect(buffer).toEqual(Buffer.from("content"));
66
+ expect(buffer).toEqual(Buffer.from('content'));
67
67
  expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
68
68
  });
69
69
  });
70
70
 
71
- describe("generate", () => {
72
- const mockFilename = "test.pdf";
73
- const mockBuffer = Buffer.from("mock pdf content");
71
+ describe('generate', () => {
72
+ const mockFilename = 'test.pdf';
73
+ const mockBuffer = Buffer.from('mock pdf content');
74
74
 
75
75
  afterAll(() => {
76
76
  jest.restoreAllMocks();
77
77
  });
78
78
 
79
- it("should generate a PDF file", async () => {
80
- const mockGeneratedDir = path.join(process.cwd(), "__generated__");
81
- const mockGeneratedFilePath = path.join(mockGeneratedDir, mockFilename);
79
+ it('should generate a PDF file', async () => {
80
+ const mockGeneratedDir = path.join(process.cwd(), '__generated__');
81
+ const mockGeneratedFilePath = path.join(
82
+ mockGeneratedDir,
83
+ mockFilename
84
+ );
82
85
 
83
86
  const mockPromisesMkDir = jest
84
- .spyOn(fs, "mkdir")
87
+ .spyOn(fs, 'mkdir')
85
88
  .mockResolvedValueOnce(mockGeneratedDir);
86
89
 
87
90
  const mockPromisesWriteFile = jest
88
- .spyOn(fs, "writeFile")
91
+ .spyOn(fs, 'writeFile')
89
92
  .mockResolvedValueOnce();
90
93
 
91
94
  await PDFEngine.generate(mockFilename, mockBuffer);
92
95
 
93
96
  expect(mockPromisesMkDir).toHaveBeenCalledWith(mockGeneratedDir, {
94
- recursive: true,
97
+ recursive: true
95
98
  });
96
99
 
97
100
  expect(mockPromisesWriteFile).toHaveBeenCalledWith(
@@ -100,24 +103,24 @@ describe("PDFEngine", () => {
100
103
  );
101
104
  });
102
105
 
103
- it("should handle errors during file generation", async () => {
104
- jest
105
- .spyOn(fs, "mkdir")
106
- .mockRejectedValueOnce(new Error("Cannot create directory"));
106
+ it('should handle errors during file generation', async () => {
107
+ jest.spyOn(fs, 'mkdir').mockRejectedValueOnce(
108
+ new Error('Cannot create directory')
109
+ );
107
110
 
108
111
  await expect(
109
112
  PDFEngine.generate(mockFilename, mockBuffer)
110
- ).rejects.toThrow("Cannot create directory");
113
+ ).rejects.toThrow('Cannot create directory');
111
114
  });
112
115
 
113
- it("should handle errors during file writing", async () => {
114
- jest
115
- .spyOn(fs, "writeFile")
116
- .mockRejectedValueOnce(new Error("Failed to write to file"));
116
+ it('should handle errors during file writing', async () => {
117
+ jest.spyOn(fs, 'writeFile').mockRejectedValueOnce(
118
+ new Error('Failed to write to file')
119
+ );
117
120
 
118
121
  await expect(
119
122
  PDFEngine.generate(mockFilename, mockBuffer)
120
- ).rejects.toThrow("Failed to write to file");
123
+ ).rejects.toThrow('Failed to write to file');
121
124
  });
122
125
  });
123
126
  });
@@ -1,8 +1,8 @@
1
- import {constants, createReadStream, promises, ReadStream} from "fs";
2
- import path from "path";
1
+ import { constants, createReadStream, promises, ReadStream } from 'fs';
2
+ import path from 'path';
3
3
 
4
- import FormData from "form-data";
5
- import {PathLikeOrReadStream} from "../../common";
4
+ import FormData from 'form-data';
5
+ import { PathLikeOrReadStream } from '../../common';
6
6
 
7
7
  /**
8
8
  * Utility class for handling common tasks related to PDF engine operations.
@@ -15,18 +15,21 @@ export class PDFEngineUtils {
15
15
  * @param {FormData} data - The FormData object to which PDF files will be added.
16
16
  * @throws {Error} Throws an error if the file extension is not supported.
17
17
  */
18
- public static async addFiles(files: PathLikeOrReadStream[], data: FormData) {
18
+ public static async addFiles(
19
+ files: PathLikeOrReadStream[],
20
+ data: FormData
21
+ ) {
19
22
  for (const [key, file] of files.entries()) {
20
- const filename = `file${key}.pdf`
23
+ const filename = `file${key}.pdf`;
21
24
  if (Buffer.isBuffer(file)) {
22
- data.append("files", file, filename);
25
+ data.append('files', file, filename);
23
26
  } else if (file instanceof ReadStream) {
24
- data.append("files", file, filename);
27
+ data.append('files', file, filename);
25
28
  } else {
26
29
  await promises.access(file, constants.R_OK);
27
30
  const filename = path.basename(file.toString());
28
31
  const extension = path.extname(filename);
29
- if (extension === ".pdf") {
32
+ if (extension === '.pdf') {
30
33
  data.append(filename, createReadStream(file));
31
34
  } else {
32
35
  throw new Error(`${extension} is not supported`);
@@ -1,12 +1,12 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import {createReadStream, promises} from "fs";
3
- import FormData from "form-data";
2
+ import { createReadStream, promises } from 'fs';
3
+ import FormData from 'form-data';
4
4
 
5
- import {PDFEngineUtils} from "../engine.utils";
5
+ import { PDFEngineUtils } from '../engine.utils';
6
6
 
7
- describe("PDFEngineUtils", () => {
8
- const mockPromisesAccess = jest.spyOn(promises, "access");
9
- const mockFormDataAppend = jest.spyOn(FormData.prototype, "append");
7
+ describe('PDFEngineUtils', () => {
8
+ const mockPromisesAccess = jest.spyOn(promises, 'access');
9
+ const mockFormDataAppend = jest.spyOn(FormData.prototype, 'append');
10
10
  const data = new FormData();
11
11
 
12
12
  beforeEach(() => {
@@ -19,50 +19,50 @@ describe("PDFEngineUtils", () => {
19
19
  jest.resetAllMocks();
20
20
  });
21
21
 
22
- describe("addFiles", () => {
23
- describe("when files exist", () => {
24
- describe("when files parameter contains paths", () => {
25
- it("should append each file to data", async () => {
22
+ describe('addFiles', () => {
23
+ describe('when files exist', () => {
24
+ describe('when files parameter contains paths', () => {
25
+ it('should append each file to data', async () => {
26
26
  mockPromisesAccess.mockResolvedValue();
27
27
  await PDFEngineUtils.addFiles(
28
- ["path/to/file.pdf", "path/to/another-file.pdf"],
28
+ ['path/to/file.pdf', 'path/to/another-file.pdf'],
29
29
  data
30
30
  );
31
31
  expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
32
32
  });
33
- })
34
- describe("when files parameter contains a buffer", () => {
35
- it("should append each file to data", async () => {
33
+ });
34
+ describe('when files parameter contains a buffer', () => {
35
+ it('should append each file to data', async () => {
36
36
  mockPromisesAccess.mockResolvedValue();
37
37
  await PDFEngineUtils.addFiles(
38
- [Buffer.from("data"), "path/to/another-file.pdf"],
38
+ [Buffer.from('data'), 'path/to/another-file.pdf'],
39
39
  data
40
40
  );
41
41
  expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
42
42
  });
43
- })
43
+ });
44
44
  });
45
45
 
46
- describe("when one of the files is not PDF", () => {
47
- it("should throw an error", async () => {
46
+ describe('when one of the files is not PDF', () => {
47
+ it('should throw an error', async () => {
48
48
  mockPromisesAccess.mockResolvedValue();
49
49
  await expect(() =>
50
50
  PDFEngineUtils.addFiles(
51
- ["path/to/file.docx", "path/to/file.pdf"],
51
+ ['path/to/file.docx', 'path/to/file.pdf'],
52
52
  data
53
53
  )
54
- ).rejects.toThrow(".docx is not supported");
54
+ ).rejects.toThrow('.docx is not supported');
55
55
  });
56
56
  });
57
57
 
58
- describe("when one of the files does not exist", () => {
59
- it("should throw an error", async () => {
58
+ describe('when one of the files does not exist', () => {
59
+ it('should throw an error', async () => {
60
60
  const errorMessage =
61
61
  "ENOENT: no such file or directory, access 'path/to/index.html'";
62
62
  mockPromisesAccess.mockRejectedValue(new Error(errorMessage));
63
63
  await expect(() =>
64
64
  PDFEngineUtils.addFiles(
65
- ["path/to/file.pdf", "path/to/another-file.pdf"],
65
+ ['path/to/file.pdf', 'path/to/another-file.pdf'],
66
66
  data
67
67
  )
68
68
  ).rejects.toThrow(errorMessage);