overleaf/services/filestore/app/js/ImageOptimiser.js
Antoine Clausse 7f48c67512 Add prefer-node-protocol ESLint rule (#21532)
* Add `unicorn/prefer-node-protocol`

* Fix `unicorn/prefer-node-protocol` ESLint errors

* Run `npm run format:fix`

* Add sandboxed-module sourceTransformers in mocha setups

Fix `no such file or directory, open 'node:fs'` in `sandboxed-module`

* Remove `node:` in the SandboxedModule requires

* Fix new linting errors with `node:`

GitOrigin-RevId: 68f6e31e2191fcff4cb8058dd0a6914c14f59926
2024-11-11 09:04:51 +00:00

34 lines
751 B
JavaScript

const logger = require('@overleaf/logger')
const metrics = require('@overleaf/metrics')
const { callbackify } = require('node:util')
const safeExec = require('./SafeExec').promises
module.exports = {
compressPng: callbackify(compressPng),
promises: {
compressPng,
},
}
async function compressPng(localPath, callback) {
const timer = new metrics.Timer('compressPng')
const args = ['optipng', localPath]
const opts = {
timeout: 30 * 1000,
killSignal: 'SIGKILL',
}
try {
await safeExec(args, opts)
timer.done()
} catch (err) {
if (err.code === 'SIGKILL') {
logger.warn(
{ err, stderr: err.stderr, localPath },
'optimiser timeout reached'
)
} else {
throw err
}
}
}