@@ -13,6 +13,7 @@ const {
13
13
} = require ( "../../../../app/utils/package" ) ;
14
14
15
15
const readFile = util . promisify ( fs . readFile ) ;
16
+ const pluginData = { } ;
16
17
17
18
// eslint-disable-next-line no-unused-vars
18
19
module . exports = function ( options , context ) {
@@ -21,12 +22,14 @@ module.exports = function(options, context) {
21
22
name : "openupm-packages" ,
22
23
23
24
async extendPageData ( $page ) {
24
- let packageNames = await loadPackageNames ( ) ;
25
- $page . packageCount = packageNames . length ;
25
+ const data = await plugin . getData ( ) ;
26
+ $page . packageCount = data . packageNames . length ;
27
+ $page . recentPackages = data . packages . slice ( 0 , 10 ) ;
26
28
} ,
27
29
28
30
async additionalPages ( ) {
29
31
const data = await plugin . getData ( ) ;
32
+ pluginData . data = data ;
30
33
let pages = [ ] ;
31
34
pages = pages . concat ( await plugin . genListPages ( data ) ) ;
32
35
pages = pages . concat ( await plugin . genDetailPages ( data ) ) ;
@@ -39,83 +42,91 @@ module.exports = function(options, context) {
39
42
40
43
// Prepare data for page generation
41
44
async getData ( ) {
42
- // Load packages.
43
- const packageNames = await loadPackageNames ( ) ;
44
- const packages = packageNames
45
- . map ( loadPackageSync )
46
- . filter ( x => x )
47
- . map ( pkg => {
48
- return {
49
- ...pkg ,
50
- link : {
51
- link : `/packages/${ pkg . name } /` ,
52
- text : pkg . displayName || pkg . name
53
- }
54
- } ;
55
- } )
56
- // Sort by name
57
- . sort ( function ( a , b ) {
58
- const va = a . link . text . toLowerCase ( ) ;
59
- const vb = b . link . text . toLowerCase ( ) ;
60
- if ( va < vb ) return - 1 ;
61
- if ( va > vb ) return 1 ;
62
- return 0 ;
63
- } ) ;
64
- // Namespace => [package...] dict.
65
- const packageByNamespace = _ . groupBy ( packages , x => getNamespace ( x . name ) ) ;
66
- // Load topics.
67
- const topicsWithAll = [ { name : "All" , slug : "" } ]
68
- . concat ( ( await loadTopics ( ) ) . topics )
69
- . map ( topic => {
70
- return {
71
- ...topic ,
72
- link : topic . slug ? `/packages/topics/${ topic . slug } /` : "/packages/" ,
73
- count : packages . filter ( pkg =>
74
- plugin . packageTopicFilter ( pkg , topic . slug )
75
- ) . length
76
- } ;
77
- } ) ;
78
- const topics = topicsWithAll . slice ( 1 ) ;
79
- // contributors
80
- const getConstributors = function ( type ) {
81
- const entries = _ . flatMap ( packages , pkg => {
82
- if ( type == "hunter" ) return [ pkg . hunter ] ;
83
- else if ( type == "owner" ) {
84
- let arr = [ pkg . owner ] ;
85
- if (
86
- pkg . parentOwner &&
87
- pkg . parentOwnerUrl . toLowerCase ( ) . includes ( "github" )
88
- )
89
- arr . push ( pkg . parentOwner ) ;
90
- return arr ;
91
- } else return [ ] ;
92
- } ) . filter ( x => x && x != "-" ) ;
93
- const counted = _ . countBy ( entries ) ;
94
- const pairs = _ . toPairs ( counted ) . map ( x => ( {
95
- user : x [ 0 ] ,
96
- count : x [ 1 ]
97
- } ) ) ;
98
- return _ . sortBy ( pairs , "count" ) . reverse ( ) ;
99
- } ;
100
- // Package hunters
101
- const hunters = getConstributors ( "hunter" ) ;
102
- const owners = getConstributors ( "owner" ) ;
103
- // Backers
104
- const backerPath = path . resolve (
105
- __dirname ,
106
- "../../../../data/backers.yml"
107
- ) ;
108
- const backers = yaml . safeLoad ( await readFile ( backerPath , "utf8" ) ) ;
109
- return {
110
- backers,
111
- packageNames,
112
- packages,
113
- packageByNamespace,
114
- topics,
115
- topicsWithAll,
116
- hunters,
117
- owners
118
- } ;
45
+ if ( ! pluginData . data ) {
46
+ // Load packages.
47
+ const packageNames = await loadPackageNames ( ) ;
48
+ const packages = packageNames
49
+ . map ( loadPackageSync )
50
+ . filter ( x => x )
51
+ . map ( pkg => {
52
+ return {
53
+ ...pkg ,
54
+ link : {
55
+ link : `/packages/${ pkg . name } /` ,
56
+ text : pkg . displayName || pkg . name
57
+ }
58
+ } ;
59
+ } )
60
+ // Sort by name
61
+ . sort ( function ( a , b ) {
62
+ const va = a . link . text . toLowerCase ( ) ;
63
+ const vb = b . link . text . toLowerCase ( ) ;
64
+ if ( va < vb ) return - 1 ;
65
+ if ( va > vb ) return 1 ;
66
+ return 0 ;
67
+ } ) ;
68
+ // Namespace => [package...] dict.
69
+ const packageByNamespace = _ . groupBy ( packages , x =>
70
+ getNamespace ( x . name )
71
+ ) ;
72
+ // Load topics.
73
+ const topicsWithAll = [ { name : "All" , slug : "" } ]
74
+ . concat ( ( await loadTopics ( ) ) . topics )
75
+ . map ( topic => {
76
+ return {
77
+ ...topic ,
78
+ link : topic . slug
79
+ ? `/packages/topics/${ topic . slug } /`
80
+ : "/packages/" ,
81
+ count : packages . filter ( pkg =>
82
+ plugin . packageTopicFilter ( pkg , topic . slug )
83
+ ) . length
84
+ } ;
85
+ } ) ;
86
+ const topics = topicsWithAll . slice ( 1 ) ;
87
+ // contributors
88
+ const getConstributors = function ( type ) {
89
+ const entries = _ . flatMap ( packages , pkg => {
90
+ if ( type == "hunter" ) return [ pkg . hunter ] ;
91
+ else if ( type == "owner" ) {
92
+ let arr = [ pkg . owner ] ;
93
+ if (
94
+ pkg . parentOwner &&
95
+ pkg . parentOwnerUrl . toLowerCase ( ) . includes ( "github" )
96
+ )
97
+ arr . push ( pkg . parentOwner ) ;
98
+ return arr ;
99
+ } else return [ ] ;
100
+ } ) . filter ( x => x && x != "-" ) ;
101
+ const counted = _ . countBy ( entries ) ;
102
+ const pairs = _ . toPairs ( counted ) . map ( x => ( {
103
+ user : x [ 0 ] ,
104
+ count : x [ 1 ]
105
+ } ) ) ;
106
+ return _ . sortBy ( pairs , "count" ) . reverse ( ) ;
107
+ } ;
108
+ // Package hunters
109
+ const hunters = getConstributors ( "hunter" ) ;
110
+ const owners = getConstributors ( "owner" ) ;
111
+ // Backers
112
+ const backerPath = path . resolve (
113
+ __dirname ,
114
+ "../../../../data/backers.yml"
115
+ ) ;
116
+ const backers = yaml . safeLoad ( await readFile ( backerPath , "utf8" ) ) ;
117
+ // eslint-disable-next-line require-atomic-updates
118
+ pluginData . data = {
119
+ backers,
120
+ packageNames,
121
+ packages,
122
+ packageByNamespace,
123
+ topics,
124
+ topicsWithAll,
125
+ hunters,
126
+ owners
127
+ } ;
128
+ }
129
+ return pluginData . data ;
119
130
} ,
120
131
121
132
// Generate package list pages
0 commit comments