@@ -21,26 +21,29 @@ const checkVersion = (options: GemDependency[], key: string, version: string): b
21
21
if ( match ) {
22
22
const operator = match [ 1 ] ;
23
23
const majorVersion = parseInt ( match [ 2 ] ) ;
24
- if ( ( operator === '~>' && majorVersion < parseInt ( version ) ) || ( operator === '<' && majorVersion <= parseInt ( version ) ) ) {
24
+ if ( ( operator === "~>" && majorVersion < parseInt ( version ) ) || ( operator === "<" && majorVersion <= parseInt ( version ) ) ) {
25
25
return true ;
26
26
}
27
27
}
28
28
}
29
29
}
30
30
return false ;
31
- }
31
+ } ;
32
32
33
33
export default async ( request : IRequest ) => {
34
34
const depth = request . query . depth ;
35
35
const maxDepth = typeof depth === "string" ? parseInt ( depth ) : 50 ;
36
36
if ( typeof request . query . gems !== "string" ) {
37
37
throw new StatusError ( 422 , "Gems required." ) ;
38
38
}
39
+
40
+ let subrequests = 0 ;
41
+
39
42
const gemNames = request . query . gems . split ( "," ) ;
40
43
const gemInfo : GemInfo [ ] = [ ] ;
41
44
let completeGems : string [ ] = [ ] ;
42
- let remainingGems = gemNames . slice ( ) ;
43
- let subrequests = 0 ;
45
+ let remainingGems = gemNames . slice ( 0 , REQUESTS_LIMIT - subrequests ) ;
46
+ const gemsOverflow = remainingGems . slice ( REQUESTS_LIMIT - subrequests ) ;
44
47
45
48
while ( remainingGems . length > 0 && ( subrequests + remainingGems . length ) <= REQUESTS_LIMIT ) {
46
49
const depFetches = remainingGems . map ( async ( gem ) => {
@@ -97,5 +100,9 @@ export default async (request: IRequest) => {
97
100
remainingGems = nextGems . filter ( gem => ! completeGems . includes ( gem ) ) ;
98
101
}
99
102
100
- return { specs : gemInfo . map ( Object . values ) , completeGems, remainingGems } ;
103
+ return {
104
+ specs : gemInfo . map ( Object . values ) ,
105
+ completeGems,
106
+ remainingGems : gemsOverflow . concat ( remainingGems ) . filter ( gem => ! completeGems . includes ( gem ) )
107
+ } ;
101
108
} ;
0 commit comments