utils.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.getType = getType;
  6. exports.semverify = semverify;
  7. exports.intersection = intersection;
  8. exports.findSuggestion = findSuggestion;
  9. exports.prettifyVersion = prettifyVersion;
  10. exports.prettifyTargets = prettifyTargets;
  11. exports.isUnreleasedVersion = isUnreleasedVersion;
  12. exports.getLowestUnreleased = getLowestUnreleased;
  13. exports.filterStageFromList = filterStageFromList;
  14. exports.getImportSource = getImportSource;
  15. exports.getRequireSource = getRequireSource;
  16. exports.isPolyfillSource = isPolyfillSource;
  17. exports.getModulePath = getModulePath;
  18. exports.createImport = createImport;
  19. exports.has = void 0;
  20. function t() {
  21. const data = _interopRequireWildcard(require("@babel/types"));
  22. t = function () {
  23. return data;
  24. };
  25. return data;
  26. }
  27. function _invariant() {
  28. const data = _interopRequireDefault(require("invariant"));
  29. _invariant = function () {
  30. return data;
  31. };
  32. return data;
  33. }
  34. function _semver() {
  35. const data = _interopRequireDefault(require("semver"));
  36. _semver = function () {
  37. return data;
  38. };
  39. return data;
  40. }
  41. function _jsLevenshtein() {
  42. const data = _interopRequireDefault(require("js-levenshtein"));
  43. _jsLevenshtein = function () {
  44. return data;
  45. };
  46. return data;
  47. }
  48. function _helperModuleImports() {
  49. const data = require("@babel/helper-module-imports");
  50. _helperModuleImports = function () {
  51. return data;
  52. };
  53. return data;
  54. }
  55. var _unreleasedLabels = _interopRequireDefault(require("../data/unreleased-labels"));
  56. var _targetsParser = require("./targets-parser");
  57. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  58. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
  59. const has = Object.hasOwnProperty.call.bind(Object.hasOwnProperty);
  60. exports.has = has;
  61. function getType(target) {
  62. return Object.prototype.toString.call(target).slice(8, -1).toLowerCase();
  63. }
  64. const versionRegExp = /^(\d+|\d+.\d+)$/;
  65. function semverify(version) {
  66. if (typeof version === "string" && _semver().default.valid(version)) {
  67. return version;
  68. }
  69. (0, _invariant().default)(typeof version === "number" || typeof version === "string" && versionRegExp.test(version), `'${version}' is not a valid version`);
  70. const split = version.toString().split(".");
  71. while (split.length < 3) {
  72. split.push("0");
  73. }
  74. return split.join(".");
  75. }
  76. function intersection(first, second, third) {
  77. const result = new Set();
  78. for (const el of first) {
  79. if (second.has(el) && third.has(el)) result.add(el);
  80. }
  81. return result;
  82. }
  83. function findSuggestion(options, option) {
  84. let levenshteinValue = Infinity;
  85. return options.reduce((suggestion, validOption) => {
  86. const value = (0, _jsLevenshtein().default)(validOption, option);
  87. if (value < levenshteinValue) {
  88. levenshteinValue = value;
  89. return validOption;
  90. }
  91. return suggestion;
  92. }, undefined);
  93. }
  94. function prettifyVersion(version) {
  95. if (typeof version !== "string") {
  96. return version;
  97. }
  98. const parts = [_semver().default.major(version)];
  99. const minor = _semver().default.minor(version);
  100. const patch = _semver().default.patch(version);
  101. if (minor || patch) {
  102. parts.push(minor);
  103. }
  104. if (patch) {
  105. parts.push(patch);
  106. }
  107. return parts.join(".");
  108. }
  109. function prettifyTargets(targets) {
  110. return Object.keys(targets).reduce((results, target) => {
  111. let value = targets[target];
  112. const unreleasedLabel = _unreleasedLabels.default[target];
  113. if (typeof value === "string" && unreleasedLabel !== value) {
  114. value = prettifyVersion(value);
  115. }
  116. results[target] = value;
  117. return results;
  118. }, {});
  119. }
  120. function isUnreleasedVersion(version, env) {
  121. const unreleasedLabel = _unreleasedLabels.default[env];
  122. return !!unreleasedLabel && unreleasedLabel === version.toString().toLowerCase();
  123. }
  124. function getLowestUnreleased(a, b, env) {
  125. const unreleasedLabel = _unreleasedLabels.default[env];
  126. const hasUnreleased = [a, b].some(item => item === unreleasedLabel);
  127. if (hasUnreleased) {
  128. return a === hasUnreleased ? b : a || b;
  129. }
  130. return (0, _targetsParser.semverMin)(a, b);
  131. }
  132. function filterStageFromList(list, stageList) {
  133. return Object.keys(list).reduce((result, item) => {
  134. if (!stageList[item]) {
  135. result[item] = list[item];
  136. }
  137. return result;
  138. }, {});
  139. }
  140. function getImportSource({
  141. node
  142. }) {
  143. if (node.specifiers.length === 0) return node.source.value;
  144. }
  145. function getRequireSource({
  146. node
  147. }) {
  148. if (!t().isExpressionStatement(node)) return;
  149. const {
  150. expression
  151. } = node;
  152. const isRequire = t().isCallExpression(expression) && t().isIdentifier(expression.callee) && expression.callee.name === "require" && expression.arguments.length === 1 && t().isStringLiteral(expression.arguments[0]);
  153. if (isRequire) return expression.arguments[0].value;
  154. }
  155. function isPolyfillSource(source) {
  156. return source === "@babel/polyfill" || source === "core-js";
  157. }
  158. const modulePathMap = {
  159. "regenerator-runtime": "regenerator-runtime/runtime"
  160. };
  161. function getModulePath(mod) {
  162. return modulePathMap[mod] || `core-js/modules/${mod}`;
  163. }
  164. function createImport(path, mod) {
  165. return (0, _helperModuleImports().addSideEffect)(path, getModulePath(mod));
  166. }