runner.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. var Q = require('q');
  2. var debug = require('debug')('ylt:runner');
  3. var phantomasWrapper = require('./tools/phantomas/phantomasWrapper');
  4. var colorDiff = require('./tools/colorDiff');
  5. var mediaQueriesChecker = require('./tools/mediaQueriesChecker');
  6. var isHttp2 = require('./tools/isHttp2');
  7. var redownload = require('./tools/redownload/redownload');
  8. var rulesChecker = require('./rulesChecker');
  9. var scoreCalculator = require('./scoreCalculator');
  10. var Runner = function(params) {
  11. 'use strict';
  12. var deferred = Q.defer();
  13. // The pivot format
  14. var data = {
  15. params: params,
  16. toolsResults: {}
  17. };
  18. // Execute Phantomas first
  19. phantomasWrapper.execute(data)
  20. .then(function(phantomasResults) {
  21. data.toolsResults.phantomas = phantomasResults;
  22. // Compare colors
  23. data = colorDiff.compareAllColors(data);
  24. // Check media queries
  25. data = mediaQueriesChecker.analyzeMediaQueries(data);
  26. // Redownload every file
  27. return redownload.recheckAllFiles(data);
  28. })
  29. .then(function(data) {
  30. // Check if HTTP2
  31. return isHttp2.check(data);
  32. })
  33. .then(function(data) {
  34. // Rules checker
  35. var policies = require('./metadata/policies');
  36. data.rules = rulesChecker.check(data, policies);
  37. // Scores calculator
  38. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  39. data.scoreProfiles = {
  40. generic : scoreCalculator.calculate(data, scoreProfileGeneric)
  41. };
  42. delete data.toolsResults.phantomas.metrics.javascriptExecutionTree;
  43. delete data.toolsResults.phantomas.offenders.javascriptExecutionTree;
  44. delete data.toolsResults.phantomas.metrics.scrollExecutionTree;
  45. delete data.toolsResults.phantomas.offenders.scrollExecutionTree;
  46. if (data.toolsResults.phantomas.offenders.blockedRequests) {
  47. data.blockedRequests = data.toolsResults.phantomas.offenders.blockedRequests;
  48. }
  49. // Finished!
  50. deferred.resolve(data);
  51. })
  52. .fail(function(err) {
  53. debug('Run failed');
  54. debug(err);
  55. deferred.reject(err);
  56. });
  57. return deferred.promise;
  58. };
  59. module.exports = Runner;