binding.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. "use strict";
  2. // prettier-ignore
  3. /* eslint-disable */
  4. /* auto-generated by NAPI-RS */
  5. const { existsSync, readFileSync } = require('fs');
  6. const { join } = require('path');
  7. const { platform, arch } = process;
  8. let nativeBinding = null;
  9. let localFileExisted = false;
  10. let loadError = null;
  11. const isMusl = () => {
  12. let musl = false;
  13. if (process.platform === 'linux') {
  14. musl = isMuslFromFilesystem();
  15. if (musl === null) {
  16. musl = isMuslFromReport();
  17. }
  18. if (musl === null) {
  19. musl = isMuslFromChildProcess();
  20. }
  21. }
  22. return musl;
  23. };
  24. const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-');
  25. const isMuslFromFilesystem = () => {
  26. try {
  27. return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl');
  28. }
  29. catch (_a) {
  30. return null;
  31. }
  32. };
  33. const isMuslFromReport = () => {
  34. const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null;
  35. if (!report) {
  36. return null;
  37. }
  38. if (report.header && report.header.glibcVersionRuntime) {
  39. return false;
  40. }
  41. if (Array.isArray(report.sharedObjects)) {
  42. if (report.sharedObjects.some(isFileMusl)) {
  43. return true;
  44. }
  45. }
  46. return false;
  47. };
  48. const isMuslFromChildProcess = () => {
  49. try {
  50. return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl');
  51. }
  52. catch (e) {
  53. // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
  54. return false;
  55. }
  56. };
  57. switch (platform) {
  58. case 'android':
  59. switch (arch) {
  60. case 'arm64':
  61. localFileExisted = existsSync(join(__dirname, 'swc.android-arm64.node'));
  62. try {
  63. if (localFileExisted) {
  64. nativeBinding = require('./swc.android-arm64.node');
  65. }
  66. else {
  67. nativeBinding = require('@swc/core-android-arm64');
  68. }
  69. }
  70. catch (e) {
  71. loadError = e;
  72. }
  73. break;
  74. case 'arm':
  75. localFileExisted = existsSync(join(__dirname, 'swc.android-arm-eabi.node'));
  76. try {
  77. if (localFileExisted) {
  78. nativeBinding = require('./swc.android-arm-eabi.node');
  79. }
  80. else {
  81. nativeBinding = require('@swc/core-android-arm-eabi');
  82. }
  83. }
  84. catch (e) {
  85. loadError = e;
  86. }
  87. break;
  88. default:
  89. throw new Error(`Unsupported architecture on Android ${arch}`);
  90. }
  91. break;
  92. case 'win32':
  93. switch (arch) {
  94. case 'x64':
  95. localFileExisted = existsSync(join(__dirname, 'swc.win32-x64-msvc.node'));
  96. try {
  97. if (localFileExisted) {
  98. nativeBinding = require('./swc.win32-x64-msvc.node');
  99. }
  100. else {
  101. nativeBinding = require('@swc/core-win32-x64-msvc');
  102. }
  103. }
  104. catch (e) {
  105. loadError = e;
  106. }
  107. break;
  108. case 'ia32':
  109. localFileExisted = existsSync(join(__dirname, 'swc.win32-ia32-msvc.node'));
  110. try {
  111. if (localFileExisted) {
  112. nativeBinding = require('./swc.win32-ia32-msvc.node');
  113. }
  114. else {
  115. nativeBinding = require('@swc/core-win32-ia32-msvc');
  116. }
  117. }
  118. catch (e) {
  119. loadError = e;
  120. }
  121. break;
  122. case 'arm64':
  123. localFileExisted = existsSync(join(__dirname, 'swc.win32-arm64-msvc.node'));
  124. try {
  125. if (localFileExisted) {
  126. nativeBinding = require('./swc.win32-arm64-msvc.node');
  127. }
  128. else {
  129. nativeBinding = require('@swc/core-win32-arm64-msvc');
  130. }
  131. }
  132. catch (e) {
  133. loadError = e;
  134. }
  135. break;
  136. default:
  137. throw new Error(`Unsupported architecture on Windows: ${arch}`);
  138. }
  139. break;
  140. case 'darwin':
  141. localFileExisted = existsSync(join(__dirname, 'swc.darwin-universal.node'));
  142. try {
  143. if (localFileExisted) {
  144. nativeBinding = require('./swc.darwin-universal.node');
  145. }
  146. else {
  147. nativeBinding = require('@swc/core-darwin-universal');
  148. }
  149. break;
  150. }
  151. catch (_a) { }
  152. switch (arch) {
  153. case 'x64':
  154. localFileExisted = existsSync(join(__dirname, 'swc.darwin-x64.node'));
  155. try {
  156. if (localFileExisted) {
  157. nativeBinding = require('./swc.darwin-x64.node');
  158. }
  159. else {
  160. nativeBinding = require('@swc/core-darwin-x64');
  161. }
  162. }
  163. catch (e) {
  164. loadError = e;
  165. }
  166. break;
  167. case 'arm64':
  168. localFileExisted = existsSync(join(__dirname, 'swc.darwin-arm64.node'));
  169. try {
  170. if (localFileExisted) {
  171. nativeBinding = require('./swc.darwin-arm64.node');
  172. }
  173. else {
  174. nativeBinding = require('@swc/core-darwin-arm64');
  175. }
  176. }
  177. catch (e) {
  178. loadError = e;
  179. }
  180. break;
  181. default:
  182. throw new Error(`Unsupported architecture on macOS: ${arch}`);
  183. }
  184. break;
  185. case 'freebsd':
  186. if (arch !== 'x64') {
  187. throw new Error(`Unsupported architecture on FreeBSD: ${arch}`);
  188. }
  189. localFileExisted = existsSync(join(__dirname, 'swc.freebsd-x64.node'));
  190. try {
  191. if (localFileExisted) {
  192. nativeBinding = require('./swc.freebsd-x64.node');
  193. }
  194. else {
  195. nativeBinding = require('@swc/core-freebsd-x64');
  196. }
  197. }
  198. catch (e) {
  199. loadError = e;
  200. }
  201. break;
  202. case 'linux':
  203. switch (arch) {
  204. case 'x64':
  205. if (isMusl()) {
  206. localFileExisted = existsSync(join(__dirname, 'swc.linux-x64-musl.node'));
  207. try {
  208. if (localFileExisted) {
  209. nativeBinding = require('./swc.linux-x64-musl.node');
  210. }
  211. else {
  212. nativeBinding = require('@swc/core-linux-x64-musl');
  213. }
  214. }
  215. catch (e) {
  216. loadError = e;
  217. }
  218. }
  219. else {
  220. localFileExisted = existsSync(join(__dirname, 'swc.linux-x64-gnu.node'));
  221. try {
  222. if (localFileExisted) {
  223. nativeBinding = require('./swc.linux-x64-gnu.node');
  224. }
  225. else {
  226. nativeBinding = require('@swc/core-linux-x64-gnu');
  227. }
  228. }
  229. catch (e) {
  230. loadError = e;
  231. }
  232. }
  233. break;
  234. case 'arm64':
  235. if (isMusl()) {
  236. localFileExisted = existsSync(join(__dirname, 'swc.linux-arm64-musl.node'));
  237. try {
  238. if (localFileExisted) {
  239. nativeBinding = require('./swc.linux-arm64-musl.node');
  240. }
  241. else {
  242. nativeBinding = require('@swc/core-linux-arm64-musl');
  243. }
  244. }
  245. catch (e) {
  246. loadError = e;
  247. }
  248. }
  249. else {
  250. localFileExisted = existsSync(join(__dirname, 'swc.linux-arm64-gnu.node'));
  251. try {
  252. if (localFileExisted) {
  253. nativeBinding = require('./swc.linux-arm64-gnu.node');
  254. }
  255. else {
  256. nativeBinding = require('@swc/core-linux-arm64-gnu');
  257. }
  258. }
  259. catch (e) {
  260. loadError = e;
  261. }
  262. }
  263. break;
  264. case 'arm':
  265. localFileExisted = existsSync(join(__dirname, 'swc.linux-arm-gnueabihf.node'));
  266. try {
  267. if (localFileExisted) {
  268. nativeBinding = require('./swc.linux-arm-gnueabihf.node');
  269. }
  270. else {
  271. nativeBinding = require('@swc/core-linux-arm-gnueabihf');
  272. }
  273. }
  274. catch (e) {
  275. loadError = e;
  276. }
  277. break;
  278. case 'riscv64':
  279. if (isMusl()) {
  280. localFileExisted = existsSync(join(__dirname, 'swc.linux-riscv64-musl.node'));
  281. try {
  282. if (localFileExisted) {
  283. nativeBinding = require('./swc.linux-riscv64-musl.node');
  284. }
  285. else {
  286. nativeBinding = require('@swc/core-linux-riscv64-musl');
  287. }
  288. }
  289. catch (e) {
  290. loadError = e;
  291. }
  292. }
  293. else {
  294. localFileExisted = existsSync(join(__dirname, 'swc.linux-riscv64-gnu.node'));
  295. try {
  296. if (localFileExisted) {
  297. nativeBinding = require('./swc.linux-riscv64-gnu.node');
  298. }
  299. else {
  300. nativeBinding = require('@swc/core-linux-riscv64-gnu');
  301. }
  302. }
  303. catch (e) {
  304. loadError = e;
  305. }
  306. }
  307. break;
  308. default:
  309. throw new Error(`Unsupported architecture on Linux: ${arch}`);
  310. }
  311. break;
  312. default:
  313. throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`);
  314. }
  315. if (!nativeBinding) {
  316. if (loadError) {
  317. throw loadError;
  318. }
  319. throw new Error(`Failed to load native binding`);
  320. }
  321. module.exports.Compiler = nativeBinding.Compiler;
  322. module.exports.JsCompiler = nativeBinding.JsCompiler;
  323. module.exports.bundle = nativeBinding.bundle;
  324. module.exports.getTargetTriple = nativeBinding.getTargetTriple;
  325. module.exports.initCustomTraceSubscriber = nativeBinding.initCustomTraceSubscriber;
  326. module.exports.minify = nativeBinding.minify;
  327. module.exports.minifySync = nativeBinding.minifySync;
  328. module.exports.parse = nativeBinding.parse;
  329. module.exports.parseFile = nativeBinding.parseFile;
  330. module.exports.parseFileSync = nativeBinding.parseFileSync;
  331. module.exports.parseSync = nativeBinding.parseSync;
  332. module.exports.print = nativeBinding.print;
  333. module.exports.printSync = nativeBinding.printSync;
  334. module.exports.transform = nativeBinding.transform;
  335. module.exports.transformFile = nativeBinding.transformFile;
  336. module.exports.transformFileSync = nativeBinding.transformFileSync;
  337. module.exports.transformSync = nativeBinding.transformSync;