@@ -78,6 +78,18 @@ const hasDepVersZero = function(packageJsonData, nodeName) {
78
78
return false ;
79
79
} ;
80
80
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
+
81
93
/**
82
94
* Determines whether or not all dependency version ranges match expected range
83
95
* @param {object } packageJsonData Valid JSON
@@ -90,20 +102,44 @@ const areVersRangesValid = function(packageJsonData, nodeName, rangeSpecifier) {
90
102
return true ;
91
103
}
92
104
93
- const firstCharOfStr = 0 ;
94
105
let rangesValid = true ;
95
106
96
107
for ( const dependencyName in packageJsonData [ nodeName ] ) {
97
108
const dependencyVersion = packageJsonData [ nodeName ] [ dependencyName ] ;
98
109
99
- if ( ! dependencyVersion . startsWith ( rangeSpecifier , firstCharOfStr ) ) {
110
+ if ( ! doesVersStartsWithRange ( dependencyVersion , rangeSpecifier ) ) {
100
111
rangesValid = false ;
101
112
}
102
113
}
103
114
104
115
return rangesValid ;
105
116
} ;
106
117
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
+
107
143
/**
108
144
* Determines whether or not all dependency versions are absolut
109
145
* @param {object } packageJsonData Valid JSON
@@ -138,5 +174,7 @@ const isVersionAbsolute = function(packageJsonData, nodeName) {
138
174
module . exports . hasDependency = hasDependency ;
139
175
module . exports . hasDepPrereleaseVers = hasDepPrereleaseVers ;
140
176
module . exports . hasDepVersZero = hasDepVersZero ;
177
+ module . exports . doesVersStartsWithRange = doesVersStartsWithRange ;
141
178
module . exports . areVersRangesValid = areVersRangesValid ;
179
+ module . exports . doVersContainInvalidRange = doVersContainInvalidRange ;
142
180
module . exports . isVersionAbsolute = isVersionAbsolute ;
0 commit comments