runner.js 2.5 KB

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