index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.getBrowserScope = exports.setBrowserScope = exports.getLatestStableBrowsers = exports.find = exports.isSupported = exports.getSupport = exports.features = undefined;
  6. var _lodash = require("lodash.memoize");
  7. var _lodash2 = _interopRequireDefault(_lodash);
  8. var _browserslist = require("browserslist");
  9. var _browserslist2 = _interopRequireDefault(_browserslist);
  10. var _utils = require("./utils");
  11. var _data = require("caniuse-db/data.json");
  12. var _data2 = _interopRequireDefault(_data);
  13. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  14. var features = _data2.default.data;
  15. var featuresList = Object.keys(features);
  16. var browsers = void 0;
  17. function setBrowserScope(browserList) {
  18. browsers = (0, _utils.cleanBrowsersList)(browserList);
  19. }
  20. function getBrowserScope() {
  21. return browsers;
  22. }
  23. var parse = (0, _lodash2.default)(_utils.parseCaniuseData, function (feature, browsers) {
  24. return feature.title + browsers;
  25. });
  26. function getSupport(query) {
  27. var feature = void 0;
  28. try {
  29. feature = features[query];
  30. } catch (e) {
  31. var res = find(query);
  32. if (res.length === 1) return getSupport(res[0]);
  33. throw new ReferenceError("Please provide a proper feature name. Cannot find " + query);
  34. }
  35. return parse(feature, browsers);
  36. }
  37. function isSupported(feature, browsers) {
  38. var data = void 0;
  39. try {
  40. data = features[feature];
  41. } catch (e) {
  42. var res = find(feature);
  43. if (res.length === 1) {
  44. data = features[res[0]];
  45. } else {
  46. throw new ReferenceError("Please provide a proper feature name. Cannot find " + feature);
  47. }
  48. }
  49. return (0, _browserslist2.default)(browsers).map(function (browser) {
  50. return browser.split(" ");
  51. }).every(function (browser) {
  52. return data.stats[browser[0]] && data.stats[browser[0]][browser[1]] === "y";
  53. });
  54. }
  55. function find(query) {
  56. if (typeof query !== "string") {
  57. throw new TypeError("The `query` parameter should be a string.");
  58. }
  59. if (~featuresList.indexOf(query)) {
  60. // exact match
  61. return query;
  62. }
  63. return featuresList.filter(function (file) {
  64. return (0, _utils.contains)(file, query);
  65. });
  66. }
  67. function getLatestStableBrowsers() {
  68. return _browserslist2.default.queries.lastVersions.select(1);
  69. }
  70. setBrowserScope();
  71. exports.features = featuresList;
  72. exports.getSupport = getSupport;
  73. exports.isSupported = isSupported;
  74. exports.find = find;
  75. exports.getLatestStableBrowsers = getLatestStableBrowsers;
  76. exports.setBrowserScope = setBrowserScope;
  77. exports.getBrowserScope = getBrowserScope;