runner.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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');
  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).then(function(phantomasResults) {
  18. data.toolsResults.phantomas = phantomasResults;
  19. // Treat the JS Execution Tree from offenders
  20. data = jsExecutionTransformer.transform(data);
  21. // Redownload every file
  22. return weightChecker.recheckAllFiles(data);
  23. }).then(function(data) {
  24. // Rules checker
  25. var policies = require('./metadata/policies');
  26. data.rules = rulesChecker.check(data, policies);
  27. // Scores calculator
  28. var scoreProfileGeneric = require('./metadata/scoreProfileGeneric.json');
  29. data.scoreProfiles = {
  30. generic : scoreCalculator.calculate(data, scoreProfileGeneric)
  31. };
  32. delete data.toolsResults.phantomas.metrics.javascriptExecutionTree;
  33. delete data.toolsResults.phantomas.offenders.javascriptExecutionTree;
  34. delete data.toolsResults.phantomas.metrics.scrollExecutionTree;
  35. delete data.toolsResults.phantomas.offenders.scrollExecutionTree;
  36. return data;
  37. }).then(function(data) {
  38. // Finished!
  39. deferred.resolve(data);
  40. }).fail(function(err) {
  41. debug('Run failed');
  42. debug(err);
  43. deferred.reject(err);
  44. });
  45. return deferred.promise;
  46. };
  47. module.exports = Runner;