mirror of
https://github.com/bower/bower.git
synced 2026-01-20 03:38:07 -05:00
96 lines
3.0 KiB
JavaScript
96 lines
3.0 KiB
JavaScript
// ==========================================
|
|
// BOWER: save
|
|
// ==========================================
|
|
// Copyright 2012 Twitter, Inc
|
|
// Licensed under The MIT License
|
|
// http://opensource.org/licenses/MIT
|
|
// ==========================================
|
|
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var semver = require('semver');
|
|
|
|
var _ = require('lodash');
|
|
|
|
var config = require('../core/config');
|
|
|
|
function save(manager, paths, dev, cb) {
|
|
// If there is specific paths to save, redirect to the appropriate function
|
|
if (paths && paths.length) return savePkgs.apply(savePkgs, arguments);
|
|
|
|
manager.on('loadJSON', function () {
|
|
manager.json.dependencies = manager.json.dependencies || {};
|
|
manager.json.devDependencies = manager.json.devDependencies || {};
|
|
|
|
// Only include the root packages
|
|
for (var name in manager.dependencies) {
|
|
var curr = manager.dependencies[name][0];
|
|
if (curr.root) {
|
|
addDependency(manager.json, curr, !!manager.json.devDependencies[name]);
|
|
}
|
|
}
|
|
|
|
// Cleanup dependencies from the json if empty
|
|
if (!Object.keys(manager.json.dependencies).length) {
|
|
delete manager.json.dependencies;
|
|
}
|
|
|
|
// Cleanup dependencies if empty
|
|
if (!Object.keys(manager.json.devDependencies).length) {
|
|
delete manager.json.devDependencies;
|
|
}
|
|
|
|
// Finally save the modified json
|
|
fs.writeFile(path.join(manager.cwd, config.json), JSON.stringify(manager.json, null, 2), cb);
|
|
}).loadJSON();
|
|
}
|
|
|
|
function savePkgs(manager, paths, dev, cb) {
|
|
manager.on('loadJSON', function () {
|
|
// Find the package names that match the paths
|
|
var names = _.compact(paths.map(function (endpoint) {
|
|
endpoint = endpoint.split('#')[0];
|
|
|
|
return _.find(Object.keys(manager.dependencies), function (key) {
|
|
var dep = manager.dependencies[key][0];
|
|
if (dep.name === endpoint) return true;
|
|
|
|
var fetchedEndpoint = dep.readEndpoint();
|
|
return fetchedEndpoint && fetchedEndpoint.endpoint === endpoint;
|
|
});
|
|
}));
|
|
|
|
var key = dev ? 'devDependencies' : 'dependencies';
|
|
manager.json[key] = manager.json[key] || {};
|
|
|
|
// Save each of them
|
|
// Only include the root packages
|
|
names.forEach(function (name) {
|
|
addDependency(manager.json, manager.dependencies[name][0], dev);
|
|
});
|
|
|
|
// Finally save the modified json
|
|
fs.writeFile(path.join(manager.cwd, config.json), JSON.stringify(manager.json, null, 2), cb);
|
|
}).loadJSON();
|
|
}
|
|
|
|
function addDependency(json, pkg, dev) {
|
|
var path;
|
|
var tag;
|
|
var key = dev ? 'devDependencies' : 'dependencies';
|
|
|
|
if (pkg.lookedUp) {
|
|
tag = pkg.originalTag || '~' + pkg.version;
|
|
} else {
|
|
path = (pkg.gitUrl || pkg.assetUrl || pkg.originalPath || '');
|
|
tag = pkg.originalTag || '~' + pkg.version;
|
|
}
|
|
|
|
// If the tag is not valid (e.g.: a commit), null it
|
|
if (!semver.valid(tag) && !semver.validRange(tag)) tag = null;
|
|
|
|
return json[key][pkg.name] = path ? path + (tag ? '#' + tag : '') : tag || 'latest';
|
|
}
|
|
|
|
module.exports = save;
|