UNPKG

better-sqlite3

Version:

The fastest and simplest library for SQLite in Node.js.

63 lines (52 loc) 2.12 kB
'use strict'; const fs = require('fs'); const path = require('path'); const PREBUILD_PLATFORMS = ['linux', 'darwin', 'win32']; const PREBUILD_ARCHS = ['x64', 'arm64']; let DEFAULT_ADDON; function getBinding(nativeBinding) { // If a path was provided, load the binding from the filesystem. if (typeof nativeBinding === 'string') { // See <https://webpack.js.org/api/module-variables/#__non_webpack_require__-webpack-specific> const requireFunc = typeof __non_webpack_require__ === 'function' ? __non_webpack_require__ : require; return requireFunc(path.resolve(nativeBinding).replace(/(\.node)?$/, '.node')); } // If an object was provided, use it as the binding directly. if (typeof nativeBinding === 'object' && nativeBinding !== null) { return nativeBinding; } // If we're using the default binding and it already exists, just return it. if (DEFAULT_ADDON) { return DEFAULT_ADDON; } // Otherwise, try to find the binding as a prebuilt binary. let filename = getPrebuildPath(); if (filename) { return DEFAULT_ADDON = require(filename); } // If no prebuilt binary was found, try the default node-gyp locations. filename = path.join(__dirname, '..', 'build', 'Debug', 'better_sqlite3.node'); if (!fs.existsSync(filename)) { filename = path.join(__dirname, '..', 'build', 'Release', 'better_sqlite3.node'); } return DEFAULT_ADDON = require(filename); } function getPrebuildPath() { if (PREBUILD_PLATFORMS.includes(process.platform) && PREBUILD_ARCHS.includes(process.arch)) { const target = `${isLinuxMusl() ? 'linuxmusl' : process.platform}-${process.arch}`; const filename = path.join(__dirname, '..', 'prebuilds', `${target}.node`); if (fs.existsSync(filename)) { return filename; } } return null; } function isLinuxMusl() { return process.platform === 'linux' && !process.report.getReport().header.glibcVersionRuntime; } exports.getBinding = getBinding; exports.getPrebuildPath = getPrebuildPath; // This script is executed directly by binding.gyp to detect prebuilt binaries. if (require.main === module) { process.stdout.write(getPrebuildPath() ? '1' : '0'); }