chromiumly 3.0.0 → 3.0.1

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 CHANGED
@@ -251,13 +251,17 @@ type ScreenshotOptions = {
251
251
  ### LibreOffice
252
252
 
253
253
  The `LibreOffice` class comes with a single method `convert`. This method interacts with [LibreOffice](https://gotenberg.dev/docs/routes#convert-with-libreoffice) route to convert different documents to PDF files. You can find the file extensions
254
- accepted [here](https://gotenberg.dev/docs/routes#convert-with-libreoffice#route).
254
+ accepted [here](https://gotenberg.dev/docs/routes#convert-with-libreoffice).
255
255
 
256
256
  ```typescript
257
257
  import { LibreOffice } from "chromiumly";
258
258
 
259
259
  const buffer = await LibreOffice.convert({
260
- files: ["path/to/file.docx", "path/to/file.png"],
260
+ files: [
261
+ "path/to/file.docx",
262
+ "path/to/file.png",
263
+ { data: xlsxFileBuffer, ext: "xlsx" },
264
+ ],
261
265
  });
262
266
  ```
263
267
 
@@ -1,4 +1,13 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { ReadStream } from 'fs';
1
4
  import { Metadata, PdfFormat } from '../../common';
5
+ type FileExtension = '123' | '602' | 'abw' | 'bib' | 'bmp' | 'cdr' | 'cgm' | 'cmx' | 'csv' | 'cwk' | 'dbf' | 'dif' | 'doc' | 'docm' | 'docx' | 'dot' | 'dotm' | 'dotx' | 'dxf' | 'emf' | 'eps' | 'epub' | 'fodg' | 'fodp' | 'fods' | 'fodt' | 'fopd' | 'gif' | 'htm' | 'html' | 'hwp' | 'jpeg' | 'jpg' | 'key' | 'ltx' | 'lwp' | 'mcw' | 'met' | 'mml' | 'mw' | 'numbers' | 'odd' | 'odg' | 'odm' | 'odp' | 'ods' | 'odt' | 'otg' | 'oth' | 'otp' | 'ots' | 'ott' | 'pages' | 'pbm' | 'pcd' | 'pct' | 'pcx' | 'pdb' | 'pdf' | 'pgm' | 'png' | 'pot' | 'potm' | 'potx' | 'ppm' | 'pps' | 'ppt' | 'pptm' | 'pptx' | 'psd' | 'psw' | 'pub' | 'pwp' | 'pxl' | 'ras' | 'rtf' | 'sda' | 'sdc' | 'sdd' | 'sdp' | 'sdw' | 'sgl' | 'slk' | 'smf' | 'stc' | 'std' | 'sti' | 'stw' | 'svg' | 'svm' | 'swf' | 'sxc' | 'sxd' | 'sxg' | 'sxi' | 'sxm' | 'sxw' | 'tga' | 'tif' | 'tiff' | 'txt' | 'uof' | 'uop' | 'uos' | 'uot' | 'vdx' | 'vor' | 'vsd' | 'vsdm' | 'vsdx' | 'wb2' | 'wk1' | 'wks' | 'wmf' | 'wpd' | 'wpg' | 'wps' | 'xbm' | 'xhtml' | 'xls' | 'xlsb' | 'xlsm' | 'xlsx' | 'xlt' | 'xltm' | 'xltx' | 'xlw' | 'xml' | 'xpm' | 'zabw';
6
+ type FileInfo = {
7
+ data: Buffer | ReadStream;
8
+ ext: FileExtension;
9
+ };
10
+ export type PathLikeOrReadStream = string | FileInfo;
2
11
  export type PageProperties = {
3
12
  landscape?: boolean;
4
13
  nativePageRanges?: {
@@ -14,3 +23,4 @@ export type ConversionOptions = {
14
23
  pdfUA?: boolean;
15
24
  metadata?: Metadata;
16
25
  };
26
+ export {};
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { PathLikeOrReadStream, PdfFormat, Metadata } from '../common';
3
- import { PageProperties } from './interfaces/libre-office.types';
2
+ import { PdfFormat, Metadata } from '../common';
3
+ import { PageProperties, PathLikeOrReadStream } from './interfaces/libre-office.types';
4
4
  /**
5
5
  * Class representing a LibreOffice for various operations such as merging and conversion.
6
6
  */
@@ -1 +1 @@
1
- {"version":3,"file":"libre-office.js","sourceRoot":"","sources":["../../src/libre-office/libre-office.ts"],"names":[],"mappings":";;;;AAAA,kEAAiC;AAEjC,gDAA4C;AAC5C,sCAKmB;AAEnB,mEAA8D;AAE9D;;GAEG;AACH,MAAa,WAAW;IACpB;;;;;;;;;;OAUG;IACI,MAAM,CAAO,OAAO;qEAAC,EACxB,KAAK,EACL,UAAU,EACV,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EAQX;YACG,MAAM,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;YAE5B,MAAM,qCAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,qCAAgB,CAAC,SAAS,CAAC,IAAI,EAAE;gBACnC,UAAU;gBACV,KAAK;gBACL,IAAI;gBACJ,KAAK;gBACL,QAAQ;aACX,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,GAAG,wBAAU,CAAC,kBAAkB,IAAI,wBAAU,CAAC,iBAAiB,IAAI,wBAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAE9H,OAAO,uBAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;KAAA;CACJ;AA1CD,kCA0CC"}
1
+ {"version":3,"file":"libre-office.js","sourceRoot":"","sources":["../../src/libre-office/libre-office.ts"],"names":[],"mappings":";;;;AAAA,kEAAiC;AAEjC,gDAA4C;AAC5C,sCAAgE;AAKhE,mEAA8D;AAE9D;;GAEG;AACH,MAAa,WAAW;IACpB;;;;;;;;;;OAUG;IACI,MAAM,CAAO,OAAO;qEAAC,EACxB,KAAK,EACL,UAAU,EACV,IAAI,EACJ,KAAK,EACL,KAAK,EACL,QAAQ,EAQX;YACG,MAAM,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAC;YAE5B,MAAM,qCAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,qCAAgB,CAAC,SAAS,CAAC,IAAI,EAAE;gBACnC,UAAU;gBACV,KAAK;gBACL,IAAI;gBACJ,KAAK;gBACL,QAAQ;aACX,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,GAAG,wBAAU,CAAC,kBAAkB,IAAI,wBAAU,CAAC,iBAAiB,IAAI,wBAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YAE9H,OAAO,uBAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;KAAA;CACJ;AA1CD,kCA0CC"}
@@ -1,10 +1,10 @@
1
1
  import FormData from 'form-data';
2
- import { PathLikeOrReadStream } from '../../common';
3
- import { ConversionOptions, PageProperties } from '../interfaces/libre-office.types';
2
+ import { ConversionOptions, PageProperties, PathLikeOrReadStream } from '../interfaces/libre-office.types';
4
3
  /**
5
4
  * Utility class for handling common tasks related to LibreOffice conversions.
6
5
  */
7
6
  export declare class LibreOfficeUtils {
7
+ private static getFileInfo;
8
8
  /**
9
9
  * Adds files to the FormData object for LibreOffice conversion.
10
10
  *
@@ -4,13 +4,27 @@ exports.LibreOfficeUtils = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = tslib_1.__importDefault(require("path"));
7
- const file_type_1 = require("file-type");
8
7
  const common_1 = require("../../common");
9
8
  const constants_1 = require("./constants");
10
9
  /**
11
10
  * Utility class for handling common tasks related to LibreOffice conversions.
12
11
  */
13
12
  class LibreOfficeUtils {
13
+ static getFileInfo(file) {
14
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
15
+ if (typeof file === 'string') {
16
+ yield fs_1.promises.access(file, fs_1.constants.R_OK);
17
+ const filename = path_1.default.basename(path_1.default.parse(file).base);
18
+ return {
19
+ data: (0, fs_1.createReadStream)(file),
20
+ ext: path_1.default.extname(filename).slice(1)
21
+ };
22
+ }
23
+ else {
24
+ return { data: file.data, ext: file.ext };
25
+ }
26
+ });
27
+ }
14
28
  /**
15
29
  * Adds files to the FormData object for LibreOffice conversion.
16
30
  *
@@ -20,32 +34,13 @@ class LibreOfficeUtils {
20
34
  */
21
35
  static addFiles(files, data) {
22
36
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
- for (const [key, value] of files.entries()) {
24
- let file = value;
25
- let fileInfo;
26
- if (Buffer.isBuffer(value)) {
27
- fileInfo = yield (0, file_type_1.fromBuffer)(value);
28
- }
29
- else if (value instanceof fs_1.ReadStream) {
30
- fileInfo = yield (0, file_type_1.fromStream)(value);
37
+ yield Promise.all(files.map((file, key) => tslib_1.__awaiter(this, void 0, void 0, function* () {
38
+ const fileInfo = yield this.getFileInfo(file);
39
+ if (!constants_1.LIBRE_OFFICE_EXTENSIONS.includes(fileInfo.ext)) {
40
+ throw new Error(`${fileInfo.ext} is not supported`);
31
41
  }
32
- else {
33
- yield fs_1.promises.access(value, fs_1.constants.R_OK);
34
- const filename = path_1.default.basename(value.toString());
35
- fileInfo = { ext: path_1.default.extname(filename).slice(1) };
36
- file = (0, fs_1.createReadStream)(value);
37
- }
38
- if (!fileInfo) {
39
- throw new Error('File type could not be determined');
40
- }
41
- const extension = fileInfo.ext;
42
- if (constants_1.LIBRE_OFFICE_EXTENSIONS.includes(extension)) {
43
- data.append('files', file, `${key}.${extension}`);
44
- }
45
- else {
46
- throw new Error(`${extension} is not supported`);
47
- }
48
- }
42
+ data.append('files', fileInfo.data, `${key}.${fileInfo.ext}`);
43
+ })));
49
44
  });
50
45
  }
51
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"libre-office.utils.js","sourceRoot":"","sources":["../../../src/libre-office/utils/libre-office.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libre-office.utils.js","sourceRoot":"","sources":["../../../src/libre-office/utils/libre-office.utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chromiumly",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "A lightweight Typescript library that interacts with Gotenberg's different modules to convert a variety of document formats to PDF files.",
5
5
  "main": "dist/main.js",
6
6
  "types": "dist/main.d.ts",
@@ -72,7 +72,6 @@
72
72
  "dependencies": {
73
73
  "config": "3.3.11",
74
74
  "dotenv": "16.4.5",
75
- "file-type": "16.5.4",
76
75
  "form-data": "4.0.0",
77
76
  "node-fetch": "2.7.0"
78
77
  },
@@ -1,5 +1,145 @@
1
+ import { ReadStream } from 'fs';
1
2
  import { Metadata, PdfFormat } from '../../common';
2
3
 
4
+ type FileExtension =
5
+ | '123'
6
+ | '602'
7
+ | 'abw'
8
+ | 'bib'
9
+ | 'bmp'
10
+ | 'cdr'
11
+ | 'cgm'
12
+ | 'cmx'
13
+ | 'csv'
14
+ | 'cwk'
15
+ | 'dbf'
16
+ | 'dif'
17
+ | 'doc'
18
+ | 'docm'
19
+ | 'docx'
20
+ | 'dot'
21
+ | 'dotm'
22
+ | 'dotx'
23
+ | 'dxf'
24
+ | 'emf'
25
+ | 'eps'
26
+ | 'epub'
27
+ | 'fodg'
28
+ | 'fodp'
29
+ | 'fods'
30
+ | 'fodt'
31
+ | 'fopd'
32
+ | 'gif'
33
+ | 'htm'
34
+ | 'html'
35
+ | 'hwp'
36
+ | 'jpeg'
37
+ | 'jpg'
38
+ | 'key'
39
+ | 'ltx'
40
+ | 'lwp'
41
+ | 'mcw'
42
+ | 'met'
43
+ | 'mml'
44
+ | 'mw'
45
+ | 'numbers'
46
+ | 'odd'
47
+ | 'odg'
48
+ | 'odm'
49
+ | 'odp'
50
+ | 'ods'
51
+ | 'odt'
52
+ | 'otg'
53
+ | 'oth'
54
+ | 'otp'
55
+ | 'ots'
56
+ | 'ott'
57
+ | 'pages'
58
+ | 'pbm'
59
+ | 'pcd'
60
+ | 'pct'
61
+ | 'pcx'
62
+ | 'pdb'
63
+ | 'pdf'
64
+ | 'pgm'
65
+ | 'png'
66
+ | 'pot'
67
+ | 'potm'
68
+ | 'potx'
69
+ | 'ppm'
70
+ | 'pps'
71
+ | 'ppt'
72
+ | 'pptm'
73
+ | 'pptx'
74
+ | 'psd'
75
+ | 'psw'
76
+ | 'pub'
77
+ | 'pwp'
78
+ | 'pxl'
79
+ | 'ras'
80
+ | 'rtf'
81
+ | 'sda'
82
+ | 'sdc'
83
+ | 'sdd'
84
+ | 'sdp'
85
+ | 'sdw'
86
+ | 'sgl'
87
+ | 'slk'
88
+ | 'smf'
89
+ | 'stc'
90
+ | 'std'
91
+ | 'sti'
92
+ | 'stw'
93
+ | 'svg'
94
+ | 'svm'
95
+ | 'swf'
96
+ | 'sxc'
97
+ | 'sxd'
98
+ | 'sxg'
99
+ | 'sxi'
100
+ | 'sxm'
101
+ | 'sxw'
102
+ | 'tga'
103
+ | 'tif'
104
+ | 'tiff'
105
+ | 'txt'
106
+ | 'uof'
107
+ | 'uop'
108
+ | 'uos'
109
+ | 'uot'
110
+ | 'vdx'
111
+ | 'vor'
112
+ | 'vsd'
113
+ | 'vsdm'
114
+ | 'vsdx'
115
+ | 'wb2'
116
+ | 'wk1'
117
+ | 'wks'
118
+ | 'wmf'
119
+ | 'wpd'
120
+ | 'wpg'
121
+ | 'wps'
122
+ | 'xbm'
123
+ | 'xhtml'
124
+ | 'xls'
125
+ | 'xlsb'
126
+ | 'xlsm'
127
+ | 'xlsx'
128
+ | 'xlt'
129
+ | 'xltm'
130
+ | 'xltx'
131
+ | 'xlw'
132
+ | 'xml'
133
+ | 'xpm'
134
+ | 'zabw';
135
+
136
+ type FileInfo = {
137
+ data: Buffer | ReadStream;
138
+ ext: FileExtension;
139
+ };
140
+
141
+ export type PathLikeOrReadStream = string | FileInfo;
142
+
3
143
  export type PageProperties = {
4
144
  landscape?: boolean; // Set the paper orientation to landscape (default false)
5
145
  nativePageRanges?: { from: number; to: number }; // Page ranges to print
@@ -1,13 +1,11 @@
1
1
  import FormData from 'form-data';
2
2
 
3
3
  import { Chromiumly } from '../main.config';
4
+ import { GotenbergUtils, PdfFormat, Metadata } from '../common';
4
5
  import {
5
- GotenbergUtils,
6
- PathLikeOrReadStream,
7
- PdfFormat,
8
- Metadata
9
- } from '../common';
10
- import { PageProperties } from './interfaces/libre-office.types';
6
+ PageProperties,
7
+ PathLikeOrReadStream
8
+ } from './interfaces/libre-office.types';
11
9
  import { LibreOfficeUtils } from './utils/libre-office.utils';
12
10
 
13
11
  /**
@@ -1,21 +1,33 @@
1
- import { constants, createReadStream, promises, ReadStream } from 'fs';
1
+ import { constants, createReadStream, promises } from 'fs';
2
2
  import path from 'path';
3
3
 
4
- import { fromStream, fromBuffer } from 'file-type';
5
-
6
4
  import FormData from 'form-data';
7
5
 
8
- import { GotenbergUtils, PathLikeOrReadStream } from '../../common';
6
+ import { GotenbergUtils } from '../../common';
9
7
  import { LIBRE_OFFICE_EXTENSIONS } from './constants';
10
8
  import {
11
9
  ConversionOptions,
12
- PageProperties
10
+ PageProperties,
11
+ PathLikeOrReadStream
13
12
  } from '../interfaces/libre-office.types';
14
13
 
15
14
  /**
16
15
  * Utility class for handling common tasks related to LibreOffice conversions.
17
16
  */
18
17
  export class LibreOfficeUtils {
18
+ private static async getFileInfo(file: PathLikeOrReadStream) {
19
+ if (typeof file === 'string') {
20
+ await promises.access(file, constants.R_OK);
21
+ const filename = path.basename(path.parse(file).base);
22
+ return {
23
+ data: createReadStream(file),
24
+ ext: path.extname(filename).slice(1)
25
+ };
26
+ } else {
27
+ return { data: file.data, ext: file.ext };
28
+ }
29
+ }
30
+
19
31
  /**
20
32
  * Adds files to the FormData object for LibreOffice conversion.
21
33
  *
@@ -27,33 +39,15 @@ export class LibreOfficeUtils {
27
39
  files: PathLikeOrReadStream[],
28
40
  data: FormData
29
41
  ) {
30
- for (const [key, value] of files.entries()) {
31
- let file = value;
32
- let fileInfo;
33
-
34
- if (Buffer.isBuffer(value)) {
35
- fileInfo = await fromBuffer(value);
36
- } else if (value instanceof ReadStream) {
37
- fileInfo = await fromStream(value);
38
- } else {
39
- await promises.access(value, constants.R_OK);
40
- const filename = path.basename(value.toString());
41
- fileInfo = { ext: path.extname(filename).slice(1) };
42
- file = createReadStream(value);
43
- }
44
-
45
- if (!fileInfo) {
46
- throw new Error('File type could not be determined');
47
- }
48
-
49
- const extension = fileInfo.ext;
50
-
51
- if (LIBRE_OFFICE_EXTENSIONS.includes(extension)) {
52
- data.append('files', file, `${key}.${extension}`);
53
- } else {
54
- throw new Error(`${extension} is not supported`);
55
- }
56
- }
42
+ await Promise.all(
43
+ files.map(async (file, key) => {
44
+ const fileInfo = await this.getFileInfo(file);
45
+ if (!LIBRE_OFFICE_EXTENSIONS.includes(fileInfo.ext)) {
46
+ throw new Error(`${fileInfo.ext} is not supported`);
47
+ }
48
+ data.append('files', fileInfo.data, `${key}.${fileInfo.ext}`);
49
+ })
50
+ );
57
51
  }
58
52
 
59
53
  /**
@@ -3,12 +3,10 @@ import { promises, createReadStream } from 'fs';
3
3
  import { LibreOfficeUtils } from '../libre-office.utils';
4
4
 
5
5
  import FormData from 'form-data';
6
- import FileType from 'file-type';
7
6
 
8
7
  describe('LibreOfficeUtils', () => {
9
8
  const mockPromisesAccess = jest.spyOn(promises, 'access');
10
9
  const mockFormDataAppend = jest.spyOn(FormData.prototype, 'append');
11
- const mockFromBuffer = jest.spyOn(FileType, 'fromBuffer');
12
10
 
13
11
  const data = new FormData();
14
12
 
@@ -37,12 +35,11 @@ describe('LibreOfficeUtils', () => {
37
35
  describe('when files parameter contains a buffer', () => {
38
36
  it('should append each file to data', async () => {
39
37
  mockPromisesAccess.mockResolvedValueOnce();
40
- mockFromBuffer.mockResolvedValueOnce({
41
- ext: 'docx',
42
- mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
43
- });
44
38
  await LibreOfficeUtils.addFiles(
45
- [Buffer.from('data'), 'path/to/file.bib'],
39
+ [
40
+ { data: Buffer.from('data'), ext: 'csv' },
41
+ 'path/to/file.bib'
42
+ ],
46
43
  data
47
44
  );
48
45
  expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
@@ -53,14 +50,16 @@ describe('LibreOfficeUtils', () => {
53
50
  describe('when one of the files has undetermined format', () => {
54
51
  it('should throw an error', async () => {
55
52
  mockPromisesAccess.mockResolvedValueOnce();
56
- mockFromBuffer.mockResolvedValueOnce(undefined);
57
53
 
58
54
  await expect(
59
55
  LibreOfficeUtils.addFiles(
60
- [Buffer.from('data'), 'path/to/file.bib'],
56
+ [
57
+ { data: Buffer.from('data'), ext: 'docx' },
58
+ 'path/to/file.none'
59
+ ],
61
60
  data
62
61
  )
63
- ).rejects.toThrow('File type could not be determined');
62
+ ).rejects.toThrow('none is not supported');
64
63
  });
65
64
  });
66
65