@@ -78,6 +78,18 @@ const hasDepVersZero = function(packageJsonData, nodeName) {
7878 return false ;
7979} ;
8080
81+ /**
82+ * Determines if the dependencies version string starts with the specified range
83+ * @param {String } dependencyVersion Dependency's version range
84+ * @param {String } rangeSpecifier A version range specifier
85+ * @return {Boolean } True if the version starts with the range, false if it doesn't.
86+ */
87+ const doesVersStartsWithRange = function ( dependencyVersion , rangeSpecifier ) {
88+ const firstCharOfStr = 0 ;
89+
90+ return dependencyVersion . startsWith ( rangeSpecifier , firstCharOfStr ) ;
91+ } ;
92+
8193/**
8294 * Determines whether or not all dependency version ranges match expected range
8395 * @param {object } packageJsonData Valid JSON
@@ -90,20 +102,44 @@ const areVersRangesValid = function(packageJsonData, nodeName, rangeSpecifier) {
90102 return true ;
91103 }
92104
93- const firstCharOfStr = 0 ;
94105 let rangesValid = true ;
95106
96107 for ( const dependencyName in packageJsonData [ nodeName ] ) {
97108 const dependencyVersion = packageJsonData [ nodeName ] [ dependencyName ] ;
98109
99- if ( ! dependencyVersion . startsWith ( rangeSpecifier , firstCharOfStr ) ) {
110+ if ( ! doesVersStartsWithRange ( dependencyVersion , rangeSpecifier ) ) {
100111 rangesValid = false ;
101112 }
102113 }
103114
104115 return rangesValid ;
105116} ;
106117
118+ /**
119+ * Determines if any dependencies have a version string that starts with the specified invalid range
120+ * @param {object } packageJsonData Valid JSON
121+ * @param {string } nodeName Name of a node in the package.json file
122+ * @param {string } rangeSpecifier A version range specifier
123+ * @return {Boolean } True if any dependencies versions start with the invalid range, false if they don't.
124+ */
125+ const doVersContainInvalidRange = function ( packageJsonData , nodeName , rangeSpecifier ) {
126+ if ( ! packageJsonData . hasOwnProperty ( nodeName ) ) {
127+ return false ;
128+ }
129+
130+ let containsInvalidVersion = false ;
131+
132+ for ( const dependencyName in packageJsonData [ nodeName ] ) {
133+ const dependencyVersion = packageJsonData [ nodeName ] [ dependencyName ] ;
134+
135+ if ( doesVersStartsWithRange ( dependencyVersion , rangeSpecifier ) ) {
136+ containsInvalidVersion = true ;
137+ }
138+ }
139+
140+ return containsInvalidVersion ;
141+ } ;
142+
107143/**
108144 * Determines whether or not all dependency versions are absolut
109145 * @param {object } packageJsonData Valid JSON
@@ -138,5 +174,7 @@ const isVersionAbsolute = function(packageJsonData, nodeName) {
138174module . exports . hasDependency = hasDependency ;
139175module . exports . hasDepPrereleaseVers = hasDepPrereleaseVers ;
140176module . exports . hasDepVersZero = hasDepVersZero ;
177+ module . exports . doesVersStartsWithRange = doesVersStartsWithRange ;
141178module . exports . areVersRangesValid = areVersRangesValid ;
179+ module . exports . doVersContainInvalidRange = doVersContainInvalidRange ;
142180module . exports . isVersionAbsolute = isVersionAbsolute ;
0 commit comments