diff --git a/src/convert.ts b/src/convert.ts index 9c58e59..670410d 100644 --- a/src/convert.ts +++ b/src/convert.ts @@ -1,4 +1,5 @@ import {execSync} from 'child_process'; +import {basename} from 'path'; import {unpack} from './unpack'; import {cleanupTempFiles} from './cleanup'; import {getConvertedFilePath} from './logs'; @@ -16,17 +17,38 @@ export const defaultArgs = [ const INPUT_PATH = '/opt/lo.tar.br'; const OUTPUT_PATH = '/tmp/instdir/program/soffice.bin'; +const UNOPKG_OUTPUT_PATH = '/tmp/instdir/program/unopkg.bin'; + +type ExtensionOptions = { + extensions: string[]; + shouldThrowOnExtensionFail?: boolean; +}; /** * Converts a file in /tmp to the desired file format * @param {String} filename Name of the file to convert located in /tmp directory * @param {String} format File format to convert incoming file to + * @param {ExtensionOptions} options LibreOffice extensions to be enabled during file conversion * @return {Promise} Absolute path to the converted file */ -export async function convertTo(filename: string, format: string): Promise { +export async function convertTo( + filename: string, + format: string, + options?: ExtensionOptions +): Promise { let logs; cleanupTempFiles(); await unpack({inputPath: INPUT_PATH}); + + if (options && options.extensions && options.extensions.length) { + const {extensions, shouldThrowOnExtensionFail = true} = options; + const enabledExtensions = execSync(`${UNOPKG_OUTPUT_PATH} list --shared`).toString(); + + extensions.forEach(extension => { + enableExtension(enabledExtensions, extension, shouldThrowOnExtensionFail); + }); + } + const cmd = `cd /tmp && ${OUTPUT_PATH} ${defaultArgs.join( ' ' )} --convert-to ${format} --outdir /tmp /tmp/${filename}`; @@ -42,3 +64,19 @@ export async function convertTo(filename: string, format: string): Promise { writeFileSync('/tmp/test.txt', Buffer.from('Hello World!')); - return convertTo('test.txt', `"pdf:writer_pdf_Export"`); + const extensionOptions = {extensions: ['test_extension.oxt']}; + + return convertTo('test.txt', `"pdf:writer_pdf_Export"`, extensionOptions); }; diff --git a/test.sh b/test.sh index fec2f26..1a116a5 100755 --- a/test.sh +++ b/test.sh @@ -3,7 +3,7 @@ cd ../libreoffice-lambda-layer rm -rf layer -unzip layers.zip -d layer +unzip layer.tar.br.zip -d layer cd layer brotli -d lo.tar.br @@ -15,4 +15,4 @@ yarn build docker run --rm \ -v "$PWD":/var/task \ -v "$PWD"/../libreoffice-lambda-layer/layer:/opt \ - lambci/lambda:nodejs12.x test.handler \ No newline at end of file + lambci/lambda:nodejs12.x test.handler diff --git a/test_extension.oxt b/test_extension.oxt new file mode 100644 index 0000000..765b6f6 Binary files /dev/null and b/test_extension.oxt differ