1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.testEngine = testEngine;
|
7 | exports.checkOne = checkOne;
|
8 | exports.check = check;
|
9 |
|
10 | var _errors;
|
11 |
|
12 | function _load_errors() {
|
13 | return _errors = require('./errors.js');
|
14 | }
|
15 |
|
16 | var _map;
|
17 |
|
18 | function _load_map() {
|
19 | return _map = _interopRequireDefault(require('./util/map.js'));
|
20 | }
|
21 |
|
22 | var _misc;
|
23 |
|
24 | function _load_misc() {
|
25 | return _misc = require('./util/misc.js');
|
26 | }
|
27 |
|
28 | var _yarnVersion;
|
29 |
|
30 | function _load_yarnVersion() {
|
31 | return _yarnVersion = require('./util/yarn-version.js');
|
32 | }
|
33 |
|
34 | var _semver;
|
35 |
|
36 | function _load_semver() {
|
37 | return _semver = require('./util/semver.js');
|
38 | }
|
39 |
|
40 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
41 |
|
42 | const invariant = require('invariant');
|
43 |
|
44 | const semver = require('semver');
|
45 |
|
46 | const VERSIONS = Object.assign({}, process.versions, {
|
47 | yarn: (_yarnVersion || _load_yarnVersion()).version
|
48 | });
|
49 |
|
50 | function isValid(items, actual) {
|
51 | let isNotWhitelist = true;
|
52 | let isBlacklist = false;
|
53 |
|
54 | for (var _iterator = items, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
55 | var _ref;
|
56 |
|
57 | if (_isArray) {
|
58 | if (_i >= _iterator.length) break;
|
59 | _ref = _iterator[_i++];
|
60 | } else {
|
61 | _i = _iterator.next();
|
62 | if (_i.done) break;
|
63 | _ref = _i.value;
|
64 | }
|
65 |
|
66 | const item = _ref;
|
67 |
|
68 |
|
69 | if (item[0] === '!') {
|
70 | isBlacklist = true;
|
71 |
|
72 | if (actual === item.slice(1)) {
|
73 | return false;
|
74 | }
|
75 |
|
76 | } else {
|
77 | isNotWhitelist = false;
|
78 |
|
79 | if (item === actual) {
|
80 | return true;
|
81 | }
|
82 | }
|
83 | }
|
84 |
|
85 |
|
86 |
|
87 | return isBlacklist && isNotWhitelist;
|
88 | }
|
89 |
|
90 | const aliases = (0, (_map || _load_map()).default)({
|
91 | iojs: 'node'
|
92 | });
|
93 |
|
94 | const ignore = ['npm',
|
95 | 'teleport',
|
96 | 'rhino',
|
97 | 'cordovaDependencies'];
|
98 |
|
99 | function testEngine(name, range, versions, looseSemver) {
|
100 | const actual = versions[name];
|
101 | if (!actual) {
|
102 | return false;
|
103 | }
|
104 |
|
105 | if (!semver.valid(actual, looseSemver)) {
|
106 | return false;
|
107 | }
|
108 |
|
109 | if (semver.satisfies(actual, range, looseSemver)) {
|
110 | return true;
|
111 | }
|
112 |
|
113 | if (name === 'yarn' && (0, (_semver || _load_semver()).satisfiesWithPrereleases)(actual, range, looseSemver)) {
|
114 | return true;
|
115 | }
|
116 |
|
117 | if (name === 'node' && semver.gt(actual, '1.0.0', looseSemver)) {
|
118 |
|
119 |
|
120 |
|
121 |
|
122 | const major = semver.major(actual, looseSemver);
|
123 | const fakes = [`0.10.${major}`, `0.11.${major}`, `0.12.${major}`, `0.13.${major}`];
|
124 | for (var _iterator2 = fakes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
125 | var _ref2;
|
126 |
|
127 | if (_isArray2) {
|
128 | if (_i2 >= _iterator2.length) break;
|
129 | _ref2 = _iterator2[_i2++];
|
130 | } else {
|
131 | _i2 = _iterator2.next();
|
132 | if (_i2.done) break;
|
133 | _ref2 = _i2.value;
|
134 | }
|
135 |
|
136 | const actualFake = _ref2;
|
137 |
|
138 | if (semver.satisfies(actualFake, range, looseSemver)) {
|
139 | return true;
|
140 | }
|
141 | }
|
142 | }
|
143 |
|
144 |
|
145 | return false;
|
146 | }
|
147 |
|
148 | function isValidArch(archs) {
|
149 | return isValid(archs, process.arch);
|
150 | }
|
151 |
|
152 | function isValidPlatform(platforms) {
|
153 | return isValid(platforms, process.platform);
|
154 | }
|
155 |
|
156 | function checkOne(info, config, ignoreEngines) {
|
157 | let didIgnore = false;
|
158 | let didError = false;
|
159 | const reporter = config.reporter;
|
160 | const human = `${info.name}@${info.version}`;
|
161 |
|
162 | const pushError = msg => {
|
163 | const ref = info._reference;
|
164 | invariant(ref, 'expected package reference');
|
165 |
|
166 | if (ref.optional) {
|
167 | ref.ignore = true;
|
168 | ref.incompatible = true;
|
169 |
|
170 | reporter.info(`${human}: ${msg}`);
|
171 | if (!didIgnore) {
|
172 | reporter.info(reporter.lang('optionalCompatibilityExcluded', human));
|
173 | didIgnore = true;
|
174 | }
|
175 | } else {
|
176 | reporter.error(`${human}: ${msg}`);
|
177 | didError = true;
|
178 | }
|
179 | };
|
180 |
|
181 | const invalidPlatform = !config.ignorePlatform && Array.isArray(info.os) && info.os.length > 0 && !isValidPlatform(info.os);
|
182 |
|
183 | if (invalidPlatform) {
|
184 | pushError(reporter.lang('incompatibleOS', process.platform));
|
185 | }
|
186 |
|
187 | const invalidCpu = !config.ignorePlatform && Array.isArray(info.cpu) && info.cpu.length > 0 && !isValidArch(info.cpu);
|
188 |
|
189 | if (invalidCpu) {
|
190 | pushError(reporter.lang('incompatibleCPU', process.arch));
|
191 | }
|
192 |
|
193 | if (!ignoreEngines && typeof info.engines === 'object') {
|
194 | for (var _iterator3 = (0, (_misc || _load_misc()).entries)(info.engines), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
195 | var _ref3;
|
196 |
|
197 | if (_isArray3) {
|
198 | if (_i3 >= _iterator3.length) break;
|
199 | _ref3 = _iterator3[_i3++];
|
200 | } else {
|
201 | _i3 = _iterator3.next();
|
202 | if (_i3.done) break;
|
203 | _ref3 = _i3.value;
|
204 | }
|
205 |
|
206 | const entry = _ref3;
|
207 |
|
208 | let name = entry[0];
|
209 | const range = entry[1];
|
210 |
|
211 | if (aliases[name]) {
|
212 | name = aliases[name];
|
213 | }
|
214 |
|
215 | if (VERSIONS[name]) {
|
216 | if (!testEngine(name, range, VERSIONS, config.looseSemver)) {
|
217 | pushError(reporter.lang('incompatibleEngine', name, range, VERSIONS[name]));
|
218 | }
|
219 | } else if (ignore.indexOf(name) < 0) {
|
220 | reporter.warn(`${human}: ${reporter.lang('invalidEngine', name)}`);
|
221 | }
|
222 | }
|
223 | }
|
224 |
|
225 | if (didError) {
|
226 | throw new (_errors || _load_errors()).MessageError(reporter.lang('foundIncompatible'));
|
227 | }
|
228 | }
|
229 |
|
230 | function check(infos, config, ignoreEngines) {
|
231 | for (var _iterator4 = infos, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
|
232 | var _ref4;
|
233 |
|
234 | if (_isArray4) {
|
235 | if (_i4 >= _iterator4.length) break;
|
236 | _ref4 = _iterator4[_i4++];
|
237 | } else {
|
238 | _i4 = _iterator4.next();
|
239 | if (_i4.done) break;
|
240 | _ref4 = _i4.value;
|
241 | }
|
242 |
|
243 | const info = _ref4;
|
244 |
|
245 | checkOne(info, config, ignoreEngines);
|
246 | }
|
247 | } |
\ | No newline at end of file |