11'use strict' ;
22
33const fs = require ( 'fs' ) ;
4- const guard = require ( 'when/guard' ) ;
54const path = require ( 'path' ) ;
65const { Readable } = require ( 'stream' ) ;
76const { finished } = require ( 'stream/promises' ) ;
@@ -17,12 +16,35 @@ const download = async function(url, version, type) {
1716 ) ;
1817 console . log ( ' ' , url , '→' , path . basename ( file ) ) ;
1918 //console.log(`curl ${url} > data/${path.basename(file)};`);
19+ if ( ! res . ok ) {
20+ throw new Error ( `Failed to download ${ url } : ${ res . status } ${ res . statusText } ` ) ;
21+ }
2022 return finished (
2123 Readable . fromWeb ( res . body ) . pipe ( fs . createWriteStream ( file ) )
2224 ) ;
2325} ;
26+
27+ async function parallelLimit ( tasks , limit ) {
28+ const results = new Array ( tasks . length ) ;
29+ const iterator = tasks . entries ( ) ;
30+
31+ async function worker ( ) {
32+ for ( const [ index , task ] of iterator ) {
33+ results [ index ] = await task ( ) ;
34+ }
35+ }
36+
37+ const workers = new Array ( limit ) . fill ( null ) . map ( ( ) => worker ( ) ) ;
38+ await Promise . all ( workers ) ;
39+ return results ;
40+ }
41+
42+ const tasks = [ ] ;
43+ const addDownloadTask = ( url , version , type ) => tasks . push ( ( ) => download ( url , version , type ) ) ;
44+
2445// Limit maximum parallelism to something reasonable
25- const guardedDownload = guard ( guard . n ( PARALLEL_REQUEST_LIMIT ) , download ) ;
46+ parallelLimit ( tasks , PARALLEL_REQUEST_LIMIT ) ;
47+ const guardedDownload = ( ) => parallelLimit ( tasks , PARALLEL_REQUEST_LIMIT ) ;
2648
2749console . log ( 'Downloading resources…' ) ;
2850
@@ -53,10 +75,12 @@ const TYPES = [
5375
5476for ( const resource of resources ) {
5577 const version = resource . version ;
56- guardedDownload ( resource . main , version , 'database' ) ;
78+ addDownloadTask ( resource . main , version , 'database' ) ;
5779 for ( const type of TYPES ) {
5880 if ( resource [ type ] ) {
59- guardedDownload ( resource [ type ] , version , type ) ;
81+ addDownloadTask ( resource [ type ] , version , type ) ;
6082 }
6183 }
6284}
85+
86+ guardedDownload ( ) ;
0 commit comments