dsh-remote 0.8.50 → 0.8.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.en.md +8 -0
  2. package/README.md +22 -0
  3. package/lib/client.js +15 -3
  4. package/lib/index.js +269 -8
  5. package/lib/instructions.js +288 -0
  6. package/lib/openssh.js +10 -1
  7. package/lib/pool.js +29 -1
  8. package/lib/remote-fs.js +26 -1
  9. package/lib/sftp-surface.js +46 -3
  10. package/lib/sshconfig.js +13 -3
  11. package/node_modules/buildcheck/.eslintrc.js +5 -0
  12. package/node_modules/buildcheck/.github/workflows/ci.yml +88 -0
  13. package/node_modules/buildcheck/.github/workflows/lint.yml +27 -0
  14. package/node_modules/buildcheck/.npmignore +3 -0
  15. package/node_modules/buildcheck/LICENSE +19 -0
  16. package/node_modules/buildcheck/README.md +106 -0
  17. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  18. package/node_modules/buildcheck/lib/findvs.js +361 -0
  19. package/node_modules/buildcheck/lib/index.js +738 -0
  20. package/node_modules/buildcheck/package.json +36 -0
  21. package/node_modules/buildcheck/test/test.js +8 -0
  22. package/node_modules/cpu-features/.eslintrc.js +5 -0
  23. package/node_modules/cpu-features/.github/workflows/ci.yml +74 -0
  24. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  25. package/node_modules/cpu-features/LICENSE +19 -0
  26. package/node_modules/cpu-features/README.md +59 -0
  27. package/node_modules/cpu-features/binding.gyp +16 -0
  28. package/node_modules/cpu-features/buildcheck.js +32 -0
  29. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  30. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  31. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  32. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  33. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  34. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  35. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  36. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  37. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  38. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  39. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  40. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  41. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  42. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  43. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  44. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  45. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  46. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  47. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  48. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  49. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  50. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  51. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  52. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  53. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  54. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  55. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  56. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  57. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  58. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  59. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  60. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  61. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  62. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  63. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  64. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  65. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  66. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  67. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +105 -0
  68. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  69. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  70. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  71. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  72. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  73. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  74. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  75. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  76. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  77. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  78. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  79. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  80. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  81. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  82. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  83. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  84. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  85. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  86. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  87. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  88. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  89. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  90. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  91. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  92. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  93. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  94. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  95. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  96. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  97. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  98. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  99. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  100. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  101. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  102. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  103. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  104. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  105. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  106. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  107. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  108. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  109. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  110. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  111. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  112. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  113. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  114. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  115. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  116. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  117. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  118. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  119. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  120. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  121. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  122. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  123. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  124. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  125. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  126. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  127. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  128. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  129. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  130. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  131. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  132. package/node_modules/cpu-features/lib/index.js +5 -0
  133. package/node_modules/cpu-features/package.json +40 -0
  134. package/node_modules/cpu-features/src/binding.cc +151 -0
  135. package/node_modules/cpu-features/test/test.js +12 -0
  136. package/package.json +1 -1
@@ -0,0 +1,361 @@
1
+ 'use strict';
2
+
3
+ const { execFileSync } = require('child_process');
4
+ const { readFileSync, statSync } = require('fs');
5
+ const { win32: path } = require('path');
6
+
7
+ const modernMSBuildPath = (() => {
8
+ let arch;
9
+ switch (process.arch) {
10
+ case 'x64':
11
+ arch = 'amd64';
12
+ break;
13
+ case 'arm64':
14
+ arch = process.arch;
15
+ break;
16
+ default:
17
+ arch = '';
18
+ }
19
+ return path.join('MSBuild', 'Current', 'Bin', arch, 'MSBuild.exe');
20
+ })();
21
+ const VS_VERSIONS_MODERN = new Map([
22
+ [15, {
23
+ year: 2017,
24
+ msbuild: path.join('MSBuild', '15.0', 'Bin', 'MSBuild.exe'),
25
+ toolset: 'v141',
26
+ }],
27
+ [16, {
28
+ year: 2019,
29
+ msbuild: path.join('MSBuild', 'Current', 'Bin', 'MSBuild.exe'),
30
+ toolset: 'v142',
31
+ }],
32
+ [17, {
33
+ year: 2022,
34
+ msbuild: modernMSBuildPath,
35
+ toolset: 'v143',
36
+ }],
37
+ [18, {
38
+ year: 2026,
39
+ msbuild: modernMSBuildPath,
40
+ toolset: 'v145',
41
+ }],
42
+ ]);
43
+ const PACKAGES = {
44
+ msbuild: /^Microsoft[.]VisualStudio[.]VC[.]MSBuild[.](?:v\d+[.])?Base$/i,
45
+ vctools: /^Microsoft[.]VisualStudio[.]Component[.]VC[.]Tools[.](x86[.]x64|ARM64)$/i,
46
+ express: /^Microsoft[.]VisualStudio[.]WDExpress$/i,
47
+ winsdk:
48
+ /^Microsoft[.]VisualStudio[.]Component[.]Windows(81|10|11)SDK(?:[.](\d+)(?:[.]Desktop.*)?)?$/,
49
+ };
50
+ const SDK_REG = 'HKLM\\Software\\Microsoft\\Microsoft SDKs\\Windows';
51
+ const SDK32_REG =
52
+ 'HKLM\\Software\\Wow6432Node\\Microsoft\\Microsoft SDKs\\Windows';
53
+
54
+ function checkRequiredPackages(packages) {
55
+ if (!Array.isArray(packages))
56
+ return false;
57
+
58
+ let foundMSBuild = false;
59
+ let foundVCTools = false;
60
+ let foundExpress = false;
61
+ for (const pkg of packages) {
62
+ if (!foundMSBuild && PACKAGES.msbuild.test(pkg))
63
+ foundMSBuild = true;
64
+ else if (!foundVCTools && PACKAGES.vctools.test(pkg))
65
+ foundVCTools = true;
66
+ else if (!foundExpress && PACKAGES.express.test(pkg))
67
+ foundExpress = true;
68
+
69
+ if (foundMSBuild && (foundVCTools || foundExpress))
70
+ return true;
71
+ }
72
+ }
73
+
74
+ // Sorts newest to oldest
75
+ function versionStringCompare(a, b) {
76
+ const splitA = a.split('.');
77
+ const splitB = b.split('.');
78
+ const len = Math.min(splitA.length, splitB.length);
79
+ for (let i = 0; i < len; ++i) {
80
+ const nA = parseInt(splitA[i], 10);
81
+ const nB = parseInt(splitB[i], 10);
82
+ if (nA > nB)
83
+ return -1;
84
+ if (nA < nB)
85
+ return 1;
86
+ }
87
+ if (splitA.length > splitB.length)
88
+ return -1;
89
+ else if (splitA.length < splitB.length)
90
+ return 1;
91
+ return 0;
92
+ }
93
+
94
+ function sdkVersionCompare(a, b) {
95
+ return versionStringCompare(a.fullVersion, b.fullVersion);
96
+ }
97
+
98
+ function getSDKPaths(fullVer) {
99
+ if (typeof fullVer !== 'string' || !fullVer)
100
+ return;
101
+ try {
102
+ const arch = (process.arch === 'ia32' ? 'x86' : process.arch);
103
+ const shortVer = `v${/^\d+[.]\d+/.exec(fullVer)[0]}`;
104
+ let verPath = getRegValue(`${SDK_REG}\\${shortVer}`, 'InstallationFolder');
105
+ if (!verPath)
106
+ verPath = getRegValue(`${SDK32_REG}\\${shortVer}`, 'InstallationFolder');
107
+ if (!verPath)
108
+ return;
109
+
110
+ // Includes
111
+ const includePaths = [];
112
+ for (const type of ['shared', 'um', 'ucrt']) {
113
+ const testPath = path.resolve(verPath, 'Include', fullVer, type);
114
+ statSync(testPath);
115
+ includePaths.push(testPath);
116
+ }
117
+
118
+ // Libraries
119
+ const libPaths = [];
120
+ for (const type of ['um', 'ucrt']) {
121
+ const testPath = path.resolve(verPath, 'Lib', fullVer, type, arch);
122
+ statSync(testPath);
123
+ libPaths.push(testPath);
124
+ }
125
+
126
+ return { includePaths, libPaths };
127
+ } catch {}
128
+ }
129
+
130
+ const execOpts = {
131
+ encoding: 'utf8',
132
+ stdio: ['ignore', 'pipe', 'pipe'],
133
+ windowsHide: true,
134
+ };
135
+
136
+ function findModernVS() {
137
+ const versions = [];
138
+ const ps = path.join(
139
+ process.env.SystemRoot,
140
+ 'System32',
141
+ 'WindowsPowerShell',
142
+ 'v1.0',
143
+ 'powershell.exe'
144
+ );
145
+ const cs = path.resolve(__dirname, '..', 'deps', 'Find-VisualStudio.cs');
146
+ const args = [
147
+ '-ExecutionPolicy',
148
+ 'Unrestricted',
149
+ '-NoProfile',
150
+ '-Command',
151
+ `&{Add-Type -Path '${cs}';[VisualStudioConfiguration.Main]::PrintJson()}`
152
+ ];
153
+ try {
154
+ const out = execFileSync(ps, args, execOpts);
155
+ const info = JSON.parse(out);
156
+ if (Array.isArray(info)) {
157
+ for (const vs of info) {
158
+ const vsPath = path.resolve(vs.path);
159
+ let vsVer = /^(?<major>\d+)[.](?<minor>\d+)[.]/.exec(vs.version);
160
+ if (!vsVer)
161
+ continue;
162
+ vsVer = {
163
+ full: vs.version,
164
+ major: +vsVer.groups.major,
165
+ minor: +vsVer.groups.minor,
166
+ };
167
+ const verInfo = VS_VERSIONS_MODERN.get(vsVer.major);
168
+ if (verInfo === undefined)
169
+ continue;
170
+ if (!checkRequiredPackages(vs.packages))
171
+ continue;
172
+ const vsSDKs = [];
173
+ for (const pkg of vs.packages) {
174
+ let fullVersion;
175
+ let version;
176
+ const m = PACKAGES.winsdk.exec(pkg);
177
+ if (!m)
178
+ continue;
179
+ const sdk = m[1];
180
+ switch (sdk) {
181
+ case '81':
182
+ fullVersion = version = '8.1';
183
+ break;
184
+ case '10':
185
+ case '11': {
186
+ if (m[2] === undefined)
187
+ continue;
188
+ const sdkVer = parseInt(m[2], 10);
189
+ if (!isFinite(sdkVer) || sdkVer < 0)
190
+ continue;
191
+ fullVersion = `10.0.${sdkVer}.0`;
192
+ version = '10.0';
193
+ break;
194
+ }
195
+ }
196
+ const paths = getSDKPaths(fullVersion);
197
+ if (!paths)
198
+ continue;
199
+ vsSDKs.push({
200
+ version,
201
+ fullVersion,
202
+ ...paths,
203
+ });
204
+ }
205
+ if (vsSDKs.length === 0)
206
+ continue;
207
+ let clPath;
208
+ const includePaths = [];
209
+ const libPaths = [];
210
+ try {
211
+ let vcVerFile;
212
+ let clVer;
213
+ try {
214
+ vcVerFile = path.join(
215
+ vsPath,
216
+ 'VC',
217
+ 'Auxiliary',
218
+ 'Build',
219
+ `Microsoft.VCToolsVersion.${verInfo.toolset}.default.txt`
220
+ );
221
+ clVer = readFileSync(vcVerFile, { encoding: 'utf8' }).trim();
222
+ } catch {}
223
+ if (!clVer) {
224
+ vcVerFile = path.join(
225
+ vsPath,
226
+ 'VC',
227
+ 'Auxiliary',
228
+ 'Build',
229
+ 'Microsoft.VCToolsVersion.default.txt'
230
+ );
231
+ clVer = readFileSync(vcVerFile, { encoding: 'utf8' }).trim();
232
+ }
233
+ const arch = (process.arch === 'ia32' ? 'x86' : process.arch);
234
+ let testPath = path.join(
235
+ vsPath,
236
+ 'VC',
237
+ 'Tools',
238
+ 'MSVC',
239
+ clVer,
240
+ 'bin',
241
+ `Host${arch}`,
242
+ arch,
243
+ 'cl.exe'
244
+ );
245
+ statSync(testPath);
246
+ clPath = testPath;
247
+
248
+ testPath = path.join(
249
+ vsPath,
250
+ 'VC',
251
+ 'Tools',
252
+ 'MSVC',
253
+ clVer,
254
+ 'include'
255
+ );
256
+ statSync(testPath);
257
+ includePaths.push(testPath);
258
+
259
+ testPath = path.join(
260
+ vsPath,
261
+ 'VC',
262
+ 'Tools',
263
+ 'MSVC',
264
+ clVer,
265
+ 'lib',
266
+ arch
267
+ );
268
+ statSync(testPath);
269
+ libPaths.push(testPath);
270
+ } catch {
271
+ continue;
272
+ }
273
+ vsSDKs.sort(sdkVersionCompare);
274
+ versions.push({
275
+ path: vsPath,
276
+ version: vsVer,
277
+ sdks: vsSDKs,
278
+ ...verInfo,
279
+ msbuild: path.join(vsPath, verInfo.msbuild),
280
+ cl: clPath,
281
+ includePaths,
282
+ libPaths,
283
+ });
284
+ }
285
+ }
286
+ } catch {}
287
+ return versions;
288
+ }
289
+
290
+ const VS_VERSIONS_OLDER = [
291
+ {
292
+ version: { full: '12.0', major: 12, minor: 0 },
293
+ year: 2013,
294
+ toolset: 'v120',
295
+ },
296
+ {
297
+ version: { full: '14.0', major: 14, minor: 0 },
298
+ year: 2015,
299
+ toolset: 'v140',
300
+ },
301
+ ];
302
+
303
+ const VC_REG = 'HKLM\\Software\\Microsoft\\VisualStudio\\SxS\\VC7';
304
+ const VC32_REG =
305
+ 'HKLM\\Software\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\VC7';
306
+ const MSBUILD_REG = 'HKLM\\Software\\Microsoft\\MSBuild\\ToolsVersions';
307
+
308
+ function getRegValue(key, value, use32) {
309
+ const extraArgs = (use32 ? [ '/reg:32' ] : []);
310
+ const regexp = new RegExp(`^\\s+${value}\\s+REG_\\w+\\s+(\\S.*)$`, 'im');
311
+ const reg = path.join(process.env.SystemRoot, 'System32', 'reg.exe');
312
+ const args = [ 'query', key, '/v', value, ...extraArgs ];
313
+
314
+ try {
315
+ const out = execFileSync(reg, args, execOpts);
316
+ const m = regexp.exec(out);
317
+ if (m)
318
+ return m[1];
319
+ } catch {}
320
+ }
321
+
322
+ function findOlderVS() {
323
+ const versions = [];
324
+ try {
325
+ for (const vs of VS_VERSIONS_OLDER) {
326
+ let vsPath = getRegValue(VC_REG, vs.version.full);
327
+ if (!vsPath)
328
+ vsPath = getRegValue(VC32_REG, vs.version.full);
329
+ if (!vsPath)
330
+ continue;
331
+ vsPath = path.resolve(vsPath, '..');
332
+
333
+ const msbuildPath = getRegValue(
334
+ `${MSBUILD_REG}\\${vs.version.full}`,
335
+ 'MSBuildToolsPath',
336
+ (process.arch === 'ia32')
337
+ );
338
+ if (!msbuildPath)
339
+ continue;
340
+ versions.push({
341
+ path: vsPath,
342
+ ...vs,
343
+ msbuild: path.join(msbuildPath, 'MSBuild.exe'),
344
+ cl: path.join(vsPath, 'VC', 'bin', 'cl.exe'),
345
+ includePaths: [path.join(vsPath, 'VC', 'include')],
346
+ libPaths: [path.join(vsPath, 'VC', 'lib')],
347
+ sdks: [],
348
+ });
349
+ }
350
+ } catch {}
351
+ return versions;
352
+ }
353
+
354
+ module.exports = () => {
355
+ const versions = findModernVS().concat(findOlderVS());
356
+ // Sorts newest to oldest
357
+ versions.sort((a, b) => {
358
+ return versionStringCompare(a.version.full, b.version.full);
359
+ });
360
+ return versions;
361
+ };