|
| 1 | +/* eslint-disable quote-props */ |
1 | 2 | 'use strict'; |
2 | | -var os = require('os'); |
3 | | -var semver = require('semver'); |
| 3 | +const os = require('os'); |
| 4 | +const execa = require('execa'); |
4 | 5 |
|
5 | | -var nameMap = { |
| 6 | +// Reference: https://www.gaijin.at/en/lstwinver.php |
| 7 | +const nameMap = { |
6 | 8 | '10.0': '10', |
7 | 9 | '6.3': '8.1', |
8 | 10 | '6.2': '8', |
9 | 11 | '6.1': '7', |
10 | 12 | '6.0': 'Vista', |
| 13 | + '5.2': 'Server 2003', |
11 | 14 | '5.1': 'XP', |
12 | 15 | '5.0': '2000', |
13 | 16 | '4.9': 'ME', |
14 | 17 | '4.1': '98', |
15 | 18 | '4.0': '95' |
16 | 19 | }; |
17 | 20 |
|
18 | | -module.exports = function (release) { |
19 | | - var verRe = /\d+\.\d+/; |
20 | | - var version = verRe.exec(release || os.release()); |
21 | | - |
22 | | - // workaround for Windows 10 on node < 3.1.0 |
23 | | - if (!release && process.platform === 'win32' && |
24 | | - semver.satisfies(process.version, '>=0.12.0 <3.1.0')) { |
25 | | - try { |
26 | | - version = verRe.exec(String(require('child_process').execSync('ver.exe', {timeout: 2000}))); |
27 | | - } catch (err) {} |
28 | | - } |
| 21 | +module.exports = release => { |
| 22 | + const version = /\d+\.\d+/.exec(release || os.release()); |
29 | 23 |
|
30 | 24 | if (release && !version) { |
31 | 25 | throw new Error('`release` argument doesn\'t match `n.n`'); |
32 | 26 | } |
33 | 27 |
|
34 | | - return nameMap[(version || [])[0]]; |
| 28 | + const ver = (version || [])[0]; |
| 29 | + |
| 30 | + // Server 2008, 2012 and 2016 versions are ambiguous with desktop versions |
| 31 | + if (!release && ['6.1', '6.2', '6.3', '10.0'].indexOf(ver) !== -1) { |
| 32 | + const stdout = execa.sync('wmic', ['os', 'get', 'Caption']).stdout || ''; |
| 33 | + const year = (stdout.match(/2008|2012|2016/) || [])[0]; |
| 34 | + if (year) { |
| 35 | + return `Server ${year}`; |
| 36 | + } |
| 37 | + } |
| 38 | + |
| 39 | + return nameMap[ver]; |
35 | 40 | }; |
0 commit comments