1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
var startsWithDigit = require('./helpers').startsWithDigit;
exports.OS = OS
function OS(family, major, minor, patch, patchMinor) {
this.family = family || 'Other';
this.major = major || null;
this.minor = minor || null;
this.patch = patch || null;
this.patchMinor = patchMinor || null;
}
OS.prototype.toVersionString = function() {
var output = '';
if (this.major != null) {
output += this.major;
if (this.minor != null) {
output += '.' + this.minor;
if (this.patch != null) {
if (startsWithDigit(this.patch)) { output += '.'; }
output += this.patch;
if (this.patchMinor != null) {
if (startsWithDigit(this.patchMinor)) { output += '.'; }
output += this.patchMinor;
}
}
}
}
return output;
};
OS.prototype.toString = function() {
var suffix = this.toVersionString();
if (suffix) { suffix = ' ' + suffix; }
return this.family + suffix;
};
function _makeParsers(obj) {
var regexp = new RegExp(obj.regex),
famRep = obj.os_replacement,
majorRep = obj.os_v1_replacement,
minorRep = obj.os_v2_replacement,
patchRep = obj.os_v3_replacement,
patchMinorRep = obj.os_v4_replacement;
function parser(str) {
var m = str.match(regexp);
if (!m) { return null; }
var family = famRep ? famRep.replace('$1', m[1]) : m[1],
major = majorRep || m[2],
minor = minorRep || m[3],
patch = patchRep || m[4],
patchMinor = patchMinorRep || m[5];
return new OS(family, major, minor, patch, patchMinor);
}
return parser;
}
exports.makeParser = function(regexes) {
var parsers = regexes.map(_makeParsers)
function parser(str) {
var obj;
if (typeof str === 'string') {
for (var i = 0, length = parsers.length; i < length; i++) {
obj = parsers[i](str);
if (obj) { return obj; }
}
}
return obj || new OS();
}
return parser;
}
|