notes/node_modules/doiuse/lib/doiuse.js

86 lines
2.5 KiB
JavaScript

'use strict';
var _ = require('lodash');
var missingSupport = require('./missing-support');
var Detector = require('./detect-feature-use');
var Multimatch = require('multimatch');
function doiuse(options) {
var browserQuery = options.browsers;
var onFeatureUsage = options.onFeatureUsage;
var ignoreOptions = options.ignore;
var ignoreFiles = options.ignoreFiles;
if (!browserQuery) {
browserQuery = doiuse['default'].slice();
}
var _missingSupport = missingSupport(browserQuery);
var browsers = _missingSupport.browsers;
var features = _missingSupport.features;
var detector = new Detector(_.keys(features));
return {
info: function info() {
return {
browsers: browsers,
features: features
};
},
postcss: function postcss(css, result) {
return detector.process(css, function (_ref) {
var feature = _ref.feature;
var usage = _ref.usage;
var ignore = _ref.ignore;
if (ignore && ignore.indexOf(feature) !== -1) {
return;
}
if (ignoreOptions && ignoreOptions.indexOf(feature) !== -1) {
return;
}
if (ignoreFiles && Multimatch(usage.source.input.from, ignoreFiles).length > 0) {
return;
}
var messages = [];
if (features[feature].missing) {
messages.push('not supported by: ' + features[feature].missing);
}
if (features[feature].partial) {
messages.push('only partially supported by: ' + features[feature].partial);
}
var message = features[feature].title + ' ' + messages.join(' and ') + ' (' + feature + ')';
result.warn(message, { node: usage, plugin: 'doiuse' });
if (onFeatureUsage) {
var loc = usage.source;
loc.original = css.source.input.map ? {
start: css.source.input.map.consumer().originalPositionFor(loc.start),
end: css.source.input.map.consumer().originalPositionFor(loc.end)
} : {
start: loc.start,
end: loc.end
};
message = (loc.original.start.source || loc.input.file || loc.input.from) + ':' + loc.original.start.line + ':' + loc.original.start.column + ': ' + message;
onFeatureUsage({
feature: feature,
featureData: features[feature],
usage: usage,
message: message
});
}
});
}
};
}
doiuse['default'] = ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'];
module.exports = doiuse;