11'use strict' ;
22
3+ const Nv = require ( '@pkgjs/nv' ) ;
34const Yaml = require ( 'js-yaml' ) ;
45
56
@@ -16,12 +17,12 @@ internals.toArray = (v) => {
1617} ;
1718
1819
19- internals . scan = ( travisYaml ) => {
20+ internals . scan = async ( travisYaml ) => {
2021
21- const raw = new Set ( ) ;
22+ const rawSet = new Set ( ) ;
2223
2324 for ( const v of internals . toArray ( travisYaml . node_js ) ) {
24- raw . add ( v ) ;
25+ rawSet . add ( v ) ;
2526 }
2627
2728 if ( travisYaml . env ) {
@@ -31,7 +32,7 @@ internals.scan = (travisYaml) => {
3132 const matches = env . match ( / (?: N O D E J S _ V E R | T R A V I S _ N O D E _ V E R S I O N | N O D E _ V E R ) = " ? ( n o d e \/ ) ? (?< version > [ \w . / * ] + ) " ? / ) ; /* hack syntax highlighter 🤦♂️ */
3233
3334 if ( matches ) {
34- raw . add ( matches . groups . version ) ;
35+ rawSet . add ( matches . groups . version ) ;
3536 }
3637 }
3738 }
@@ -41,16 +42,29 @@ internals.scan = (travisYaml) => {
4142 for ( const include of internals . toArray ( travisYaml . matrix . include ) ) {
4243
4344 if ( include . node_js ) {
44- raw . add ( include . node_js ) ;
45+ rawSet . add ( include . node_js ) ;
4546 }
4647 }
4748 }
4849
49- if ( travisYaml . language === 'node_js' && ! raw . size ) {
50- raw . add ( 'latest' ) ;
50+ if ( travisYaml . language === 'node_js' && ! rawSet . size ) {
51+ rawSet . add ( 'latest' ) ;
5152 }
5253
53- return { raw : [ ...raw ] } ;
54+ const raw = [ ...rawSet ] ;
55+ const resolved = [ ] ;
56+
57+ for ( const version of raw ) {
58+ const nv = await Nv ( version ) ;
59+
60+ if ( ! nv . length ) {
61+ continue ;
62+ }
63+
64+ resolved . push ( nv [ nv . length - 1 ] . version ) ;
65+ }
66+
67+ return { raw, resolved } ;
5468} ;
5569
5670
@@ -65,6 +79,6 @@ exports.detect = async ({ loadFile }) => {
6579 const travisYaml = Yaml . safeLoad ( buffer , { schema : Yaml . FAILSAFE_SCHEMA } ) ;
6680
6781 return {
68- travis : internals . scan ( travisYaml )
82+ travis : await internals . scan ( travisYaml )
6983 } ;
7084} ;
0 commit comments