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