Skip to content

Commit

Permalink
Ability to install more than one package
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Bjelkholm committed Mar 14, 2016
1 parent aded1f8 commit 4f142c8
Showing 1 changed file with 30 additions and 18 deletions.
48 changes: 30 additions & 18 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,64 @@ var colors = require('colors')

const TRYMODULE_PATH = path.resolve((process.env.HOME || process.env.USERPROFILE), '.trymodule')

var package_name = process.argv[2]
if (package_name === undefined) {
if (process.argv[2] === undefined) {
throw new Error('You need to provide package name as first argument')
}

console.log(`Gonna start a REPL with '${package_name}' installed and loaded for you`)
const logGreen = (msg) => console.log(colors.green(msg))

const packageLocation = (pkg) => {
return path.resolve(TRYMODULE_PATH, 'node_modules', pkg)
}
const takePackageArguments = (args) => args.splice(2)

const packageLocation = (pkg) => path.resolve(TRYMODULE_PATH, 'node_modules', pkg)

const loadPackage = (pkg) => {
return new Promise((resolve, reject) => {
try {
const loadedPackage = require(packageLocation(pkg))
console.log(`'${pkg}' was already installed since before! Jumping to REPL now`)
resolve(loadedPackage)
console.log(colors.blue(`'${pkg}' was already installed since before!`))
resolve({name: pkg, package: loadedPackage})
} catch (err) {
console.log(`Couldn't find '${pkg}', gonna download it now`)
npmi({name: pkg, path: TRYMODULE_PATH}, function (err, result) {
console.log(colors.yellow(`Couldn't find '${pkg}' locally, gonna download it now`))
npmi({name: pkg, path: TRYMODULE_PATH}, (err, result) => {
if (err) {
console.log(err.message)
console.log(colors.red(err.message))
if (err.statusCode === 404) {
throw new Error(`Could not find package ${pkg}`)
}
if (err.code === npmi.LOAD_ERR) {
throw new Error('npm load error')
}
if (err.code === npmi.INSTALL_ERR) {
throw new Error('npm install error')
}
}
resolve(require(packageLocation(pkg)))
const loadedPackage = require(packageLocation(pkg))
resolve({name: pkg, package: loadedPackage})
})
}
})
}

const logGreen = (msg) => {
console.log(colors.green(msg))
const addPackageToObject = (obj, pkg) => {
const variable_friendly_package_name = pkg.name.replace('-', '_').replace('.', '_')
logGreen(`Package '${pkg.name}' was loaded and assigned to '${variable_friendly_package_name}' in the current scope`)
obj[variable_friendly_package_name] = pkg.package
return obj
}

loadPackage(package_name).then((loadedPackage) => {
const variable_friendly_package_name = package_name.replace('-', '_').replace('.', '_')
logGreen('Gonna start a REPL with packages installed and loaded for you')

const packages_to_install = takePackageArguments(process.argv)

logGreen(`Package '${package_name}' was loaded and assigned to '${variable_friendly_package_name}' in the current scope`)
const promises_for_installation = packages_to_install.map((package_name) => loadPackage(package_name))

Promise.all(promises_for_installation).then((packages) => {
const context_packages = packages.reduce((context, pkg) => {
return addPackageToObject(context, pkg)
}, {})
console.log('REPL started...')
var replServer = repl.start({
prompt: '> '
})
replServer.context[variable_friendly_package_name] = loadedPackage
replServer.context = Object.assign(replServer.context, context_packages)
})

0 comments on commit 4f142c8

Please sign in to comment.