Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'node-abi' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
if (!existsSync("./bin/index.node")) writeFileSync("./bin/index.node", "");
// Download binaries from Packem's GitHub release page.
const https = require("https");
const url = require("url");
const { sep: pathSeperator } = require("path");
const { getAbi } = require("node-abi");
const Octokit = require("@octokit/rest");
const { x: extractTarGz } = require("tar");
const AUTH_TOKEN = process.env.NODE_PRE_GYP_GITHUB_TOKEN;
const PREBUILT_REPO_OWNER = process.env.PREBUILT_REPO_OWNER || "packem";
const PREBUILT_REPO_NAME = process.env.PREBUILT_REPO_NAME || "packem";
const PREBUILT_REPO_URL = `https://github.com/${PREBUILT_REPO_OWNER}/${PREBUILT_REPO_NAME}`;
const CWD = process.cwd();
const NODE_ABI = getAbi(process.version.replace(/^v/, ""), "node");
const PLATFORM = process.platform;
const ARCH = process.arch;
const octokit = new Octokit({ auth: AUTH_TOKEN });
octokit.repos
.getLatestRelease({
owner: PREBUILT_REPO_OWNER,
repo: PREBUILT_REPO_NAME
})
.then(({ data: { tag_name: VERSION }, status, headers }) => {
// Handle data.
const TARBALL_URL = `${PREBUILT_REPO_URL}/releases/download/${VERSION}/node-v${NODE_ABI}-${PLATFORM}-${ARCH}.tar.gz`;
https.get(TARBALL_URL, response => {
if (
function resolveTargets (targets, all, napi) {
targets = targets.map(function (v) {
if (typeof v === 'object' && v !== null) return v
if (v.indexOf('@') === -1) v = 'node@' + v
return {
runtime: v.split('@')[0],
target: v.split('@')[1].replace(/^v/, '')
}
})
// TODO: also support --lts and get versions from travis
if (all) {
targets = abi.supportedTargets.slice(0)
}
// Should be the default once napi is stable
if (napi && targets.length === 0) {
targets = [
abi.supportedTargets.filter(onlyNode).pop(),
abi.supportedTargets.filter(onlyElectron).pop()
]
if (targets[0].target === '9.0.0') targets[0].target = '9.6.1'
}
return targets
}
return {
runtime: v.split('@')[0],
target: v.split('@')[1].replace(/^v/, '')
}
})
// TODO: also support --lts and get versions from travis
if (all) {
targets = abi.supportedTargets.slice(0)
}
// Should be the default once napi is stable
if (napi && targets.length === 0) {
targets = [
abi.supportedTargets.filter(onlyNode).pop(),
abi.supportedTargets.filter(onlyElectron).pop()
]
if (targets[0].target === '9.0.0') targets[0].target = '9.6.1'
}
return targets
}
var pkg = opts.pkg
var buildLog = opts.buildLog || function () {}
opts.target = target
opts.runtime = runtime
if (opts.runtime === 'node-webkit') {
opts.backend = 'nw-gyp'
}
var buildLogMessage = 'Preparing to prebuild ' + pkg.name + '@' + pkg.version + ' for ' + runtime + ' ' + target + ' on ' + opts.platform + '-' + opts.arch + ' using ' + opts.backend
if (opts.libc && opts.libc.length > 0) buildLogMessage += 'using libc ' + opts.libc
buildLog(buildLogMessage)
// --target can be target or abi
if (!napi.isNapiRuntime(runtime)) target = getTarget(target, runtime)
var abi = getAbi(target, runtime)
var tarPath = getTarPath(opts, abi)
fs.stat(tarPath, function (err, st) {
if (!err && !opts.force) {
buildLog(tarPath + ' exists, skipping build')
return callback(null, tarPath)
}
var tasks = [
function (cb) {
build(opts, target, function (err, filenames) {
if (err) return cb(err)
cb(null, filenames)
})
},
function (filenames, cb) {
buildLog('Packing ' + filenames.join(', ') + ' into ' + tarPath)
function prebuild (opts, target, runtime, callback) {
var pkg = opts.pkg
var buildLog = opts.buildLog || function () {}
opts.target = target
opts.runtime = runtime
if (opts.runtime === 'node-webkit') {
opts.backend = 'nw-gyp'
}
var buildLogMessage = 'Preparing to prebuild ' + pkg.name + '@' + pkg.version + ' for ' + runtime + ' ' + target + ' on ' + opts.platform + '-' + opts.arch + ' using ' + opts.backend
if (opts.libc && opts.libc.length > 0) buildLogMessage += 'using libc ' + opts.libc
buildLog(buildLogMessage)
// --target can be target or abi
if (!napi.isNapiRuntime(runtime)) target = getTarget(target, runtime)
var abi = getAbi(target, runtime)
var tarPath = getTarPath(opts, abi)
fs.stat(tarPath, function (err, st) {
if (!err && !opts.force) {
buildLog(tarPath + ' exists, skipping build')
return callback(null, tarPath)
}
var tasks = [
function (cb) {
build(opts, target, function (err, filenames) {
if (err) return cb(err)
cb(null, filenames)
})
},
function (filenames, cb) {
versions.forEach((version) => {
let abi = nodeAbi.getAbi(version);
let addonPath = `${addonDir}/stackimpact-addon-v${abi}.node`;
if (!fs.existsSync(addonPath)) {
cp.execSync(`node node_modules/node-gyp/bin/node-gyp.js rebuild --target=${version}`, {stdio: [0,1,2]});
fs.copyFileSync('build/Release/stackimpact-addon.node', addonPath);
}
else {
console.log(`Addon with ABI ${abi} exists, skipping.`);
}
abiMap[version] = abi;
});
#!/usr/bin/env node
const spawn = require('cross-spawn')
const npmRunPath = require('npm-run-path-compat')
const log = require('npmlog')
const versionChanged = require('version-changed')
const version = require('./package').version
const runSeries = require('run-series')
const supportedTargets = require('node-abi').supportedTargets
const buildTargets = require('./build-targets')
const path = require('path')
const pkg = require(path.resolve('package.json'))
if (!process.env.CI) process.exit()
log.heading = 'prebuild-ci'
log.level = 'verbose'
const token = process.env.PREBUILD_TOKEN
if (!token) {
log.error('PREBUILD_TOKEN required')
process.exit(0)
}
function prebuild (runtime, target, cb) {
config.target_defaults.msvs_settings = {
VCCLCompilerTool: {
AdditionalOptions: [
'/arch:AVX2',
],
},
};
} else {
config.target_defaults.defines.push('KRYPTON_DISABLE_NEON');
}
fs.writeFileSync('config.gypi', JSON.stringify(config, undefined, 2));
for (const target of targets) {
const id = abi.getAbi(target, 'node');
execSync(`${path.resolve('node_modules', '.bin', 'node-gyp')} rebuild --target=v${target} --arch=${arch}`, {
stdio: 'inherit',
env: {
...process.env,
...env[arch],
},
});
fs.copyFileSync(path.resolve('build', 'Release', 'krypton.node'), path.resolve('builds', `${process.platform}-${arch}-${id}.node`));
}
}
}
function prebuildName (target, opts) {
var tags = [target.runtime]
if (opts.napi) {
tags.push('napi')
} else {
tags.push('abi' + abi.getAbi(target.target, target.runtime))
}
if (opts.tagUv) {
var uv = opts.tagUv === true ? opts.uv : opts.tagUv
if (uv) tags.push('uv' + uv)
}
if (opts.tagArmv) {
var armv = opts.tagArmv === true ? opts.armv : opts.tagArmv
if (armv) tags.push('armv' + armv)
}
if (opts.tagLibc) {
var libc = opts.tagLibc === true ? opts.libc : opts.tagLibc
if (libc) tags.push(libc)
}