21
21
// MODULES //
22
22
23
23
var shell = require ( 'child_process' ) . execSync ; // eslint-disable-line node/no-sync
24
+ var semver = require ( 'semver' ) ;
24
25
var logger = require ( 'debug' ) ;
25
26
var omit = require ( '@stdlib/utils/omit' ) ;
26
27
var rootDir = require ( '@stdlib/_tools/utils/root-dir' ) ;
@@ -35,35 +36,43 @@ var OMITTED_KEYS = [ 'created', 'modified', 'unpublished' ];
35
36
// MAIN //
36
37
37
38
/**
38
- * Returns a list of published package versions and their release dates.
39
+ * Returns a two-element array of published package versions and their release dates.
39
40
*
40
41
* @private
41
42
* @param {string } pkg - package name
42
- * @returns {Object } object mapping versions to release dates
43
+ * @returns {Array } two-element array of published package versions and their release dates
43
44
*
44
45
* @example
45
46
* var releases = npmReleases( '@stdlib/utils-omit' );
46
- * // returns { ...}
47
+ * // returns [ ...]
47
48
*/
48
49
function npmReleases ( pkg ) {
50
+ var releases ;
49
51
var command ;
52
+ var version ;
50
53
var opts ;
51
- var out ;
54
+ var map ;
52
55
53
56
command = 'npm view ' + pkg + ' time --json' ;
54
57
opts = {
55
58
'cwd' : rootDir ( ) ,
56
59
'stdio' : [ 'pipe' , 'pipe' , 'ignore' ] // stdin, stdout, stderr
57
60
} ;
58
61
try {
59
- out = shell ( command , opts ) . toString ( ) ;
60
- out = JSON . parse ( out ) ;
62
+ map = shell ( command , opts ) . toString ( ) ;
63
+ map = JSON . parse ( map ) ;
61
64
} catch ( err ) {
62
65
debug ( 'Encountered an error when attempting to retrieve package release dates: %s' , err . message ) ;
63
66
return { } ;
64
67
}
65
- out = omit ( out , OMITTED_KEYS ) ;
66
- return out ;
68
+ map = omit ( map , OMITTED_KEYS ) ;
69
+ releases = [ ] ;
70
+ for ( version in map ) {
71
+ if ( semver . valid ( version ) && ! semver . prerelease ( version ) ) {
72
+ releases . push ( [ version , map [ version ] ] ) ;
73
+ }
74
+ }
75
+ return releases ;
67
76
}
68
77
69
78
0 commit comments