@@ -176,37 +176,48 @@ class SemVer {
176176 // preminor will bump the version up to the next minor release, and immediately
177177 // down to pre-release. premajor and prepatch work the same way.
178178 inc ( release , identifier , identifierBase ) {
179- this . #checkIdentifiers( release , identifier , identifierBase )
179+ if ( release . startsWith ( 'pre' ) ) {
180+ if ( ! identifier && identifierBase === false ) {
181+ throw new Error ( 'invalid increment argument: identifier is empty' )
182+ }
183+ // Avoid an invalid semver results
184+ if ( identifier ) {
185+ const match = `-${ identifier } ` . match ( this . options . loose ? re [ t . PRERELEASELOOSE ] : re [ t . PRERELEASE ] )
186+ if ( ! match || match [ 1 ] !== identifier ) {
187+ throw new Error ( `invalid identifier: ${ identifier } ` )
188+ }
189+ }
190+ }
180191
181192 switch ( release ) {
182193 case 'premajor' :
183194 this . prerelease . length = 0
184195 this . patch = 0
185196 this . minor = 0
186197 this . major ++
187- this . #pre ( identifier , identifierBase )
198+ this . inc ( 'pre' , identifier , identifierBase )
188199 break
189200 case 'preminor' :
190201 this . prerelease . length = 0
191202 this . patch = 0
192203 this . minor ++
193- this . #pre ( identifier , identifierBase )
204+ this . inc ( 'pre' , identifier , identifierBase )
194205 break
195206 case 'prepatch' :
196207 // If this is already a prerelease, it will bump to the next version
197208 // drop any prereleases that might already exist, since they are not
198209 // relevant at this point.
199210 this . prerelease . length = 0
200211 this . inc ( 'patch' , identifier , identifierBase )
201- this . #pre ( identifier , identifierBase )
212+ this . inc ( 'pre' , identifier , identifierBase )
202213 break
203214 // If the input is a non-prerelease version, this acts the same as
204215 // prepatch.
205216 case 'prerelease' :
206217 if ( this . prerelease . length === 0 ) {
207218 this . inc ( 'patch' , identifier , identifierBase )
208219 }
209- this . #pre ( identifier , identifierBase )
220+ this . inc ( 'pre' , identifier , identifierBase )
210221 break
211222
212223 case 'major' :
@@ -246,7 +257,46 @@ class SemVer {
246257 }
247258 this . prerelease = [ ]
248259 break
260+ // This probably shouldn't be used publicly.
261+ // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
262+ case 'pre' : {
263+ const base = Number ( identifierBase ) ? 1 : 0
249264
265+ if ( this . prerelease . length === 0 ) {
266+ this . prerelease = [ base ]
267+ } else {
268+ let i = this . prerelease . length
269+ while ( -- i >= 0 ) {
270+ if ( typeof this . prerelease [ i ] === 'number' ) {
271+ this . prerelease [ i ] ++
272+ i = - 2
273+ }
274+ }
275+ if ( i === - 1 ) {
276+ // didn't increment anything
277+ if ( identifier === this . prerelease . join ( '.' ) && identifierBase === false ) {
278+ throw new Error ( 'invalid increment argument: identifier already exists' )
279+ }
280+ this . prerelease . push ( base )
281+ }
282+ }
283+ if ( identifier ) {
284+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
285+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
286+ let prerelease = [ identifier , base ]
287+ if ( identifierBase === false ) {
288+ prerelease = [ identifier ]
289+ }
290+ if ( compareIdentifiers ( this . prerelease [ 0 ] , identifier ) === 0 ) {
291+ if ( isNaN ( this . prerelease [ 1 ] ) ) {
292+ this . prerelease = prerelease
293+ }
294+ } else {
295+ this . prerelease = prerelease
296+ }
297+ }
298+ break
299+ }
250300 default :
251301 throw new Error ( `invalid increment argument: ${ release } ` )
252302 }
@@ -256,62 +306,6 @@ class SemVer {
256306 }
257307 return this
258308 }
259-
260- #checkIdentifiers ( release , identifier , identifierBase ) {
261- if ( release . startsWith ( 'pre' ) ) {
262- if ( ! identifier && identifierBase === false ) {
263- throw new Error ( 'invalid increment argument: identifier is empty' )
264- }
265-
266- // Avoid an invalid semver results
267- if ( identifier ) {
268- const match = `-${ identifier } ` . match ( this . options . loose ? re [ t . PRERELEASELOOSE ] : re [ t . PRERELEASE ] )
269- if ( ! match || match [ 1 ] !== identifier ) {
270- throw new Error ( `invalid identifier: ${ identifier } ` )
271- }
272- }
273- }
274- }
275-
276- // Keep 'pre' internal to avoid confusing results
277- // inc('1.0.0', 'pre') would become 1.0.0-0 which is the wrong direction.
278- #pre ( identifier , identifierBase ) {
279- const base = Number ( identifierBase ) ? 1 : 0
280-
281- if ( this . prerelease . length === 0 ) {
282- this . prerelease = [ base ]
283- } else {
284- let i = this . prerelease . length
285- while ( -- i >= 0 ) {
286- if ( typeof this . prerelease [ i ] === 'number' ) {
287- this . prerelease [ i ] ++
288- i = - 2
289- }
290- }
291- if ( i === - 1 ) {
292- // didn't increment anything
293- if ( identifier === this . prerelease . join ( '.' ) && identifierBase === false ) {
294- throw new Error ( 'invalid increment argument: identifier already exists' )
295- }
296- this . prerelease . push ( base )
297- }
298- }
299- if ( identifier ) {
300- // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
301- // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
302- let prerelease = [ identifier , base ]
303- if ( identifierBase === false ) {
304- prerelease = [ identifier ]
305- }
306- if ( compareIdentifiers ( this . prerelease [ 0 ] , identifier ) === 0 ) {
307- if ( isNaN ( this . prerelease [ 1 ] ) ) {
308- this . prerelease = prerelease
309- }
310- } else {
311- this . prerelease = prerelease
312- }
313- }
314- }
315309}
316310
317311module . exports = SemVer
0 commit comments