ImageOptimiser.js 976 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const logger = require('logger-sharelatex')
  2. const metrics = require('metrics-sharelatex')
  3. const { callbackify } = require('util')
  4. const safeExec = require('./SafeExec').promises
  5. module.exports = {
  6. compressPng: callbackify(compressPng),
  7. promises: {
  8. compressPng
  9. }
  10. }
  11. async function compressPng(localPath, callback) {
  12. const timer = new metrics.Timer('compressPng')
  13. logger.log({ localPath }, 'optimising png path')
  14. const args = ['optipng', localPath]
  15. const opts = {
  16. timeout: 30 * 1000,
  17. killSignal: 'SIGKILL'
  18. }
  19. try {
  20. await safeExec(args, opts)
  21. timer.done()
  22. logger.log({ localPath }, 'finished compressing png')
  23. } catch (err) {
  24. if (err.code === 'SIGKILL') {
  25. logger.warn(
  26. { err, stderr: err.stderr, localPath },
  27. 'optimiser timeout reached'
  28. )
  29. } else {
  30. logger.err(
  31. { err, stderr: err.stderr, localPath },
  32. 'something went wrong compressing png'
  33. )
  34. throw err
  35. }
  36. }
  37. }