-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathindex.js
85 lines (69 loc) · 2.19 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
'use strict';
var gutil = require('gulp-util');
var through = require('through2');
var fileUrl = require('file-url');
var path = require('path');
var fs = require('fs-path');
var AxeBuilder = require('axe-webdriverjs');
var WebDriver = require('selenium-webdriver');
var Promise = require('promise');
var reporter = require('./lib/reporter');
var PLUGIN_NAME = 'gulp-axe-core';
require('chromedriver');
//setup custom phantomJS capability
var phantomjs_exe = require('phantomjs-prebuilt').path;
var customPhantom = WebDriver.Capabilities.phantomjs().set('phantomjs.binary.path', phantomjs_exe);
var promise;
var results = [];
module.exports = function (customOptions) {
var defaultOptions = {
browser: 'chrome',
folderOutputReport: 'aXeReports',
saveOutputIn: '',
threshold: 0
};
var options = customOptions ? Object.assign(defaultOptions, customOptions) : defaultOptions;
var driver = options.browser === 'phantomjs' ? new WebDriver.Builder().withCapabilities(customPhantom).build() : new WebDriver.Builder().forBrowser(options.browser).build();
var createResults = function(cb) {
var dest = '';
if(options.saveOutputIn !== '') {
dest = path.join(options.folderOutputReport, options.saveOutputIn);
fs.writeFileSync(dest, JSON.stringify(results, null, ' '));
}
driver.quit();
cb();
};
var bufferContents = function (file, enc, cb) {
if (file.isNull()) {
cb(null, file);
return;
}
if (file.isStream()) {
driver.quit();
cb(new gutil.PluginError(PLUGIN_NAME, 'Streaming not supported'));
return;
}
try {
promise = new Promise(function(resolve) {
driver.get(fileUrl(file.path)).then(function() {
var startTimestamp = new Date().getTime();
new AxeBuilder(driver)
.analyze(function(result) {
result.url = file.path;
result.timestamp = new Date().getTime();
result.time = result.timestamp - startTimestamp;
resolve(result);
});
});
});
promise.then(function(result) {
results.push(result);
reporter(result, options.threshold);
cb();
});
} catch (err) {
this.emit('error', new gutil.PluginError(PLUGIN_NAME, err));
}
};
return through.obj(bufferContents, createResults);
};