runner.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 weightChecker = require('./tools/weightChecker/weightChecker');
  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. // Treat the JS Execution Tree from offenders
  23. data = jsExecutionTransformer.transform(data);
  24. // Compare colors
  25. data = colorDiff.compareAllColors(data);
  26. // Check media queries
  27. data = mediaQueriesChecker.analyzeMediaQueries(data);
  28. // Redownload every file
  29. return weightChecker.recheckAllFiles(data);
  30. })
  31. .then(function(data) {
  32. // Rules checker
  33. var policies = require('./metadata/policies');
  34. data.rules = rulesChecker.check(data, policies);
  35. // Scores calculator
  36. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  37. data.scoreProfiles = {
  38. generic : scoreCalculator.calculate(data, scoreProfileGeneric)
  39. };
  40. delete data.toolsResults.phantomas.metrics.javascriptExecutionTree;
  41. delete data.toolsResults.phantomas.offenders.javascriptExecutionTree;
  42. delete data.toolsResults.phantomas.metrics.scrollExecutionTree;
  43. delete data.toolsResults.phantomas.offenders.scrollExecutionTree;
  44. // Finished!
  45. deferred.resolve(data);
  46. })
  47. .fail(function(err) {
  48. debug('Run failed');
  49. debug(err);
  50. deferred.reject(err);
  51. });
  52. return deferred.promise;
  53. };
  54. module.exports = Runner;