#!/usr/bin/env node var program = require('commander'); program .usage('[../path/to/folder]') .option('-t, --tag ', 'link as a specific version/tag/commit/branch') .option('-r, --repository ', 'link as a specific repository') .option('--debug', 'turn on debug statements'); program.on('--help', function() { console.log(' Example: '); console.log(); console.log(' $ component link ../delegate'); console.log(); process.exit(); }); program.parse(process.argv); if (program.debug) require('debug').enable('component-consoler*'); var fs = require('fs'); var path = require('path'); var mkdirp = require('mkdirp'); var rimraf = require('rimraf'); var utils = require('component-consoler'); if (program.args.length !== 1) utils.fatal('requires exactly one local path.'); var from = path.resolve(program.args[0]); var component = path.join(from, 'component.json'); if (!fs.existsSync(component)) utils.fatal(component + ' does not exist!'); if (path.relative(process.cwd(), from).slice(0, 2) !== '..') { utils.fatal('can not link a component inside the app context.'); } var json = require(component); var repository = program.repository || json.repository || json.repo; if (!repository) utils.fatal(component + ' does not have a repository!'); if (!~repository.indexOf('/')) utils.fatal(component + ' invalid repository. Repositories are of the form /.'); var version = program.tag || json.version; if (!version) utils.fatal(component + ' does not have a version!'); var to = path.join(process.cwd(), 'components', repository, version); rimraf.sync(to); mkdirp.sync(path.dirname(to)); fs.symlinkSync(from, to, 'junction');