index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var debug = require('debug')('ylt:index');
  2. var Q = require('q');
  3. var Runner = require('./runner');
  4. var ScreenshotHandler = require('./screenshotHandler');
  5. var packageJson = require('../package.json');
  6. var yellowLabTools = function(url, options) {
  7. var deferred = Q.defer();
  8. if (!url) {
  9. deferred.reject('URL missing');
  10. } else {
  11. if (url.toLowerCase().indexOf('http://') !== 0 && url.toLowerCase().indexOf('https://') !== 0) {
  12. url = 'http://' + url;
  13. }
  14. var params = {
  15. url: url,
  16. options: options || {}
  17. };
  18. var runner = new Runner(params)
  19. .progress(deferred.notify)
  20. .then(function(data) {
  21. // If a screenshot saveFunction was provided in the options
  22. if (options && typeof options.saveScreenshotFn === 'function') {
  23. const screenshotTmpPath = data.params.options.screenshot;
  24. debug('Now optimizing screenshot...');
  25. // TODO: temporarily set all screenshot sizes to 600px, until we find a solution
  26. ScreenshotHandler.findAndOptimizeScreenshot(screenshotTmpPath, 600)
  27. .then(function(screenshotBuffer) {
  28. debug('Screenshot optimized, now saving...');
  29. return options.saveScreenshotFn('screenshot.jpg', screenshotBuffer);
  30. })
  31. .then(function(response) {
  32. debug('Screenshot saved');
  33. debug(response);
  34. // Remove uneeded temp screenshot path
  35. delete data.params.options.screenshot;
  36. return ScreenshotHandler.deleteTmpFile(screenshotTmpPath);
  37. })
  38. .catch(function(err) {
  39. // It's ok if we can't save the screenshot
  40. debug('Screenshot could not be saved');
  41. debug(err);
  42. })
  43. .finally(function() {
  44. deferred.resolve(data);
  45. });
  46. } else {
  47. deferred.resolve(data);
  48. }
  49. })
  50. .catch(function(err) {
  51. deferred.reject(err);
  52. });
  53. }
  54. return deferred.promise;
  55. };
  56. module.exports = yellowLabTools;
  57. module.exports.version = packageJson.version;