1+ const https = require ( 'https' ) ;
2+ const { execSync } = require ( 'child_process' ) ;
3+
4+ async function getPackageInfo ( packageName ) {
5+ return new Promise ( ( resolve , reject ) => {
6+ const url = `https://registry.npmjs.org/${ packageName } ` ;
7+
8+ https . get ( url , ( res ) => {
9+ let data = '' ;
10+
11+ res . on ( 'data' , ( chunk ) => {
12+ data += chunk ;
13+ } ) ;
14+
15+ res . on ( 'end' , ( ) => {
16+ try {
17+ const packageInfo = JSON . parse ( data ) ;
18+ resolve ( packageInfo ) ;
19+ } catch ( error ) {
20+ reject ( error ) ;
21+ }
22+ } ) ;
23+ } ) . on ( 'error' , ( error ) => {
24+ reject ( error ) ;
25+ } ) ;
26+ } ) ;
27+ }
28+
29+ function incrementVersion ( version , type = 'patch' ) {
30+ const parts = version . split ( '.' ) . map ( Number ) ;
31+
32+ switch ( type ) {
33+ case 'major' :
34+ parts [ 0 ] ++ ;
35+ parts [ 1 ] = 0 ;
36+ parts [ 2 ] = 0 ;
37+ break ;
38+ case 'minor' :
39+ parts [ 1 ] ++ ;
40+ parts [ 2 ] = 0 ;
41+ break ;
42+ case 'patch' :
43+ default :
44+ parts [ 2 ] ++ ;
45+ break ;
46+ }
47+
48+ return parts . join ( '.' ) ;
49+ }
50+
51+ async function getNextVersion ( packageName , versionType = 'patch' ) {
52+ try {
53+ const packageInfo = await getPackageInfo ( packageName ) ;
54+ const currentVersion = packageInfo [ 'dist-tags' ] . latest ;
55+ const nextVersion = incrementVersion ( currentVersion , versionType ) ;
56+
57+ console . log ( `Current version: ${ currentVersion } ` ) ;
58+ console . log ( `Next version: ${ nextVersion } ` ) ;
59+
60+ return nextVersion ;
61+ } catch ( error ) {
62+ console . error ( 'Error fetching package info:' , error . message ) ;
63+
64+ // Fallback: read from local package.json
65+ try {
66+ const packageJson = require ( '../package.json' ) ;
67+ const currentVersion = packageJson . version ;
68+ const nextVersion = incrementVersion ( currentVersion , versionType ) ;
69+
70+ console . log ( `Using local package.json version: ${ currentVersion } ` ) ;
71+ console . log ( `Next version: ${ nextVersion } ` ) ;
72+
73+ return nextVersion ;
74+ } catch ( fallbackError ) {
75+ console . error ( 'Error reading local package.json:' , fallbackError . message ) ;
76+ process . exit ( 1 ) ;
77+ }
78+ }
79+ }
80+
81+ // If run directly
82+ if ( require . main === module ) {
83+ const packageName = process . argv [ 2 ] || '@tobenot/basic-web-game-backend-contract' ;
84+ const versionType = process . argv [ 3 ] || 'patch' ;
85+
86+ getNextVersion ( packageName , versionType )
87+ . then ( nextVersion => {
88+ console . log ( nextVersion ) ;
89+ } )
90+ . catch ( error => {
91+ console . error ( 'Error:' , error . message ) ;
92+ process . exit ( 1 ) ;
93+ } ) ;
94+ }
95+
96+ module . exports = { getNextVersion, incrementVersion } ;
0 commit comments