From a51df39aeb834e1c3d96760c2eb25cacc59f3071 Mon Sep 17 00:00:00 2001 From: fan xia Date: Mon, 16 Oct 2023 23:13:49 +0800 Subject: [PATCH] 0.0.10 --- addon/afterBuild.js | 199 ++++++++++++++++++++++++++++++++++++++++++++ addon/index.js | 6 -- addon/package.json | 2 +- 3 files changed, 200 insertions(+), 7 deletions(-) create mode 100644 addon/afterBuild.js diff --git a/addon/afterBuild.js b/addon/afterBuild.js new file mode 100644 index 0000000..f6ec3c3 --- /dev/null +++ b/addon/afterBuild.js @@ -0,0 +1,199 @@ +const { readFileSync, writeFileSync } = require("fs"); +const path = require("path"); +const ijs_path = path.join(__dirname, "index.js") +const pkg = require(path.join(__dirname, "package.json")) +const ijs = readFileSync(ijs_path, "utf-8") +const pkg_name = pkg.name +const mijs = `const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let loadError = null + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + const lddPath = require('child_process').execSync('which ldd').toString().trim() + return readFileSync(lddPath, 'utf8').includes('musl') + } catch (e) { + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.win32-x64-msvc.node') + } else { + nativeBinding = require('${pkg_name}-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.win32-ia32-msvc.node') + } else { + nativeBinding = require('${pkg_name}-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.win32-arm64-msvc.node') + } else { + nativeBinding = require('${pkg_name}-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on Windows: \${arch}\`) + } + break + case 'darwin': + localFileExisted = existsSync(join(__dirname, '${pkg_name}.darwin-universal.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.darwin-universal.node') + } else { + nativeBinding = require('${pkg_name}-darwin-universal') + } + break + } catch { } + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, '${pkg_name}.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.darwin-x64.node') + } else { + nativeBinding = require('${pkg_name}-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.darwin-arm64.node') + } else { + nativeBinding = require('${pkg_name}-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(\`Unsupported architecture on macOS: \${arch}\`) + } + break + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.linux-x64-musl.node') + } else { + nativeBinding = require('${pkg_name}-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.linux-x64-gnu.node') + } else { + nativeBinding = require('${pkg_name}-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.linux-arm64-musl.node') + } else { + nativeBinding = require('${pkg_name}-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '${pkg_name}.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./${pkg_name}.linux-arm64-gnu.node') + } else { + nativeBinding = require('${pkg_name}-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + default: + throw new Error(\`Unsupported architecture on Linux: \${arch}\`) + } + break + default: + throw new Error(\`Unsupported OS: \${platform}, architecture: \${arch}\`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(\`Failed to load native binding\`) +} +` + +const nijs = mijs + ijs.split(`throw new Error(\`Failed to load native binding\`)\n}\n`).pop() + +writeFileSync(ijs_path, nijs) \ No newline at end of file diff --git a/addon/index.js b/addon/index.js index 7f826f5..c0257a8 100644 --- a/addon/index.js +++ b/addon/index.js @@ -1,9 +1,3 @@ -/* tslint:disable */ -/* eslint-disable */ -/* prettier-ignore */ - -/* auto-generated by NAPI-RS */ - const { existsSync, readFileSync } = require('fs') const { join } = require('path') diff --git a/addon/package.json b/addon/package.json index 705a693..8a57636 100644 --- a/addon/package.json +++ b/addon/package.json @@ -22,7 +22,7 @@ }, "scripts": { "artifacts": "napi artifacts", - "build": "napi build --platform --release", + "build": "napi build --platform --release && node afterBuild.js", "build:debug": "napi build --platform", "prepublishOnly": "node ./prepub.js && napi prepublish -t npm", "universal": "napi universal",