1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | "use strict";
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | const parseVersion = str => {
|
15 | var splitAndConvert = function (str) {
|
16 | return str.split(".").map(function (item) {
|
17 |
|
18 | return +item == item ? +item : item;
|
19 | });
|
20 | };
|
21 | var match = /^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str);
|
22 |
|
23 | var ver = match[1] ? splitAndConvert(match[1]) : [];
|
24 | if (match[2]) {
|
25 | ver.length++;
|
26 | ver.push.apply(ver, splitAndConvert(match[2]));
|
27 | }
|
28 | if (match[3]) {
|
29 | ver.push([]);
|
30 | ver.push.apply(ver, splitAndConvert(match[3]));
|
31 | }
|
32 | return ver;
|
33 | };
|
34 | exports.parseVersion = parseVersion;
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | const versionLt = (a, b) => {
|
43 |
|
44 | a = parseVersion(a);
|
45 |
|
46 | b = parseVersion(b);
|
47 | var i = 0;
|
48 | for (;;) {
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | if (i >= a.length) return i < b.length && (typeof b[i])[0] != "u";
|
61 |
|
62 | var aValue = a[i];
|
63 | var aType = (typeof aValue)[0];
|
64 |
|
65 |
|
66 | if (i >= b.length) return aType == "u";
|
67 |
|
68 | var bValue = b[i];
|
69 | var bType = (typeof bValue)[0];
|
70 |
|
71 | if (aType == bType) {
|
72 | if (aType != "o" && aType != "u" && aValue != bValue) {
|
73 | return aValue < bValue;
|
74 | }
|
75 | i++;
|
76 | } else {
|
77 |
|
78 | if (aType == "o" && bType == "n") return true;
|
79 | return bType == "s" || aType == "u";
|
80 | }
|
81 | }
|
82 | };
|
83 |
|
84 | exports.versionLt = versionLt;
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 | exports.parseRange = str => {
|
91 | const splitAndConvert = str => {
|
92 | return str
|
93 | .split(".")
|
94 | .map(item => (item !== "NaN" && `${+item}` === item ? +item : item));
|
95 | };
|
96 |
|
97 | const parsePartial = str => {
|
98 | const match = /^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(str);
|
99 |
|
100 | const ver = match[1] ? [0, ...splitAndConvert(match[1])] : [0];
|
101 | if (match[2]) {
|
102 | ver.length++;
|
103 | ver.push.apply(ver, splitAndConvert(match[2]));
|
104 | }
|
105 |
|
106 |
|
107 | let last = ver[ver.length - 1];
|
108 | while (
|
109 | ver.length &&
|
110 | (last === undefined || /^[*xX]$/.test( (last)))
|
111 | ) {
|
112 | ver.pop();
|
113 | last = ver[ver.length - 1];
|
114 | }
|
115 |
|
116 | return ver;
|
117 | };
|
118 | const toFixed = range => {
|
119 | if (range.length === 1) {
|
120 |
|
121 | return [0];
|
122 | } else if (range.length === 2) {
|
123 |
|
124 | return [1, ...range.slice(1)];
|
125 | } else if (range.length === 3) {
|
126 |
|
127 | return [2, ...range.slice(1)];
|
128 | } else {
|
129 | return [range.length, ...range.slice(1)];
|
130 | }
|
131 | };
|
132 | const negate = range => {
|
133 | return [-range[0] - 1, ...range.slice(1)];
|
134 | };
|
135 | const parseSimple = str => {
|
136 |
|
137 |
|
138 |
|
139 |
|
140 | const match = /^(\^|~|<=|<|>=|>|=|v|!)/.exec(str);
|
141 | const start = match ? match[0] : "";
|
142 | const remainder = parsePartial(
|
143 | start.length ? str.slice(start.length).trim() : str.trim()
|
144 | );
|
145 | switch (start) {
|
146 | case "^":
|
147 | if (remainder.length > 1 && remainder[1] === 0) {
|
148 | if (remainder.length > 2 && remainder[2] === 0) {
|
149 | return [3, ...remainder.slice(1)];
|
150 | }
|
151 | return [2, ...remainder.slice(1)];
|
152 | }
|
153 | return [1, ...remainder.slice(1)];
|
154 | case "~":
|
155 | return [2, ...remainder.slice(1)];
|
156 | case ">=":
|
157 | return remainder;
|
158 | case "=":
|
159 | case "v":
|
160 | case "":
|
161 | return toFixed(remainder);
|
162 | case "<":
|
163 | return negate(remainder);
|
164 | case ">": {
|
165 |
|
166 | const fixed = toFixed(remainder);
|
167 |
|
168 | return [, fixed, 0, remainder, 2];
|
169 | }
|
170 | case "<=":
|
171 |
|
172 |
|
173 | return [, toFixed(remainder), negate(remainder), 1];
|
174 | case "!": {
|
175 |
|
176 | const fixed = toFixed(remainder);
|
177 |
|
178 | return [, fixed, 0];
|
179 | }
|
180 | default:
|
181 | throw new Error("Unexpected start value");
|
182 | }
|
183 | };
|
184 | const combine = (items, fn) => {
|
185 | if (items.length === 1) return items[0];
|
186 | const arr = [];
|
187 | for (const item of items.slice().reverse()) {
|
188 | if (0 in item) {
|
189 | arr.push(item);
|
190 | } else {
|
191 | arr.push(...item.slice(1));
|
192 | }
|
193 | }
|
194 |
|
195 | return [, ...arr, ...items.slice(1).map(() => fn)];
|
196 | };
|
197 | const parseRange = str => {
|
198 |
|
199 |
|
200 | const items = str.split(/\s+-\s+/);
|
201 | if (items.length === 1) {
|
202 | const items = str
|
203 | .trim()
|
204 | .split(/(?<=[-0-9A-Za-z])\s+/g)
|
205 | .map(parseSimple);
|
206 | return combine(items, 2);
|
207 | }
|
208 | const a = parsePartial(items[0]);
|
209 | const b = parsePartial(items[1]);
|
210 |
|
211 |
|
212 | return [, toFixed(b), negate(b), 1, a, 2];
|
213 | };
|
214 | const parseLogicalOr = str => {
|
215 |
|
216 |
|
217 | const items = str.split(/\s*\|\|\s*/).map(parseRange);
|
218 | return combine(items, 1);
|
219 | };
|
220 | return parseLogicalOr(str);
|
221 | };
|
222 |
|
223 |
|
224 | const rangeToString = range => {
|
225 | var fixCount = range[0];
|
226 | var str = "";
|
227 | if (range.length === 1) {
|
228 | return "*";
|
229 | } else if (fixCount + 0.5) {
|
230 | str +=
|
231 | fixCount == 0
|
232 | ? ">="
|
233 | : fixCount == -1
|
234 | ? "<"
|
235 | : fixCount == 1
|
236 | ? "^"
|
237 | : fixCount == 2
|
238 | ? "~"
|
239 | : fixCount > 0
|
240 | ? "="
|
241 | : "!=";
|
242 | var needDot = 1;
|
243 |
|
244 | for (var i = 1; i < range.length; i++) {
|
245 | var item = range[i];
|
246 | var t = (typeof item)[0];
|
247 | needDot--;
|
248 | str +=
|
249 | t == "u"
|
250 | ?
|
251 | "-"
|
252 | :
|
253 | (needDot > 0 ? "." : "") + ((needDot = 2), item);
|
254 | }
|
255 | return str;
|
256 | } else {
|
257 | var stack = [];
|
258 |
|
259 | for (var i = 1; i < range.length; i++) {
|
260 |
|
261 | var item = range[i];
|
262 | stack.push(
|
263 | item === 0
|
264 | ? "not(" + pop() + ")"
|
265 | : item === 1
|
266 | ? "(" + pop() + " || " + pop() + ")"
|
267 | : item === 2
|
268 | ? stack.pop() + " " + stack.pop()
|
269 | : rangeToString(item)
|
270 | );
|
271 | }
|
272 | return pop();
|
273 | }
|
274 | function pop() {
|
275 | return stack.pop().replace(/^\((.+)\)$/, "$1");
|
276 | }
|
277 | };
|
278 |
|
279 | exports.rangeToString = rangeToString;
|
280 |
|
281 |
|
282 |
|
283 |
|
284 |
|
285 |
|
286 |
|
287 | const satisfy = (range, version) => {
|
288 | if (0 in range) {
|
289 |
|
290 | version = parseVersion(version);
|
291 | var fixCount = range[0];
|
292 |
|
293 | var negated = fixCount < 0;
|
294 | if (negated) fixCount = -fixCount - 1;
|
295 | for (var i = 0, j = 1, isEqual = true; ; j++, i++) {
|
296 |
|
297 |
|
298 |
|
299 |
|
300 |
|
301 |
|
302 |
|
303 |
|
304 |
|
305 |
|
306 |
|
307 |
|
308 |
|
309 |
|
310 |
|
311 |
|
312 |
|
313 |
|
314 |
|
315 |
|
316 |
|
317 |
|
318 |
|
319 |
|
320 |
|
321 |
|
322 |
|
323 |
|
324 |
|
325 |
|
326 |
|
327 |
|
328 |
|
329 |
|
330 |
|
331 |
|
332 |
|
333 |
|
334 |
|
335 |
|
336 |
|
337 |
|
338 |
|
339 |
|
340 | var rangeType = j < range.length ? (typeof range[j])[0] : "";
|
341 |
|
342 | var versionValue;
|
343 | var versionType;
|
344 |
|
345 |
|
346 | if (
|
347 | i >= version.length ||
|
348 | ((versionValue = version[i]),
|
349 | (versionType = (typeof versionValue)[0]) == "o")
|
350 | ) {
|
351 |
|
352 | if (!isEqual) return true;
|
353 |
|
354 | if (rangeType == "u") return j > fixCount && !negated;
|
355 |
|
356 | return (rangeType == "") != negated;
|
357 | }
|
358 |
|
359 |
|
360 | if (versionType == "u") {
|
361 | if (!isEqual || rangeType != "u") {
|
362 | return false;
|
363 | }
|
364 | }
|
365 |
|
366 |
|
367 | else if (isEqual) {
|
368 |
|
369 | if (rangeType == versionType) {
|
370 | if (j <= fixCount) {
|
371 |
|
372 | if (versionValue != range[j]) {
|
373 | return false;
|
374 | }
|
375 | } else {
|
376 |
|
377 | if (negated ? versionValue > range[j] : versionValue < range[j]) {
|
378 | return false;
|
379 | }
|
380 | if (versionValue != range[j]) isEqual = false;
|
381 | }
|
382 | }
|
383 |
|
384 |
|
385 | else if (rangeType != "s" && rangeType != "n") {
|
386 | if (negated || j <= fixCount) return false;
|
387 | isEqual = false;
|
388 | j--;
|
389 | }
|
390 |
|
391 |
|
392 | else if (j <= fixCount || versionType < rangeType != negated) {
|
393 | return false;
|
394 | } else {
|
395 | isEqual = false;
|
396 | }
|
397 | } else {
|
398 |
|
399 | if (rangeType != "s" && rangeType != "n") {
|
400 | isEqual = false;
|
401 | j--;
|
402 | }
|
403 |
|
404 |
|
405 | }
|
406 | }
|
407 | }
|
408 |
|
409 | var stack = [];
|
410 | var p = stack.pop.bind(stack);
|
411 |
|
412 | for (var i = 1; i < range.length; i++) {
|
413 | var item = (range[i]);
|
414 | stack.push(
|
415 | item == 1
|
416 | ? p() | p()
|
417 | : item == 2
|
418 | ? p() & p()
|
419 | : item
|
420 | ? satisfy(item, version)
|
421 | : !p()
|
422 | );
|
423 | }
|
424 | return !!p();
|
425 | };
|
426 |
|
427 | exports.satisfy = satisfy;
|
428 |
|
429 | exports.stringifyHoley = json => {
|
430 | switch (typeof json) {
|
431 | case "undefined":
|
432 | return "";
|
433 | case "object":
|
434 | if (Array.isArray(json)) {
|
435 | let str = "[";
|
436 | for (let i = 0; i < json.length; i++) {
|
437 | if (i !== 0) str += ",";
|
438 | str += this.stringifyHoley(json[i]);
|
439 | }
|
440 | str += "]";
|
441 | return str;
|
442 | } else {
|
443 | return JSON.stringify(json);
|
444 | }
|
445 | default:
|
446 | return JSON.stringify(json);
|
447 | }
|
448 | };
|
449 |
|
450 |
|
451 | exports.parseVersionRuntimeCode = runtimeTemplate =>
|
452 | `var parseVersion = ${runtimeTemplate.basicFunction("str", [
|
453 | "// see webpack/lib/util/semver.js for original code",
|
454 | `var p=${
|
455 | runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"
|
456 | }{return p.split(".").map((${
|
457 | runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"
|
458 | }{return+p==p?+p:p}))},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;`
|
459 | ])}`;
|
460 |
|
461 |
|
462 |
|
463 | exports.versionLtRuntimeCode = runtimeTemplate =>
|
464 | `var versionLt = ${runtimeTemplate.basicFunction("a, b", [
|
465 | "// see webpack/lib/util/semver.js for original code",
|
466 | 'a=parseVersion(a),b=parseVersion(b);for(var r=0;;){if(r>=a.length)return r<b.length&&"u"!=(typeof b[r])[0];var e=a[r],n=(typeof e)[0];if(r>=b.length)return"u"==n;var t=b[r],f=(typeof t)[0];if(n!=f)return"o"==n&&"n"==f||("s"==f||"u"==n);if("o"!=n&&"u"!=n&&e!=t)return e<t;r++}'
|
467 | ])}`;
|
468 |
|
469 |
|
470 |
|
471 | exports.rangeToStringRuntimeCode = runtimeTemplate =>
|
472 | `var rangeToString = ${runtimeTemplate.basicFunction("range", [
|
473 | "// see webpack/lib/util/semver.js for original code",
|
474 | 'var r=range[0],n="";if(1===range.length)return"*";if(r+.5){n+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var e=1,a=1;a<range.length;a++){e--,n+="u"==(typeof(t=range[a]))[0]?"-":(e>0?".":"")+(e=2,t)}return n}var g=[];for(a=1;a<range.length;a++){var t=range[a];g.push(0===t?"not("+o()+")":1===t?"("+o()+" || "+o()+")":2===t?g.pop()+" "+g.pop():rangeToString(t))}return o();function o(){return g.pop().replace(/^\\((.+)\\)$/,"$1")}'
|
475 | ])}`;
|
476 |
|
477 |
|
478 |
|
479 | exports.satisfyRuntimeCode = runtimeTemplate =>
|
480 | `var satisfy = ${runtimeTemplate.basicFunction("range, version", [
|
481 | "// see webpack/lib/util/semver.js for original code",
|
482 | 'if(0 in range){version=parseVersion(version);var e=range[0],r=e<0;r&&(e=-e-1);for(var n=0,i=1,a=!0;;i++,n++){var f,s,g=i<range.length?(typeof range[i])[0]:"";if(n>=version.length||"o"==(s=(typeof(f=version[n]))[0]))return!a||("u"==g?i>e&&!r:""==g!=r);if("u"==s){if(!a||"u"!=g)return!1}else if(a)if(g==s)if(i<=e){if(f!=range[i])return!1}else{if(r?f>range[i]:f<range[i])return!1;f!=range[i]&&(a=!1)}else if("s"!=g&&"n"!=g){if(r||i<=e)return!1;a=!1,i--}else{if(i<=e||s<g!=r)return!1;a=!1}else"s"!=g&&"n"!=g&&(a=!1,i--)}}var t=[],o=t.pop.bind(t);for(n=1;n<range.length;n++){var u=range[n];t.push(1==u?o()|o():2==u?o()&o():u?satisfy(u,version):!o())}return!!o();'
|
483 | ])}`;
|
484 |
|