StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.8 KiB
107 lines
2.8 KiB
'use strict'
|
|
|
|
const fs = require('fs')
|
|
const figgyPudding = require('figgy-pudding')
|
|
const findUp = require('find-up')
|
|
const ini = require('ini')
|
|
const os = require('os')
|
|
const path = require('path')
|
|
|
|
const NpmConfig = figgyPudding({}, {
|
|
// Open up the pudding object.
|
|
other () { return true }
|
|
})
|
|
|
|
const ConfigOpts = figgyPudding({
|
|
cache: { default: path.join(os.homedir(), '.npm') },
|
|
configNames: { default: ['npmrc', '.npmrc'] },
|
|
envPrefix: { default: /^npm_config_/i },
|
|
cwd: { default: () => process.cwd() },
|
|
globalconfig: {
|
|
default: () => path.join(getGlobalPrefix(), 'etc', 'npmrc')
|
|
},
|
|
userconfig: { default: path.join(os.homedir(), '.npmrc') }
|
|
})
|
|
|
|
module.exports.read = getNpmConfig
|
|
function getNpmConfig (_opts, _builtin) {
|
|
const builtin = ConfigOpts(_builtin)
|
|
const env = {}
|
|
for (let key of Object.keys(process.env)) {
|
|
if (!key.match(builtin.envPrefix)) continue
|
|
const newKey = key.toLowerCase()
|
|
.replace(builtin.envPrefix, '')
|
|
.replace(/(?!^)_/g, '-')
|
|
env[newKey] = process.env[key]
|
|
}
|
|
const cli = NpmConfig(_opts)
|
|
const userConfPath = (
|
|
builtin.userconfig ||
|
|
cli.userconfig ||
|
|
env.userconfig
|
|
)
|
|
const user = userConfPath && maybeReadIni(userConfPath)
|
|
const globalConfPath = (
|
|
builtin.globalconfig ||
|
|
cli.globalconfig ||
|
|
env.globalconfig
|
|
)
|
|
const global = globalConfPath && maybeReadIni(globalConfPath)
|
|
const projConfPath = findUp.sync(builtin.configNames, { cwd: builtin.cwd })
|
|
let proj = {}
|
|
if (projConfPath && projConfPath !== userConfPath) {
|
|
proj = maybeReadIni(projConfPath)
|
|
}
|
|
const newOpts = NpmConfig(builtin, global, user, proj, env, cli)
|
|
if (newOpts.cache) {
|
|
return newOpts.concat({
|
|
cache: path.resolve(
|
|
(
|
|
(cli.cache || env.cache)
|
|
? builtin.cwd
|
|
: proj.cache
|
|
? path.dirname(projConfPath)
|
|
: user.cache
|
|
? path.dirname(userConfPath)
|
|
: global.cache
|
|
? path.dirname(globalConfPath)
|
|
: path.dirname(userConfPath)
|
|
),
|
|
newOpts.cache
|
|
)
|
|
})
|
|
} else {
|
|
return newOpts
|
|
}
|
|
}
|
|
|
|
function maybeReadIni (f) {
|
|
let txt
|
|
try {
|
|
txt = fs.readFileSync(f, 'utf8')
|
|
} catch (err) {
|
|
if (err.code === 'ENOENT') {
|
|
return ''
|
|
} else {
|
|
throw err
|
|
}
|
|
}
|
|
return ini.parse(txt)
|
|
}
|
|
|
|
function getGlobalPrefix () {
|
|
if (process.env.PREFIX) {
|
|
return process.env.PREFIX
|
|
} else if (process.platform === 'win32') {
|
|
// c:\node\node.exe --> prefix=c:\node\
|
|
return path.dirname(process.execPath)
|
|
} else {
|
|
// /usr/local/bin/node --> prefix=/usr/local
|
|
let pref = path.dirname(path.dirname(process.execPath))
|
|
// destdir only is respected on Unix
|
|
if (process.env.DESTDIR) {
|
|
pref = path.join(process.env.DESTDIR, pref)
|
|
}
|
|
return pref
|
|
}
|
|
}
|
|
|