
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
/* Copyright (c) 2017, 2022, Oracle and/or its affiliates. */
/******************************************************************************
*
* You may not use the identified files except in compliance with the Apache
* License, Version 2.0 (the "License.")
*
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* NAME
* install.js
*
* DESCRIPTION
* This script is included in the npm bundle of node-oracledb. It
* is invoked by package.json during npm install.
*
* MAINTENANCE NOTES
* This file should only ever 'require' packages included in core Node.js.
*
*****************************************************************************/
'use strict';
const fs = require('fs');
const nodbUtil = require('../lib/util.js');
// Log standard output with an 'oracledb' prefix
function log(message) { // eslint-disable-line
const args = Array.from(arguments);
args.unshift('oracledb');
console.log.apply(console, args);
}
// Log errors. It combines 'oracledb' with a stylized 'ERR' prefix
function error(message) { // eslint-disable-line
const args = Array.from(arguments);
args.unshift('oracledb \x1b[31mERR!\x1b[0m');
console.error.apply(console, args);
}
// Print concluding messages and quit
function done(err) {
let installUrl = 'https://oracle.github.io/node-oracledb/INSTALL.html';
if (err) { // Couldn't install the binary
error(err.message);
if (err.message.match(/^NJS-067/)) {
error('Try compiling node-oracledb source code using ' + installUrl + '#github');
} else if (err.message.match(/^NJS-069/)) {
error('An older node-oracledb version may work with Node.js ' + process.version);
}
process.exit(87);
} else { // Successfully installed
let arch;
if (process.arch === 'x64') {
arch = '64-bit';
} else {
arch = '32-bit';
}
if (process.platform === 'linux') {
installUrl += '#linuxinstall';
} else if (process.platform === 'darwin') {
installUrl += '#instosx';
} else if (process.platform === 'win32') {
installUrl += '#windowsinstallation';
}
log('********************************************************************************');
log('** Node-oracledb ' + nodbUtil.PACKAGE_JSON_VERSION + ' installed in Node.js ' + process.versions.node + ' (' + process.platform + ', ' + process.arch + ')');
log('**');
log('** To use node-oracledb:');
log('** - Oracle Client libraries (' + arch + ') must be available.');
log('** - Follow the installation instructions:');
log('** ' + installUrl);
log('********************************************************************************\n');
}
}
// Check for a usable binary file for the node-oracledb module. Node.js 8.16
// and 10.16 (and 12.0) contain an important Node-API performance regression fix.
// Note that the checked versions are the minimum required for Node-API
// compatibility; as new Node.js versions are released, older Node.js versions
// are dropped from the node-oracledb test plan. For example, the obsolete
// Node.js 9 and 11 versions are not tested.
function checkAvailable(cb) {
let vs = process.version.substring(1).split(".").map(Number);
if (vs[0] < 8 || (vs[0] === 8 && vs[1] < 16)) {
cb(new Error(nodbUtil.getErrorMessage('NJS-069', nodbUtil.PACKAGE_JSON_VERSION, "8.16")));
} else if (vs[0] === 10 && vs[1] < 16) {
cb(new Error(nodbUtil.getErrorMessage('NJS-069', nodbUtil.PACKAGE_JSON_VERSION, "10.16")));
} else {
try {
fs.statSync(nodbUtil.RELEASE_DIR + '/' + nodbUtil.BINARY_FILE);
cb();
} catch (err) {
cb(new Error(nodbUtil.getErrorMessage('NJS-067', process.platform + ' ' + process.arch)));
}
}
}
checkAvailable(done);