runner.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 weightChecker = require('./tools/weightChecker/weightChecker');
  6. var rulesChecker = require('./rulesChecker');
  7. var scoreCalculator = require('./scoreCalculator');
  8. var Runner = function(params) {
  9. 'use strict';
  10. var deferred = Q.defer();
  11. // The pivot format
  12. var data = {
  13. params: params,
  14. toolsResults: {}
  15. };
  16. // Execute Phantomas first
  17. phantomasWrapper.execute(data)
  18. .then(function(phantomasResults) {
  19. data.toolsResults.phantomas = phantomasResults;
  20. // Treat the JS Execution Tree from offenders
  21. data = jsExecutionTransformer.transform(data);
  22. // Redownload every file
  23. return weightChecker.recheckAllFiles(data);
  24. })
  25. .then(function(data) {
  26. // Rules checker
  27. var policies = require('./metadata/policies');
  28. data.rules = rulesChecker.check(data, policies);
  29. // Scores calculator
  30. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  31. data.scoreProfiles = {
  32. generic : scoreCalculator.calculate(data, scoreProfileGeneric)
  33. };
  34. delete data.toolsResults.phantomas.metrics.javascriptExecutionTree;
  35. delete data.toolsResults.phantomas.offenders.javascriptExecutionTree;
  36. delete data.toolsResults.phantomas.metrics.scrollExecutionTree;
  37. delete data.toolsResults.phantomas.offenders.scrollExecutionTree;
  38. // Finished!
  39. deferred.resolve(data);
  40. })
  41. .fail(function(err) {
  42. debug('Run failed');
  43. debug(err);
  44. deferred.reject(err);
  45. });
  46. return deferred.promise;
  47. };
  48. module.exports = Runner;