You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					96 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					96 lines
				
				2.6 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								"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;
							 |