@shelf/aws-lambda-libreoffice
Version:
Utility to work with Docker version of LibreOffice in Lambda
51 lines (49 loc) • 1.7 kB
JavaScript
;
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());
}