dsh-remote 0.8.46 → 0.8.48

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 (391) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +361 -361
  3. package/README.md +368 -368
  4. package/cordis.patch.yml +9 -9
  5. package/lib/binding.js +172 -172
  6. package/lib/client.js +3637 -3637
  7. package/lib/credential.js +177 -177
  8. package/lib/deploy-tasks.js +142 -142
  9. package/lib/errors.js +87 -87
  10. package/lib/file-reference.js +457 -457
  11. package/lib/forwards.js +258 -258
  12. package/lib/hostkey.js +108 -108
  13. package/lib/http-transport.js +196 -196
  14. package/lib/ignore.js +202 -156
  15. package/lib/index.js +3779 -3747
  16. package/lib/openssh.js +838 -838
  17. package/lib/paths.js +225 -225
  18. package/lib/pool.js +757 -757
  19. package/lib/registry.js +95 -95
  20. package/lib/remote-fs.js +148 -143
  21. package/lib/routes-fs.js +233 -233
  22. package/lib/search.js +235 -230
  23. package/lib/sftp-surface.js +76 -76
  24. package/lib/sshconfig.js +454 -454
  25. package/lib/sync.js +275 -275
  26. package/lib/tasks.js +95 -95
  27. package/lib/telemetry.js +213 -213
  28. package/lib/update.js +472 -472
  29. package/lib/web-attach.js +850 -850
  30. package/lib/web-deploy-skill.js +205 -205
  31. package/lib/web-deploy.js +694 -694
  32. package/node_modules/asn1/Jenkinsfile +65 -0
  33. package/node_modules/asn1/LICENSE +19 -0
  34. package/node_modules/asn1/README.md +50 -0
  35. package/node_modules/asn1/lib/ber/errors.js +13 -0
  36. package/node_modules/asn1/lib/ber/index.js +27 -0
  37. package/node_modules/asn1/lib/ber/reader.js +262 -0
  38. package/node_modules/asn1/lib/ber/types.js +36 -0
  39. package/node_modules/asn1/lib/ber/writer.js +317 -0
  40. package/node_modules/asn1/lib/index.js +20 -0
  41. package/node_modules/asn1/package.json +31 -0
  42. package/node_modules/bcrypt-pbkdf/CONTRIBUTING.md +13 -0
  43. package/node_modules/bcrypt-pbkdf/LICENSE +66 -0
  44. package/node_modules/bcrypt-pbkdf/README.md +45 -0
  45. package/node_modules/bcrypt-pbkdf/index.js +556 -0
  46. package/node_modules/bcrypt-pbkdf/package.json +15 -0
  47. package/node_modules/buildcheck/.eslintrc.js +5 -0
  48. package/node_modules/buildcheck/.github/workflows/ci.yml +88 -0
  49. package/node_modules/buildcheck/.github/workflows/lint.yml +27 -0
  50. package/node_modules/buildcheck/.npmignore +3 -0
  51. package/node_modules/buildcheck/LICENSE +19 -0
  52. package/node_modules/buildcheck/README.md +106 -0
  53. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  54. package/node_modules/buildcheck/lib/findvs.js +361 -0
  55. package/node_modules/buildcheck/lib/index.js +738 -0
  56. package/node_modules/buildcheck/package.json +36 -0
  57. package/node_modules/buildcheck/test/test.js +8 -0
  58. package/node_modules/cpu-features/.eslintrc.js +5 -0
  59. package/node_modules/cpu-features/.github/workflows/ci.yml +74 -0
  60. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  61. package/node_modules/cpu-features/LICENSE +19 -0
  62. package/node_modules/cpu-features/README.md +59 -0
  63. package/node_modules/cpu-features/binding.gyp +16 -0
  64. package/node_modules/cpu-features/buildcheck.js +32 -0
  65. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  66. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  67. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  68. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  69. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  70. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  71. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  72. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  73. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  74. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  75. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  76. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  77. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  78. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  79. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  80. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  81. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  82. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  83. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  84. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  85. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  86. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  87. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  88. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  89. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  90. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  91. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  92. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  93. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  94. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  95. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  96. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  97. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  98. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  99. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  100. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  101. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  102. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  103. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +105 -0
  104. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  105. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  106. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  107. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  108. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  109. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  110. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  111. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  112. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  113. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  114. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  115. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  116. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  117. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  118. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  119. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  120. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  121. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  122. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  123. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  124. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  125. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  126. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  127. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  128. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  129. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  130. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  131. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  132. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  133. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  134. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  135. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  136. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  137. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  138. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  139. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  140. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  141. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  142. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  143. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  144. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  145. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  146. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  147. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  148. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  149. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  150. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  151. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  152. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  153. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  154. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  155. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  156. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  157. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  158. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  159. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  160. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  161. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  162. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  163. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  164. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  165. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  166. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  167. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  168. package/node_modules/cpu-features/lib/index.js +5 -0
  169. package/node_modules/cpu-features/package.json +40 -0
  170. package/node_modules/cpu-features/src/binding.cc +151 -0
  171. package/node_modules/cpu-features/test/test.js +12 -0
  172. package/node_modules/nan/.github/workflows/ci.yml +46 -0
  173. package/node_modules/nan/.pre-commit-config.yaml +8 -0
  174. package/node_modules/nan/CHANGELOG.md +605 -0
  175. package/node_modules/nan/CMakeLists.txt +138 -0
  176. package/node_modules/nan/LICENSE.md +9 -0
  177. package/node_modules/nan/README.md +457 -0
  178. package/node_modules/nan/doc/asyncworker.md +146 -0
  179. package/node_modules/nan/doc/buffers.md +54 -0
  180. package/node_modules/nan/doc/callback.md +76 -0
  181. package/node_modules/nan/doc/converters.md +41 -0
  182. package/node_modules/nan/doc/errors.md +226 -0
  183. package/node_modules/nan/doc/json.md +62 -0
  184. package/node_modules/nan/doc/maybe_types.md +583 -0
  185. package/node_modules/nan/doc/methods.md +689 -0
  186. package/node_modules/nan/doc/new.md +147 -0
  187. package/node_modules/nan/doc/node_misc.md +123 -0
  188. package/node_modules/nan/doc/object_wrappers.md +263 -0
  189. package/node_modules/nan/doc/persistent.md +296 -0
  190. package/node_modules/nan/doc/scopes.md +73 -0
  191. package/node_modules/nan/doc/script.md +58 -0
  192. package/node_modules/nan/doc/string_bytes.md +81 -0
  193. package/node_modules/nan/doc/v8_internals.md +211 -0
  194. package/node_modules/nan/doc/v8_misc.md +85 -0
  195. package/node_modules/nan/include_dirs.js +1 -0
  196. package/node_modules/nan/nan.h +3202 -0
  197. package/node_modules/nan/nan_callbacks.h +141 -0
  198. package/node_modules/nan/nan_callbacks_12_inl.h +730 -0
  199. package/node_modules/nan/nan_callbacks_pre_12_inl.h +528 -0
  200. package/node_modules/nan/nan_converters.h +72 -0
  201. package/node_modules/nan/nan_converters_43_inl.h +68 -0
  202. package/node_modules/nan/nan_converters_pre_43_inl.h +42 -0
  203. package/node_modules/nan/nan_define_own_property_helper.h +29 -0
  204. package/node_modules/nan/nan_implementation_12_inl.h +446 -0
  205. package/node_modules/nan/nan_implementation_pre_12_inl.h +263 -0
  206. package/node_modules/nan/nan_json.h +166 -0
  207. package/node_modules/nan/nan_maybe_43_inl.h +360 -0
  208. package/node_modules/nan/nan_maybe_pre_43_inl.h +268 -0
  209. package/node_modules/nan/nan_new.h +340 -0
  210. package/node_modules/nan/nan_object_wrap.h +156 -0
  211. package/node_modules/nan/nan_persistent_12_inl.h +132 -0
  212. package/node_modules/nan/nan_persistent_pre_12_inl.h +242 -0
  213. package/node_modules/nan/nan_private.h +73 -0
  214. package/node_modules/nan/nan_scriptorigin.h +97 -0
  215. package/node_modules/nan/nan_string_bytes.h +305 -0
  216. package/node_modules/nan/nan_typedarray_contents.h +96 -0
  217. package/node_modules/nan/nan_weak.h +453 -0
  218. package/node_modules/nan/package.json +38 -0
  219. package/node_modules/nan/tools/1to2.js +412 -0
  220. package/node_modules/nan/tools/README.md +14 -0
  221. package/node_modules/nan/tools/package.json +19 -0
  222. package/node_modules/safer-buffer/LICENSE +21 -0
  223. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  224. package/node_modules/safer-buffer/Readme.md +156 -0
  225. package/node_modules/safer-buffer/dangerous.js +58 -0
  226. package/node_modules/safer-buffer/package.json +34 -0
  227. package/node_modules/safer-buffer/safer.js +77 -0
  228. package/node_modules/safer-buffer/tests.js +406 -0
  229. package/node_modules/ssh2/.eslintignore +4 -0
  230. package/node_modules/ssh2/.eslintrc.js +5 -0
  231. package/node_modules/ssh2/.github/workflows/ci.yml +110 -0
  232. package/node_modules/ssh2/.github/workflows/lint.yml +27 -0
  233. package/node_modules/ssh2/LICENSE +19 -0
  234. package/node_modules/ssh2/README.md +1529 -0
  235. package/node_modules/ssh2/SFTP.md +413 -0
  236. package/node_modules/ssh2/examples/server-chat.js +238 -0
  237. package/node_modules/ssh2/examples/sftp-server-download-only.js +134 -0
  238. package/node_modules/ssh2/install.js +27 -0
  239. package/node_modules/ssh2/lib/Channel.js +295 -0
  240. package/node_modules/ssh2/lib/agent.js +1123 -0
  241. package/node_modules/ssh2/lib/client.js +2176 -0
  242. package/node_modules/ssh2/lib/http-agents.js +84 -0
  243. package/node_modules/ssh2/lib/index.js +44 -0
  244. package/node_modules/ssh2/lib/keygen.js +582 -0
  245. package/node_modules/ssh2/lib/protocol/Protocol.js +2136 -0
  246. package/node_modules/ssh2/lib/protocol/SFTP.js +4052 -0
  247. package/node_modules/ssh2/lib/protocol/constants.js +356 -0
  248. package/node_modules/ssh2/lib/protocol/crypto/binding.gyp +23 -0
  249. package/node_modules/ssh2/lib/protocol/crypto/poly1305.js +43 -0
  250. package/node_modules/ssh2/lib/protocol/crypto/src/binding.cc +2300 -0
  251. package/node_modules/ssh2/lib/protocol/crypto.js +1602 -0
  252. package/node_modules/ssh2/lib/protocol/handlers.js +16 -0
  253. package/node_modules/ssh2/lib/protocol/handlers.misc.js +1285 -0
  254. package/node_modules/ssh2/lib/protocol/kex.js +1908 -0
  255. package/node_modules/ssh2/lib/protocol/keyParser.js +1484 -0
  256. package/node_modules/ssh2/lib/protocol/node-fs-compat.js +115 -0
  257. package/node_modules/ssh2/lib/protocol/utils.js +356 -0
  258. package/node_modules/ssh2/lib/protocol/zlib.js +255 -0
  259. package/node_modules/ssh2/lib/server.js +1380 -0
  260. package/node_modules/ssh2/lib/utils.js +336 -0
  261. package/node_modules/ssh2/package.json +49 -0
  262. package/node_modules/ssh2/test/common.js +316 -0
  263. package/node_modules/ssh2/test/fixtures/bad_rsa_private_key +26 -0
  264. package/node_modules/ssh2/test/fixtures/https_cert.pem +33 -0
  265. package/node_modules/ssh2/test/fixtures/https_key.pem +52 -0
  266. package/node_modules/ssh2/test/fixtures/id_dsa +12 -0
  267. package/node_modules/ssh2/test/fixtures/id_ecdsa +5 -0
  268. package/node_modules/ssh2/test/fixtures/id_rsa +15 -0
  269. package/node_modules/ssh2/test/fixtures/id_rsa.ppk +26 -0
  270. package/node_modules/ssh2/test/fixtures/id_rsa_enc +30 -0
  271. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa +21 -0
  272. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub +1 -0
  273. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.pub.result +7 -0
  274. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa.result +7 -0
  275. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc +22 -0
  276. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub +1 -0
  277. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.pub.result +7 -0
  278. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc.result +7 -0
  279. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm +23 -0
  280. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub +1 -0
  281. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.pub.result +7 -0
  282. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_dsa_enc_gcm.result +7 -0
  283. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa +9 -0
  284. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub +1 -0
  285. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.pub.result +7 -0
  286. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa.result +7 -0
  287. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc +10 -0
  288. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub +1 -0
  289. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.pub.result +8 -0
  290. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc.result +7 -0
  291. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm +10 -0
  292. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub +1 -0
  293. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.pub.result +8 -0
  294. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ecdsa_enc_gcm.result +7 -0
  295. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519 +7 -0
  296. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub +1 -0
  297. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.pub.result +7 -0
  298. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_ed25519.result +7 -0
  299. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa +27 -0
  300. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub +1 -0
  301. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.pub.result +7 -0
  302. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa.result +7 -0
  303. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc +28 -0
  304. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub +1 -0
  305. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.pub.result +8 -0
  306. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc.result +7 -0
  307. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm +29 -0
  308. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub +1 -0
  309. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.pub.result +8 -0
  310. package/node_modules/ssh2/test/fixtures/keyParser/openssh_new_rsa_enc_gcm.result +7 -0
  311. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa +12 -0
  312. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub +1 -0
  313. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.pub.result +7 -0
  314. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa.result +7 -0
  315. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc +15 -0
  316. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub +1 -0
  317. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.pub.result +8 -0
  318. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_dsa_enc.result +7 -0
  319. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa +5 -0
  320. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub +1 -0
  321. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.pub.result +7 -0
  322. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa.result +7 -0
  323. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc +8 -0
  324. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub +1 -0
  325. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.pub.result +8 -0
  326. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_ecdsa_enc.result +7 -0
  327. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa +27 -0
  328. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub +1 -0
  329. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.pub.result +7 -0
  330. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa.result +7 -0
  331. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc +30 -0
  332. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub +1 -0
  333. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.pub.result +8 -0
  334. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc.result +7 -0
  335. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256 +54 -0
  336. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub +1 -0
  337. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.pub.result +6 -0
  338. package/node_modules/ssh2/test/fixtures/keyParser/openssh_old_rsa_enc_aes256.result +6 -0
  339. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc +17 -0
  340. package/node_modules/ssh2/test/fixtures/keyParser/ppk_dsa_enc.result +7 -0
  341. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa +26 -0
  342. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa.result +7 -0
  343. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc +18 -0
  344. package/node_modules/ssh2/test/fixtures/keyParser/ppk_rsa_enc.result +7 -0
  345. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub +9 -0
  346. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa.pub.result +7 -0
  347. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub +10 -0
  348. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa2.pub.result +7 -0
  349. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub +11 -0
  350. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa3.pub.result +7 -0
  351. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub +11 -0
  352. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa4.pub.result +7 -0
  353. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub +8 -0
  354. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa5.pub.result +7 -0
  355. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub +13 -0
  356. package/node_modules/ssh2/test/fixtures/keyParser/rfc4716_rsa6.pub.result +7 -0
  357. package/node_modules/ssh2/test/fixtures/openssh_new_rsa +27 -0
  358. package/node_modules/ssh2/test/fixtures/ssh_host_dsa_key +12 -0
  359. package/node_modules/ssh2/test/fixtures/ssh_host_ecdsa_key +5 -0
  360. package/node_modules/ssh2/test/fixtures/ssh_host_rsa_key +15 -0
  361. package/node_modules/ssh2/test/test-exec.js +578 -0
  362. package/node_modules/ssh2/test/test-integration-openssh.js +486 -0
  363. package/node_modules/ssh2/test/test-keygen.js +60 -0
  364. package/node_modules/ssh2/test/test-misc-client-server.js +1460 -0
  365. package/node_modules/ssh2/test/test-openssh.js +261 -0
  366. package/node_modules/ssh2/test/test-protocol-crypto.js +631 -0
  367. package/node_modules/ssh2/test/test-protocol-keyparser.js +177 -0
  368. package/node_modules/ssh2/test/test-server-hostkeys.js +138 -0
  369. package/node_modules/ssh2/test/test-sftp.js +842 -0
  370. package/node_modules/ssh2/test/test-shell.js +109 -0
  371. package/node_modules/ssh2/test/test-userauth-agent-openssh.js +110 -0
  372. package/node_modules/ssh2/test/test-userauth-agent.js +171 -0
  373. package/node_modules/ssh2/test/test-userauth.js +611 -0
  374. package/node_modules/ssh2/test/test-worker-imports.js +25 -0
  375. package/node_modules/ssh2/test/test.js +20 -0
  376. package/node_modules/ssh2/util/build_pagent.bat +2 -0
  377. package/node_modules/ssh2/util/pagent.c +88 -0
  378. package/node_modules/ssh2/util/pagent.exe +0 -0
  379. package/node_modules/tweetnacl/.npmignore +4 -0
  380. package/node_modules/tweetnacl/AUTHORS.md +28 -0
  381. package/node_modules/tweetnacl/CHANGELOG.md +221 -0
  382. package/node_modules/tweetnacl/LICENSE +24 -0
  383. package/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md +20 -0
  384. package/node_modules/tweetnacl/README.md +459 -0
  385. package/node_modules/tweetnacl/nacl-fast.js +2388 -0
  386. package/node_modules/tweetnacl/nacl-fast.min.js +2 -0
  387. package/node_modules/tweetnacl/nacl.d.ts +98 -0
  388. package/node_modules/tweetnacl/nacl.js +1175 -0
  389. package/node_modules/tweetnacl/nacl.min.js +1 -0
  390. package/node_modules/tweetnacl/package.json +58 -0
  391. package/package.json +96 -89
@@ -0,0 +1,738 @@
1
+ 'use strict';
2
+
3
+ // TODO: take `compilerParams`, headers into account in cache for all cached
4
+ // results
5
+ // TODO: debug output
6
+
7
+ const { spawnSync } = require('child_process');
8
+ const { unlinkSync, writeFileSync } = require('fs');
9
+ const { tmpdir } = require('os');
10
+ const { win32: path } = require('path');
11
+ const { inspect } = require('util');
12
+
13
+ const isWindows = (process.platform === 'win32');
14
+ const findVS = require('./findvs.js');
15
+
16
+ const RE_HEADER_DECORATED = /^(?:"(.+)")|(?:<(.+)>)$/;
17
+
18
+ const genWinTmpFilenames = (() => {
19
+ let instance = 1;
20
+ return () => {
21
+ const base =
22
+ path.resolve(tmpdir(), `_buildcheck-${process.pid}-${instance++}`);
23
+ return {
24
+ input: `${base}.in.tmp`,
25
+ object: `${base}.out.obj`,
26
+ output: `${base}.out.tmp`,
27
+ };
28
+ };
29
+ })();
30
+
31
+ function getKind(prop) {
32
+ const spawnOpts = {
33
+ encoding: 'utf8',
34
+ stdio: 'pipe',
35
+ windowsHide: true,
36
+ };
37
+
38
+ const lang = (prop === '_cc' ? 'c' : 'c++');
39
+
40
+ if (isWindows) {
41
+ spawnOpts.stdio = [ 'ignore', 'pipe', 'pipe' ];
42
+ writeFileSync(this._tmpInFile, [
43
+ '_MSC_VER',
44
+ ].join(' '));
45
+ const result = spawnSync(
46
+ this[prop],
47
+ [ '-EP', `-T${lang === 'c' ? 'c' : 'p'}`, this._tmpInFile],
48
+ spawnOpts
49
+ );
50
+ unlinkSync(this._tmpInFile);
51
+
52
+ if (result.status === 0) {
53
+ const values = result.stdout.trim().split(' ');
54
+ if (values.length === 1 && /^\d+$/.test(values[0])) {
55
+ this[`${prop}Kind`] = 'msvc';
56
+ this[`${prop}Version`] = values[0];
57
+ this[`${prop}SpawnOpts`] = spawnOpts;
58
+ this._debug(
59
+ `>>> Detected MSVC ${values[0]} for ${lang.toUpperCase()} language`
60
+ );
61
+ return;
62
+ }
63
+ }
64
+ } else {
65
+ const result = spawnSync(
66
+ this[prop],
67
+ [ '-E', '-P', '-x', lang, '-' ],
68
+ {
69
+ ...spawnOpts,
70
+ input: [
71
+ '__clang__',
72
+ '__GNUC__',
73
+ '__GNUC_MINOR__',
74
+ '__GNUC_PATCHLEVEL__',
75
+ '__clang_major__',
76
+ '__clang_minor__',
77
+ '__clang_patchlevel__',
78
+ ].join(' '),
79
+ }
80
+ );
81
+
82
+ if (result.status === 0) {
83
+ const values = result.stdout.trim().split(' ');
84
+ if (values.length === 7) {
85
+ let kind;
86
+ let version;
87
+ if (values[0] === '1') {
88
+ kind = 'clang';
89
+ version = values.slice(4).map((v) => +v);
90
+ } else {
91
+ kind = 'gnu';
92
+ version = values.slice(1, 4).map((v) => +v);
93
+ }
94
+ let good = true;
95
+ for (const part of version) {
96
+ if (!isFinite(part) || part < 0) {
97
+ good = false;
98
+ break;
99
+ }
100
+ }
101
+ if (good) {
102
+ this[`${prop}Kind`] = kind;
103
+ this[`${prop}Version`] = version;
104
+ this[`${prop}SpawnOpts`] = spawnOpts;
105
+ const verStr = version.join('.');
106
+ this._debug(
107
+ `>>> Detected ${kind} ${verStr} for ${lang.toUpperCase()} language`
108
+ );
109
+ return;
110
+ }
111
+ }
112
+ }
113
+ }
114
+
115
+ throw new Error('Unable to detect compiler type');
116
+ }
117
+
118
+ class BuildEnvironment {
119
+ constructor(cfg) {
120
+ if (typeof cfg !== 'object' || cfg === null)
121
+ cfg = {};
122
+
123
+ this._debug = (typeof cfg.debug === 'function' ? cfg.debug : () => {});
124
+
125
+ let cc;
126
+ let cxx;
127
+ if (isWindows) {
128
+ const versions = findVS();
129
+ this._debug(
130
+ `>>> Detected MSVS installations: ${inspect(versions, false, 10)}`
131
+ );
132
+ if (versions.length === 0)
133
+ throw new Error('Unable to detect compiler type');
134
+ let selected_msvs;
135
+ if (cfg.msvs_version
136
+ && (typeof cfg.msvs_version === 'string'
137
+ || typeof cfg.msvs_version === 'number')) {
138
+ this._debug(`>>> Explicit MSVS requested: ${cfg.msvs_version}`);
139
+ // Try to select compiler by year
140
+ const msvs_version = cfg.msvs_version.toString();
141
+ for (const vs of versions) {
142
+ if (vs.year.toString() === msvs_version) {
143
+ selected_msvs = vs;
144
+ break;
145
+ }
146
+ }
147
+ if (selected_msvs === undefined)
148
+ throw new Error(`Unable to find MSVS with year '${msvs_version}'`);
149
+ } else {
150
+ selected_msvs = versions[0]; // Use newest
151
+ }
152
+ this._debug(`>>> Using MSVS: ${selected_msvs.year}`);
153
+ cc = selected_msvs.cl;
154
+ cxx = cc;
155
+ this._includePaths = selected_msvs.includePaths;
156
+ this._libPaths = selected_msvs.libPaths;
157
+ // Add (newest) SDK paths if we have them
158
+ for (const sdk of selected_msvs.sdks) {
159
+ this._debug(`>>> Using Windows SDK: ${sdk.fullVersion}`);
160
+ this._includePaths = this._includePaths.concat(sdk.includePaths);
161
+ this._libPaths = this._libPaths.concat(sdk.libPaths);
162
+ break;
163
+ }
164
+
165
+ const { input, object, output } = genWinTmpFilenames();
166
+ this._tmpInFile = input;
167
+ this._tmpObjFile = object;
168
+ this._tmpOutFile = output;
169
+ } else {
170
+ cc = ((typeof cfg.compilerC === 'string' && cfg.compilerC)
171
+ || process.env.CC
172
+ || 'cc');
173
+ cxx = ((typeof cfg.compilerCXX === 'string' && cfg.compilerCXX)
174
+ || process.env.CXX
175
+ || 'c++');
176
+ this._debug(`>>> Using C compiler: ${cc}`);
177
+ this._debug(`>>> Using C++ compiler: ${cxx}`);
178
+ }
179
+
180
+ this._cc = cc;
181
+ this._ccKind = undefined;
182
+ this._ccVersion = undefined;
183
+ this._ccSpawnOpts = undefined;
184
+
185
+ this._cxx = cxx;
186
+ this._cxxKind = undefined;
187
+ this._cxxVersion = undefined;
188
+ this._cxxSpawnOpts = undefined;
189
+
190
+ if (cfg.cache !== false) {
191
+ this._cache = new Map(Object.entries({
192
+ c: new Map(),
193
+ cxx: new Map(),
194
+ }));
195
+ } else {
196
+ this._cache = null;
197
+ }
198
+ }
199
+
200
+ checkDeclared(type, symbolName, opts) {
201
+ validateType(type);
202
+ if (typeof symbolName !== 'string' || !symbolName)
203
+ throw new Error(`Invalid symbol name: ${inspect(symbolName)}`);
204
+
205
+ const cached = getCachedValue(type, this._cache, 'declared', symbolName);
206
+ if (cached !== undefined) {
207
+ this._debug(
208
+ `>>> Checking if '${symbolName}' is declared... ${cached} (cached)`
209
+ );
210
+ return cached;
211
+ }
212
+
213
+ if (typeof opts !== 'object' || opts === null)
214
+ opts = {};
215
+
216
+ const { headers, searchLibs } = opts;
217
+ const headersList = renderHeaders(Array.isArray(headers)
218
+ ? headers
219
+ : getDefaultHeaders(this, type));
220
+
221
+ const declName = symbolName.replace(/ *\(.*/, '');
222
+ const declUse = symbolName.replace(/\(/, '((')
223
+ .replace(/\)/, ') 0)')
224
+ .replace(/,/g, ') 0, (');
225
+
226
+ const libs = [
227
+ '',
228
+ ...(Array.isArray(searchLibs) ? searchLibs : [])
229
+ ];
230
+
231
+ for (let lib of libs) {
232
+ if (typeof lib !== 'string')
233
+ continue;
234
+ lib = lib.trim();
235
+
236
+ const code = `
237
+ ${headersList}
238
+
239
+ int
240
+ main ()
241
+ {
242
+ #ifndef ${declName}
243
+ #ifdef __cplusplus
244
+ (void) ${declUse};
245
+ #else
246
+ (void) ${declName};
247
+ #endif
248
+ #endif
249
+
250
+ ;
251
+ return 0;
252
+ }`;
253
+ const compilerParams = (lib ? [`-l${lib}`] : []);
254
+ const result = this.tryCompile(type, code, compilerParams);
255
+
256
+ this._debug(
257
+ `>>> Checking if '${symbolName}' is declared `
258
+ + `(using ${lib ? `'${lib}'` : 'no'} library)... ${result === true}`
259
+ );
260
+
261
+ if (result !== true) {
262
+ this._debug('... check failed with compiler output:');
263
+ this._debug(result.output);
264
+ }
265
+
266
+ if (result === true) {
267
+ setCachedValue(
268
+ type,
269
+ this._cache,
270
+ 'declared',
271
+ symbolName,
272
+ (result === true)
273
+ );
274
+ return true;
275
+ }
276
+ }
277
+
278
+ return false;
279
+ }
280
+
281
+ checkFeature(name) {
282
+ const cached = getCachedValue('features', this._cache, null, name);
283
+ if (cached !== undefined) {
284
+ if (typeof cached === 'object'
285
+ && cached !== null
286
+ && typeof cached.val !== undefined) {
287
+ return cached.val;
288
+ }
289
+
290
+ return cached;
291
+ }
292
+
293
+ const feature = features.get(name);
294
+ if (feature === undefined)
295
+ throw new Error(`Invalid feature: ${name}`);
296
+
297
+ let result = feature(this);
298
+ if (result === undefined)
299
+ result = null;
300
+
301
+ setCachedValue('features', this._cache, null, name, result);
302
+
303
+ if (typeof result === 'object'
304
+ && result !== null
305
+ && typeof result.val !== undefined) {
306
+ return result.val;
307
+ }
308
+
309
+ return result;
310
+ }
311
+
312
+ checkFunction(type, funcName, opts) {
313
+ validateType(type);
314
+ if (typeof funcName !== 'string' || !funcName)
315
+ throw new Error(`Invalid function name: ${inspect(funcName)}`);
316
+
317
+ const cached = getCachedValue(type, this._cache, 'functions', funcName);
318
+ if (cached !== undefined) {
319
+ this._debug(
320
+ `>>> Checking if function '${funcName}' exists... true (cached)`
321
+ );
322
+ return true;
323
+ }
324
+
325
+ if (typeof opts !== 'object' || opts === null)
326
+ opts = {};
327
+
328
+ const { searchLibs } = opts;
329
+ const libs = [
330
+ '',
331
+ ...(Array.isArray(searchLibs) ? searchLibs : [])
332
+ ];
333
+
334
+ for (let lib of libs) {
335
+ if (typeof lib !== 'string')
336
+ continue;
337
+ lib = lib.trim();
338
+
339
+ const code = `
340
+ /* Define ${funcName} to an innocuous variant, in case <limits.h> declares
341
+ ${funcName}.
342
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
343
+ #define ${funcName} innocuous_${funcName}
344
+ /* System header to define __stub macros and hopefully few prototypes,
345
+ which can conflict with char ${funcName} (); below. */
346
+ #include <limits.h>
347
+ #undef ${funcName}
348
+ /* Override any GCC internal prototype to avoid an error.
349
+ Use char because int might match the return type of a GCC
350
+ builtin and then its argument prototype would still apply. */
351
+ #ifdef __cplusplus
352
+ extern "C"
353
+ #endif
354
+ char ${funcName} ();
355
+ /* The GNU C library defines this for functions which it implements
356
+ to always fail with ENOSYS. Some functions are actually named
357
+ something starting with __ and the normal name is an alias. */
358
+ #if defined __stub_${funcName} || defined __stub___${funcName}
359
+ choke me
360
+ #endif
361
+
362
+ int
363
+ main ()
364
+ {
365
+ return ${funcName} ();
366
+ ;
367
+ return 0;
368
+ }`;
369
+
370
+ const compilerParams = (lib ? [`-l${lib}`] : []);
371
+ const result = this.tryCompile(type, code, compilerParams);
372
+
373
+ this._debug(
374
+ `>>> Checking if function '${funcName}' exists `
375
+ + `(using ${lib ? `'${lib}'` : 'no'} library)... ${result === true}`
376
+ );
377
+ if (result !== true) {
378
+ this._debug('... check failed with compiler output:');
379
+ this._debug(result.output);
380
+ }
381
+
382
+ if (result === true) {
383
+ setCachedValue(
384
+ type,
385
+ this._cache,
386
+ 'functions',
387
+ funcName,
388
+ compilerParams
389
+ );
390
+ return true;
391
+ }
392
+ }
393
+
394
+ return false;
395
+ }
396
+
397
+ checkHeader(type, header) {
398
+ validateType(type);
399
+ const cached = getCachedValue(
400
+ type,
401
+ this._cache,
402
+ 'headers',
403
+ normalizeHeader(header)
404
+ );
405
+ if (cached !== undefined) {
406
+ this._debug(
407
+ `>>> Checking if header '${header}' exists... ${cached} (cached)`
408
+ );
409
+ return cached;
410
+ }
411
+
412
+ const headersList = renderHeaders([header]);
413
+
414
+ const code = `
415
+ ${headersList}
416
+
417
+ int
418
+ main ()
419
+ {
420
+ return 0;
421
+ }`;
422
+
423
+ const result = this.tryCompile(type, code);
424
+ setCachedValue(
425
+ type,
426
+ this._cache,
427
+ 'headers',
428
+ normalizeHeader(header),
429
+ (result === true)
430
+ );
431
+ this._debug(
432
+ `>>> Checking if header '${header}' exists... ${result === true}`
433
+ );
434
+ if (result !== true) {
435
+ this._debug('... check failed with compiler output:');
436
+ this._debug(result.output);
437
+ }
438
+ return (result === true);
439
+ }
440
+
441
+ defines(type, rendered) {
442
+ if (this._cache === null)
443
+ return [];
444
+
445
+ const defines = new Map();
446
+
447
+ let types;
448
+ if (!['c', 'c++'].includes(type))
449
+ types = ['c', 'c++'];
450
+ else
451
+ types = [type];
452
+
453
+ for (const t of types) {
454
+ const typeCache = this._cache.get(t);
455
+ if (!typeCache)
456
+ continue;
457
+
458
+ for (const [subtype, entries] of typeCache) {
459
+ for (let name of entries.keys()) {
460
+ if (subtype === 'headers')
461
+ name = name.replace(RE_HEADER_DECORATED, '$1$2');
462
+ defines.set(makeDefine(name, rendered), 1);
463
+ }
464
+ }
465
+ }
466
+
467
+ {
468
+ const featuresCache = this._cache.get('features');
469
+ if (featuresCache) {
470
+ for (const result of featuresCache.values()) {
471
+ if (typeof result === 'object'
472
+ && result !== null
473
+ && Array.isArray(result.defines)) {
474
+ for (const define of result.defines)
475
+ defines.set(makeDefine(define, rendered), 1);
476
+ }
477
+ }
478
+ }
479
+ }
480
+
481
+ return Array.from(defines.keys());
482
+ }
483
+
484
+ libs(type) {
485
+ if (this._cache === null)
486
+ return [];
487
+
488
+ const libs = new Map();
489
+
490
+ let types;
491
+ if (!['c', 'c++'].includes(type))
492
+ types = ['c', 'c++'];
493
+ else
494
+ types = [type];
495
+
496
+ for (const t of types) {
497
+ const typeCache = this._cache.get(t);
498
+ if (!typeCache)
499
+ continue;
500
+
501
+ const functionsCache = typeCache.get('functions');
502
+ if (!functionsCache)
503
+ continue;
504
+
505
+ for (const compilerParams of functionsCache.values()) {
506
+ for (const param of compilerParams)
507
+ libs.set(param, 1);
508
+ }
509
+ }
510
+
511
+ {
512
+ const featuresCache = this._cache.get('features');
513
+ if (featuresCache) {
514
+ for (const result of featuresCache.values()) {
515
+ if (typeof result === 'object'
516
+ && result !== null
517
+ && Array.isArray(result.libs)) {
518
+ for (const lib of result.libs)
519
+ libs.set(lib, 1);
520
+ }
521
+ }
522
+ }
523
+ }
524
+
525
+ return Array.from(libs.keys());
526
+ }
527
+
528
+ tryCompile(type, code, compilerParams) {
529
+ validateType(type);
530
+ if (typeof code !== 'string')
531
+ throw new TypeError('Invalid code argument');
532
+
533
+ type = (type === 'c' ? 'c' : 'c++');
534
+ const prop = (type === 'c' ? '_cc' : '_cxx');
535
+
536
+ if (this[`${prop}Kind`] === undefined)
537
+ getKind.call(this, prop);
538
+
539
+ if (!Array.isArray(compilerParams))
540
+ compilerParams = [];
541
+
542
+ let result;
543
+ if (this[`${prop}Kind`] === 'msvc') {
544
+ const cmpOpts = [`-Fo${this._tmpObjFile}`];
545
+ for (const includePath of this._includePaths)
546
+ cmpOpts.push('-I', includePath);
547
+ const lnkOpts = [];
548
+ for (const libPath of this._libPaths)
549
+ lnkOpts.push(`-LIBPATH:${libPath}`);
550
+ for (const opt of compilerParams) {
551
+ let m;
552
+ if (m = /^[-/]l(.+)$/.exec(opt))
553
+ lnkOpts.push(m[1]);
554
+ else
555
+ cmpOpts.push(opt);
556
+ }
557
+ try {
558
+ writeFileSync(this._tmpInFile, code);
559
+ const args = [
560
+ ...cmpOpts,
561
+ `-T${prop === '_cc' ? 'c' : 'p'}`,
562
+ this._tmpInFile,
563
+ '-link',
564
+ `-out:${this._tmpOutFile}`,
565
+ ...lnkOpts,
566
+ ];
567
+ result = spawnSync(
568
+ this[prop],
569
+ args,
570
+ this[`${prop}SpawnOpts`]
571
+ );
572
+ unlinkSync(this._tmpInFile);
573
+ // Overwrite stderr with stdout because MSVC seems to print
574
+ // errors to stdout instead for some reason
575
+ result.stderr = result.stdout;
576
+ } catch (ex) {
577
+ // We had trouble writing or deleting a temp file, fake
578
+ // the result
579
+ result = { status: Infinity, stderr: ex.stack };
580
+ }
581
+ try { unlinkSync(this._tmpObjFile); } catch {}
582
+ try { unlinkSync(this._tmpOutFile); } catch {}
583
+ } else {
584
+ result = spawnSync(
585
+ this[prop],
586
+ [
587
+ '-x', type,
588
+ '-o', '/dev/null',
589
+ '-',
590
+ ...compilerParams,
591
+ ],
592
+ {
593
+ ...this[`${prop}SpawnOpts`],
594
+ input: code,
595
+ }
596
+ );
597
+ }
598
+
599
+ if (result.status === 0)
600
+ return true;
601
+
602
+ const err = new Error('Compilation failed');
603
+ err.output = result.stderr;
604
+ return err;
605
+ }
606
+ }
607
+
608
+ function validateType(type) {
609
+ if (!['c', 'c++'].includes(type))
610
+ throw new Error('Invalid type argument');
611
+ }
612
+
613
+ function getCachedValue(type, cache, subtype, key) {
614
+ if (cache === null)
615
+ return;
616
+
617
+ const typeCache = cache.get(type);
618
+ if (!typeCache)
619
+ return;
620
+
621
+ const subtypeCache = (typeof subtype !== 'string'
622
+ ? typeCache
623
+ : typeCache.get(subtype));
624
+ if (!subtypeCache)
625
+ return;
626
+
627
+ return subtypeCache.get(key);
628
+ }
629
+
630
+ function setCachedValue(type, cache, subtype, key, value) {
631
+ if (cache === null)
632
+ return;
633
+
634
+ let typeCache = cache.get(type);
635
+ if (!typeCache)
636
+ cache.set(type, typeCache = new Map());
637
+
638
+ let subtypeCache = (typeof subtype !== 'string'
639
+ ? typeCache
640
+ : typeCache.get(subtype));
641
+ if (!subtypeCache)
642
+ typeCache.set(subtype, subtypeCache = new Map());
643
+
644
+ subtypeCache.set(key, value);
645
+ }
646
+
647
+ function renderHeaders(headers) {
648
+ let ret = '';
649
+
650
+ if (Array.isArray(headers)) {
651
+ for (const header of headers) {
652
+ if (typeof header !== 'string' || !header)
653
+ throw new Error(`Invalid header: ${inspect(header)}`);
654
+ ret += `#include ${normalizeHeader(header)}\n`;
655
+ }
656
+ }
657
+
658
+ return ret;
659
+ }
660
+
661
+ function normalizeHeader(header) {
662
+ if (!RE_HEADER_DECORATED.test(header))
663
+ header = `<${header}>`;
664
+ return header;
665
+ }
666
+
667
+ const DEFAULT_HEADERS_POSIX = [
668
+ 'stdio.h',
669
+ 'sys/types.h',
670
+ 'sys/stat.h',
671
+ 'stdlib.h',
672
+ 'stddef.h',
673
+ 'memory.h',
674
+ 'string.h',
675
+ 'strings.h',
676
+ 'inttypes.h',
677
+ 'stdint.h',
678
+ 'unistd.h'
679
+ ];
680
+ const DEFAULT_HEADERS_MSVC = [
681
+ 'windows.h',
682
+ ];
683
+ function getDefaultHeaders(be, type) {
684
+ const prop = (type === 'c' ? '_cc' : '_cxx');
685
+ if (be[`${prop}Kind`] === undefined)
686
+ getKind.call(be, prop);
687
+
688
+ let headers;
689
+ if (be[`${prop}Kind`] === 'msvc')
690
+ headers = DEFAULT_HEADERS_MSVC;
691
+ else
692
+ headers = DEFAULT_HEADERS_POSIX;
693
+
694
+ return headers.filter((hdr) => be.checkHeader(type, hdr));
695
+ }
696
+
697
+ const features = new Map(Object.entries({
698
+ 'strerror_r': (be) => {
699
+ const defines = [];
700
+ let returnsCharPtr = false;
701
+
702
+ const declared = be.checkDeclared('c', 'strerror_r');
703
+ if (declared) {
704
+ const code = `
705
+ ${renderHeaders(getDefaultHeaders(be, 'c'))}
706
+
707
+ int
708
+ main ()
709
+ {
710
+
711
+ char buf[100];
712
+ char x = *strerror_r (0, buf, sizeof buf);
713
+ char *p = strerror_r (0, buf, sizeof buf);
714
+ return !p || x;
715
+
716
+ ;
717
+ return 0;
718
+ }`;
719
+ returnsCharPtr = (be.tryCompile('c', code) === true);
720
+ if (returnsCharPtr)
721
+ defines.push('STRERROR_R_CHAR_P');
722
+ }
723
+
724
+ return {
725
+ defines,
726
+ val: { declared, returnsCharPtr }
727
+ };
728
+ },
729
+ }));
730
+
731
+ function makeDefine(name, rendered) {
732
+ name = name.replace(/[*]/g, 'P')
733
+ .replace(/[^_A-Za-z0-9]/g, '_')
734
+ .toUpperCase();
735
+ return (rendered ? `HAVE_${name}=1` : name);
736
+ }
737
+
738
+ module.exports = BuildEnvironment;