1
+ "use strict" ;
2
+ var __createBinding = ( this && this . __createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
3
+ if ( k2 === undefined ) k2 = k ;
4
+ var desc = Object . getOwnPropertyDescriptor ( m , k ) ;
5
+ if ( ! desc || ( "get" in desc ? ! m . __esModule : desc . writable || desc . configurable ) ) {
6
+ desc = { enumerable : true , get : function ( ) { return m [ k ] ; } } ;
7
+ }
8
+ Object . defineProperty ( o , k2 , desc ) ;
9
+ } ) : ( function ( o , m , k , k2 ) {
10
+ if ( k2 === undefined ) k2 = k ;
11
+ o [ k2 ] = m [ k ] ;
12
+ } ) ) ;
13
+ var __setModuleDefault = ( this && this . __setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
14
+ Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
15
+ } ) : function ( o , v ) {
16
+ o [ "default" ] = v ;
17
+ } ) ;
18
+ var __importStar = ( this && this . __importStar ) || function ( mod ) {
19
+ if ( mod && mod . __esModule ) return mod ;
20
+ var result = { } ;
21
+ if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . prototype . hasOwnProperty . call ( mod , k ) ) __createBinding ( result , mod , k ) ;
22
+ __setModuleDefault ( result , mod ) ;
23
+ return result ;
24
+ } ;
25
+ Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
26
+ exports . callLimit = void 0 ;
27
+ const os = __importStar ( require ( "node:os" ) ) ;
28
+ // availableParallelism available only since node v19, for older versions use
29
+ // cpus() cpus() can return an empty list if /proc is not mounted, use 1 in
30
+ // this case
31
+ /* c8 ignore start */
32
+ const defLimit = 'availableParallelism' in os
33
+ ? Math . max ( 1 , os . availableParallelism ( ) - 1 )
34
+ : Math . max ( 1 , os . cpus ( ) . length - 1 ) ;
35
+ const callLimit = ( queue , { limit = defLimit , rejectLate } = { } ) => new Promise ( ( res , rej ) => {
36
+ let active = 0 ;
37
+ let current = 0 ;
38
+ const results = [ ] ;
39
+ // Whether or not we rejected, distinct from the rejection just in case the rejection itself is falsey
40
+ let rejected = false ;
41
+ let rejection ;
42
+ const reject = ( er ) => {
43
+ if ( rejected )
44
+ return ;
45
+ rejected = true ;
46
+ rejection ??= er ;
47
+ if ( ! rejectLate )
48
+ rej ( rejection ) ;
49
+ } ;
50
+ let resolved = false ;
51
+ const resolve = ( ) => {
52
+ if ( resolved || active > 0 )
53
+ return ;
54
+ resolved = true ;
55
+ res ( results ) ;
56
+ } ;
57
+ const run = ( ) => {
58
+ const c = current ++ ;
59
+ if ( c >= queue . length )
60
+ return rejected ? reject ( ) : resolve ( ) ;
61
+ active ++ ;
62
+ const step = queue [ c ] ;
63
+ /* c8 ignore start */
64
+ if ( ! step )
65
+ throw new Error ( 'walked off queue' ) ;
66
+ /* c8 ignore stop */
67
+ results [ c ] = step ( )
68
+ . then ( result => {
69
+ active -- ;
70
+ results [ c ] = result ;
71
+ return result ;
72
+ } , er => {
73
+ active -- ;
74
+ reject ( er ) ;
75
+ } )
76
+ . then ( result => {
77
+ if ( rejected && active === 0 )
78
+ return rej ( rejection ) ;
79
+ run ( ) ;
80
+ return result ;
81
+ } ) ;
82
+ } ;
83
+ for ( let i = 0 ; i < limit ; i ++ )
84
+ run ( ) ;
85
+ } ) ;
86
+ exports . callLimit = callLimit ;
87
+ //# sourceMappingURL=index.js.map
0 commit comments