Skip to content

Commit 686f510

Browse files
silverwindsindresorhus
authored andcommitted
Add Windows Server detection and require Node.js 4 (#7)
1 parent 90bd97f commit 686f510

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

.travis.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,3 @@ language: node_js
33
node_js:
44
- '6'
55
- '4'
6-
- '0.12'
7-
- '0.10'

index.js

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,40 @@
1+
/* eslint-disable quote-props */
12
'use strict';
2-
var os = require('os');
3-
var semver = require('semver');
3+
const os = require('os');
4+
const execa = require('execa');
45

5-
var nameMap = {
6+
// Reference: https://www.gaijin.at/en/lstwinver.php
7+
const nameMap = {
68
'10.0': '10',
79
'6.3': '8.1',
810
'6.2': '8',
911
'6.1': '7',
1012
'6.0': 'Vista',
13+
'5.2': 'Server 2003',
1114
'5.1': 'XP',
1215
'5.0': '2000',
1316
'4.9': 'ME',
1417
'4.1': '98',
1518
'4.0': '95'
1619
};
1720

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());
2923

3024
if (release && !version) {
3125
throw new Error('`release` argument doesn\'t match `n.n`');
3226
}
3327

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];
3540
};

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"url": "sindresorhus.com"
1111
},
1212
"engines": {
13-
"node": ">=0.10.0"
13+
"node": ">=4"
1414
},
1515
"scripts": {
1616
"test": "xo && ava"
@@ -32,7 +32,7 @@
3232
"version"
3333
],
3434
"dependencies": {
35-
"semver": "^5.0.1"
35+
"execa": "^0.7.0"
3636
},
3737
"devDependencies": {
3838
"ava": "*",

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Type: `string`
4242

4343
By default the current OS is used, but you can supply a custom release number, which is the output of [`os.release()`](http://nodejs.org/api/os.html#os_os_release).
4444

45+
Note: Most Windows Server versions cannot be detected based on the release number alone. There is runtime detection in place to work around this, but it will only be used if no argument is supplied.
4546

4647
## Related
4748

0 commit comments

Comments
 (0)