link.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. var path = require('path');
  2. var rimraf = require('rimraf');
  3. var Q = require('q');
  4. var Project = require('../core/Project');
  5. var createLink = require('../util/createLink');
  6. var cli = require('../util/cli');
  7. var defaultConfig = require('../config');
  8. function link(logger, name, localName) {
  9. if (name) {
  10. return linkTo(logger, name, localName);
  11. } else {
  12. return linkSelf(logger);
  13. }
  14. }
  15. function linkSelf(logger, config) {
  16. var project;
  17. config = defaultConfig(config);
  18. project = new Project(config, logger);
  19. return project.getJson()
  20. .then(function (json) {
  21. var src = config.cwd;
  22. var dst = path.join(config.storage.links, json.name);
  23. // Delete previous link if any
  24. return Q.nfcall(rimraf, dst)
  25. // Link globally
  26. .then(function () {
  27. return createLink(src, dst);
  28. })
  29. .then(function () {
  30. return {
  31. src: src,
  32. dst: dst
  33. };
  34. });
  35. });
  36. }
  37. function linkTo(logger, name, localName, config) {
  38. var src;
  39. var dst;
  40. var project;
  41. config = defaultConfig(config);
  42. project = new Project(config, logger);
  43. localName = localName || name;
  44. src = path.join(config.storage.links, name);
  45. dst = path.join(process.cwd(), config.directory, localName);
  46. // Delete destination folder if any
  47. return Q.nfcall(rimraf, dst)
  48. // Link locally
  49. .then(function () {
  50. return createLink(src, dst);
  51. })
  52. // Install linked package deps
  53. .then(function () {
  54. return project.update([localName]);
  55. })
  56. .then(function (installed) {
  57. return {
  58. src: src,
  59. dst: dst,
  60. installed: installed
  61. };
  62. });
  63. }
  64. // -------------------
  65. link.line = function (logger, argv) {
  66. var options = cli.readOptions(argv);
  67. var name = options.argv.remain[1];
  68. var localName = options.argv.remain[2];
  69. return link(logger, name, localName);
  70. };
  71. link.completion = function () {
  72. // TODO:
  73. };
  74. module.exports = link;