diff --git a/bower-locker-common.js b/bower-locker-common.js index 01477de..c1a2caf 100644 --- a/bower-locker-common.js +++ b/bower-locker-common.js @@ -11,9 +11,12 @@ var cwd = process.cwd(); * @returns {{name: String, commit: String, release: String, src: String, originalSrc: String}} */ function mapDependencyData(bowerInfo) { + var commitValue = bowerInfo._resolution + ? bowerInfo._resolution.commit + : ''; return { name: bowerInfo.name, - commit: bowerInfo._resolution.commit, + commit: commitValue, release: bowerInfo._release, src: bowerInfo._source, originalSrc: bowerInfo._originalSource diff --git a/bower-locker-lock.js b/bower-locker-lock.js index b42736a..4eb7437 100644 --- a/bower-locker-lock.js +++ b/bower-locker-lock.js @@ -4,6 +4,7 @@ var fs = require('fs'); var bowerInfo = require('./bower-locker-common.js'); var jsonFormat = require('json-format'); +var semver = require('semver'); /* using indent with spaces */ var formatConfig = { type: 'space', @@ -34,25 +35,38 @@ function lock(isVerbose) { process.exit(1); } + // Load all dependencies from the bower_components folder var dependencies = bowerInfo.getAllDependencies(); - // Create new bower config from existing - bowerConfig.bowerLocker = {lastUpdated: (new Date()).toISOString(), lockedVersions: {}}; - bowerConfig.resolutions = {}; - bowerConfig.dependencies = {}; - // Remove devDependency section to prevent version collision - delete bowerConfig.devDependencies; - + bowerConfig.bowerLocker = { + lastUpdated: (new Date()).toISOString(), + //For future improvements + originalVersions: { + dependencies: {}, + devDependencies: {} + } + }; + + bowerConfig.resolutions = bowerConfig.resolutions + ? bowerConfig.resolutions + : {}; + + //Iterate over dependecies found and set the version number as it found or as it was if not found. dependencies.forEach(function(dep) { // NOTE: Use dirName as the dependency name as it is more accurate than .bower.json properties - var name = dep.dirName; - bowerConfig.dependencies[name] = dep.src + '#' + dep.commit; // _source - bowerConfig.resolutions[name] = dep.commit; - bowerConfig.bowerLocker.lockedVersions[name] = dep.release; - if (isVerbose) { - console.log(' %s (%s): %s', name, dep.release, dep.commit); - } + var name = dep.dirName; + var validVersionNumber = semver.valid(dep.release); + + if(isVerbose) + { + if(!validVersionNumber) + console.log('err: %s with release number as (%s) not locked !', name, dep.release, dep.commit); + else + console.log(' %s (%s): %s locked', name, dep.release, dep.commit); + } + + setReleaseValue(bowerConfig, dep, validVersionNumber); }); // Create copy of original bower.json fs.writeFileSync('bower-locker.bower.json', bowerConfigStr, {encoding: 'utf8'}); @@ -62,4 +76,32 @@ function lock(isVerbose) { console.log('Locking completed.'); } +function setReleaseValue(bowerConfig,dep, validVersionNumber) { + var name = dep.dirName; + if(bowerConfig.dependencies && bowerConfig.dependencies[name]) + { + bowerConfig.bowerLocker.originalVersions.dependencies[name] = bowerConfig.dependencies[name]; + + bowerConfig.dependencies[name] = validVersionNumber + ? dep.release + : bowerConfig.dependencies[name]; + } + + if(bowerConfig.devDependencies && bowerConfig.devDependencies[name]) + { + bowerConfig.bowerLocker.originalVersions.devDependencies[name] = bowerConfig.devDependencies[name]; + + bowerConfig.devDependencies[name] = validVersionNumber + ? dep.release + : bowerConfig.devDependencies[name]; + } + + if(validVersionNumber) + { + bowerConfig.resolutions[name] = bowerConfig.resolutions[name] + ? bowerConfig.resolutions[name] + : dep.release; + } +} + module.exports = lock; diff --git a/package.json b/package.json index 3816917..9aca7e6 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "commander": "~2.9.0", - "json-format": "~0.1.2" + "json-format": "~0.1.2", + "semver": "~1.0.0" } }