| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.getBrowserScope = exports.setBrowserScope = exports.getLatestStableBrowsers = exports.find = exports.isSupported = exports.getSupport = exports.features = undefined; |
| |
| var _lodash = require("lodash.memoize"); |
| |
| var _lodash2 = _interopRequireDefault(_lodash); |
| |
| var _browserslist = require("browserslist"); |
| |
| var _browserslist2 = _interopRequireDefault(_browserslist); |
| |
| var _caniuseLite = require("caniuse-lite"); |
| |
| var _utils = require("./utils"); |
| |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
| |
| var featuresList = Object.keys(_caniuseLite.features); |
| |
| var browsers = void 0; |
| function setBrowserScope(browserList) { |
| browsers = (0, _utils.cleanBrowsersList)(browserList); |
| } |
| |
| function getBrowserScope() { |
| return browsers; |
| } |
| |
| var parse = (0, _lodash2.default)(_utils.parseCaniuseData, function (feat, browsers) { |
| return feat.title + browsers; |
| }); |
| |
| function getSupport(query) { |
| var feature = void 0; |
| try { |
| feature = (0, _caniuseLite.feature)(_caniuseLite.features[query]); |
| } catch (e) { |
| var res = find(query); |
| if (res.length === 1) return getSupport(res[0]); |
| throw new ReferenceError("Please provide a proper feature name. Cannot find " + query); |
| } |
| return parse(feature, browsers); |
| } |
| |
| function isSupported(feature, browsers) { |
| var data = void 0; |
| try { |
| data = (0, _caniuseLite.feature)(_caniuseLite.features[feature]); |
| } catch (e) { |
| var res = find(feature); |
| if (res.length === 1) { |
| data = _caniuseLite.features[res[0]]; |
| } else { |
| throw new ReferenceError("Please provide a proper feature name. Cannot find " + feature); |
| } |
| } |
| |
| return (0, _browserslist2.default)(browsers, { ignoreUnknownVersions: true }).map(function (browser) { |
| return browser.split(" "); |
| }).every(function (browser) { |
| return data.stats[browser[0]] && data.stats[browser[0]][browser[1]] === "y"; |
| }); |
| } |
| |
| function find(query) { |
| if (typeof query !== "string") { |
| throw new TypeError("The `query` parameter should be a string."); |
| } |
| |
| if (~featuresList.indexOf(query)) { |
| // exact match |
| return query; |
| } |
| |
| return featuresList.filter(function (file) { |
| return (0, _utils.contains)(file, query); |
| }); |
| } |
| |
| function getLatestStableBrowsers() { |
| return (0, _browserslist2.default)("last 1 version"); |
| } |
| |
| setBrowserScope(); |
| |
| exports.features = featuresList; |
| exports.getSupport = getSupport; |
| exports.isSupported = isSupported; |
| exports.find = find; |
| exports.getLatestStableBrowsers = getLatestStableBrowsers; |
| exports.setBrowserScope = setBrowserScope; |
| exports.getBrowserScope = getBrowserScope; |