index.js 2.2 KB

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