UNPKG

@shelf/aws-lambda-libreoffice

Version:

Utility to work with Docker version of LibreOffice in Lambda

51 lines (49 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_ARGS = void 0; exports.convertTo = convertTo; var _child_process = _interopRequireDefault(require("child_process")); var _util = _interopRequireDefault(require("util")); var _nodePath = _interopRequireDefault(require("node:path")); var _cleanup = require("./cleanup"); var _logs = require("./logs"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const exec = _util.default.promisify(_child_process.default.exec); const DEFAULT_ARGS = ['--headless', '--invisible', '--nodefault', '--view', '--nolockcheck', '--nologo', '--norestore']; exports.DEFAULT_ARGS = DEFAULT_ARGS; const LO_BINARY_PATH = 'libreoffice7.6'; async function convertTo(filename, format) { await (0, _cleanup.cleanupTempFiles)(); const argumentsString = DEFAULT_ARGS.join(' '); const outputFilename = filename.split(/\\ /).join(' '); const cmd = `cd /tmp && ${LO_BINARY_PATH} ${argumentsString} --convert-to ${format} --outdir /tmp '/tmp/${outputFilename}'`; let logs; let err; // due to an unknown issue, we need to run command twice try { const { stdout, stderr } = await exec(cmd); logs = stdout; err = stderr; } catch (e) { const { stdout, stderr } = await exec(cmd); logs = stdout; err = stderr; } finally { await exec(`rm '/tmp/${outputFilename}'`); await (0, _cleanup.cleanupTempFiles)(); } if (err) { throw new Error(`Cannot generate PDF preview for .${_nodePath.default.extname(outputFilename)} file`, { cause: logs }); } return (0, _logs.getConvertedFilePath)(logs.toString()); }