bin/lib/check_reqs.js
function getInstalledPhoneSdks () {
    var installedSdks = [];
    return spawn('reg', ['query', 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows Phone\\v8.1', '/v', 'InstallationFolder', '/reg:32'])
        .fail(function () { return ''; })
        .then(function (output) {
            var match = /\\Microsoft SDKs\\Windows Phone\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*)/gim.exec(output);
            if (match && shell.test('-e', path.join(match[2], 'SDKManifest.xml'))) {
                installedSdks.push(Version.tryParse(match[1]));
            }
        }).then(function () {
            return spawn('reg', ['query', 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v10.0', '/v', 'InstallationFolder', '/reg:32']);
        }).fail(function () {
            return '';
        }).then(function (output) {
            var match = /\\Microsoft SDKs\\Windows\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*)/gim.exec(output);
            if (match && shell.test('-e', path.join(match[2], 'SDKManifest.xml'))) {
                installedSdks.push(Version.tryParse(match[1]));
            }
        }).thenResolve(installedSdks);
}
function getInstalledPhoneSdks () {
    var installedSdks = [];
    return spawn('reg', ['query', 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows Phone\\v8.1', '/v', 'InstallationFolder', '/reg:32'])
        .fail(function () { return ''; })
        .then(function (output) {
            var match = /\\Microsoft SDKs\\Windows Phone\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*)/gim.exec(output);
            if (match && shell.test('-e', path.join(match[2], 'SDKManifest.xml'))) {
                installedSdks.push(Version.tryParse(match[1]));
            }
        }).then(function () {
            return spawn('reg', ['query', 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v10.0', '/v', 'InstallationFolder', '/reg:32']);
        }).fail(function () {
            return '';
        }).then(function (output) {
            var match = /\\Microsoft SDKs\\Windows\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*)/gim.exec(output);
            if (match && shell.test('-e', path.join(match[2], 'SDKManifest.xml'))) {
                installedSdks.push(Version.tryParse(match[1]));
            }
        }).thenResolve(installedSdks);
}
function getInstalledPhoneSdks ( ) { var installedSdks = [ ] ; return spawn ( 'reg' , [ 'query' , 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows Phone\\v8.1' , '/v' , 'InstallationFolder' , '/reg:32' ] ) . fail ( function ( ) { return '' ; } ) . then ( function ( output ) { var match = / \\Microsoft SDKs\\Windows Phone\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*) / gim . exec ( output ) ; if ( match && shell . test ( '-e' , path . join ( match [ 2 ] , 'SDKManifest.xml' ) ) ) { installedSdks . push ( Version . tryParse ( match [ 1 ] ) ) ; } } ) . then ( function ( ) { return spawn ( 'reg' , [ 'query' , 'HKLM\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v10.0' , '/v' , 'InstallationFolder' , '/reg:32' ] ) ; } ) . fail ( function ( ) { return '' ; } ) . then ( function ( output ) { var match = / \\Microsoft SDKs\\Windows\\v(\d+\.\d+)\s*InstallationFolder\s+REG_SZ\s+(.*) / gim . exec ( output ) ; if ( match && shell . test ( '-e' , path . join ( match [ 2 ] , 'SDKManifest.xml' ) ) ) { installedSdks . push ( Version . tryParse ( match [ 1 ] ) ) ; } } ) . thenResolve ( installedSdks ) ; }
Gets list of installed Windows Phone SDKs. Separately searches for 8.1 Phone
SDK and Windows 10 SDK, because the latter is needed for both Windows and
Windows Phone applications.

@return  {Version[]}  List of installed Phone SDKs' versions.
Gets list of installed Windows Phone SDKs . Separately searches for 8 . 1 Phone SDK and Windows 10 SDK because the latter is needed for both Windows and Windows Phone applications .