1
1
'use strict' ;
2
2
3
- var _ = require ( 'lodash' ) ;
3
+ var exec = require ( 'shelljs' ) . exec ;
4
+ var semver = require ( 'semver' ) ;
5
+
6
+ var currentVersion = require ( '../../../build/version.json' ) ;
4
7
5
8
/**
6
9
* @dgProcessor generateVersionDocProcessor
@@ -12,23 +15,93 @@ module.exports = function generateVersionDocProcessor(gitData) {
12
15
return {
13
16
$runAfter : [ 'generatePagesDataProcessor' ] ,
14
17
$runBefore : [ 'rendering-docs' ] ,
18
+ blacklist : [ '1.3.4-build.3588' ] ,
15
19
$process : function ( docs ) {
16
20
17
- var versionDoc = {
21
+ var blacklist = this . blacklist ;
22
+ var output = exec ( 'npm info angular versions --json' , { silent : true } ) . stdout ;
23
+ var versions = processAllVersionsResponse ( JSON . parse ( output ) ) ;
24
+
25
+ docs . push ( {
26
+ docType : 'version-data' ,
27
+ id : 'version-data' ,
28
+ template : 'angular-service.template.js' ,
29
+ outputPath : 'js/version-data.js' ,
30
+ ngModuleName : 'versionData' ,
31
+ serviceName : 'NG_VERSION' ,
32
+ serviceValue : currentVersion
33
+ } ) ;
34
+
35
+ docs . push ( {
18
36
docType : 'versions-data' ,
19
37
id : 'versions-data' ,
20
- template : 'versions-data .template.js' ,
38
+ template : 'angular-service .template.js' ,
21
39
outputPath : 'js/versions-data.js' ,
22
- currentVersion : gitData . version
23
- } ;
40
+ ngModuleName : 'versionsData' ,
41
+ serviceName : 'NG_VERSIONS' ,
42
+ serviceValue : versions
43
+ } ) ;
44
+
45
+
46
+ function processAllVersionsResponse ( versions ) {
47
+
48
+ var latestMap = { } ;
49
+
50
+ versions = versions
51
+ . filter ( function ( versionStr ) {
52
+ return blacklist . indexOf ( versionStr ) === - 1 ;
53
+ } )
54
+ . map ( function ( versionStr ) {
55
+ var version = semver . parse ( versionStr ) ;
56
+ if ( version ) {
57
+ var key = version . major + '.' + version . minor ;
58
+ var latest = latestMap [ key ] ;
59
+ if ( ! latest || version . compare ( latest ) > 0 ) {
60
+ latestMap [ key ] = version ;
61
+ }
62
+ }
63
+ return version ;
64
+ } )
65
+ . filter ( function ( version ) {
66
+ return version && version . major > 0 ;
67
+ } )
68
+ . map ( function ( version ) {
69
+ return makeOption ( version ) ;
70
+ } )
71
+ . reverse ( ) ;
72
+
73
+ var latest = sortObject ( latestMap , reverse ( semver . compare ) ) . map ( function ( version ) { return makeOption ( version , 'Latest' ) ; } ) ;
74
+
75
+ return [ makeOption ( { version : 'snapshot' } , 'Latest' , 'master' ) ]
76
+ . concat ( latest )
77
+ . concat ( versions ) ;
78
+ }
79
+
80
+ function makeOption ( version , group , label ) {
81
+ return {
82
+ version : version ,
83
+ label : label || 'v' + version . raw ,
84
+ group : group || 'v' + version . major + '.' + version . minor ,
85
+ docsUrl : createDocsUrl ( version )
86
+ } ;
87
+ }
88
+
89
+ function createDocsUrl ( version ) {
90
+ var url = 'https://code.angularjs.org/' + version . version + '/docs' ;
91
+ // Versions before 1.0.2 had a different docs folder name
92
+ if ( version . major === 1 && version . minor === 0 && version . patch < 2 ) {
93
+ url += '-' + version . version ;
94
+ }
95
+ return url ;
96
+ }
24
97
25
- versionDoc . versions = _ ( gitData . versions )
26
- . filter ( function ( version ) { return version . major > 0 ; } )
27
- . push ( gitData . version )
28
- . reverse ( )
29
- . value ( ) ;
98
+ function reverse ( fn ) {
99
+ return function ( left , right ) { return - fn ( left , right ) ; } ;
100
+ }
30
101
31
- docs . push ( versionDoc ) ;
102
+ function sortObject ( obj , cmp ) {
103
+ return Object . keys ( obj ) . map ( function ( key ) { return obj [ key ] ; } ) . sort ( cmp ) ;
104
+ }
32
105
}
33
106
} ;
34
107
} ;
0 commit comments