@@ -4,70 +4,31 @@ if (typeof Iterator === 'undefined' || Iterator == null) {
44 globalThis . Iterator = function ( ) { } ;
55}
66
7- function getIteratorFlattenable < A > ( obj : IteratorOrIterable < A > , stringHandling : 'iterate-strings' | 'reject-strings' ) : Iterator < A >
8- function getIteratorFlattenable ( obj : any , stringHandling : 'iterate-strings' | 'reject-strings' ) : Iterator < unknown >
9- function getIteratorFlattenable ( obj : any , stringHandling : 'iterate-strings' | 'reject-strings' ) : Iterator < unknown > {
10- if ( Object ( obj ) !== obj ) {
11- if ( stringHandling === 'reject-strings' || typeof obj != 'string' ) {
12- throw new TypeError ;
13- }
14- obj = Object ( obj ) ;
15- }
16- let iter = Symbol . iterator in obj ? obj [ Symbol . iterator ] ( ) : obj as Iterator < unknown > ;
17- if ( Object ( iter ) !== iter ) {
18- throw new TypeError ;
19- }
20- return iter ;
21- }
22-
23- type IteratorOrIterable < A > = Iterable < A > | Iterator < A >
24- interface Iterable < T > {
25- [ Symbol . iterator ] ( ) : Iterator < T , unknown , unknown > ;
26- }
27-
28- function liftIterator < A > ( iter : Iterator < A > ) : Iterable < A > {
29- return { [ Symbol . iterator ] ( ) { return iter ; } } ;
30- }
31-
32- function concatImpl < A > ( ...iterators : Array < IteratorOrIterable < A > > ) : Generator < A >
7+ function concatImpl < A > ( ...iterables : Array < Iterable < A > > ) : Generator < A >
338function concatImpl ( ) : Generator < never >
34- function concatImpl < A > ( iteratorA : IteratorOrIterable < A > ) : Generator < A >
35- function concatImpl < A , B > ( iteratorA : IteratorOrIterable < A > , iteratorB : IteratorOrIterable < B > ) : Generator < A | B >
36- function concatImpl < A , B , C > ( iteratorA : IteratorOrIterable < A > , iteratorB : IteratorOrIterable < B > , iteratorC : IteratorOrIterable < C > ) : Generator < A | B | C >
37- function concatImpl < A , B , C , D > ( iteratorA : IteratorOrIterable < A > , iteratorB : IteratorOrIterable < B > , iteratorC : IteratorOrIterable < C > , iteratorD : IteratorOrIterable < D > ) : Generator < A | B | C | D >
38- function concatImpl < A , B , C , D , E > ( iteratorA : IteratorOrIterable < A > , iteratorB : IteratorOrIterable < B > , iteratorC : IteratorOrIterable < C > , iteratorD : IteratorOrIterable < D > , iteratorE : IteratorOrIterable < E > ) : Generator < A | B | C | D | E >
39- function concatImpl ( ...iterators : Array < IteratorOrIterable < unknown > > ) : Generator < unknown >
40- function * concatImpl ( ...iterators : Array < unknown > ) : Generator < unknown > {
41- let i = 0 ;
42- try {
43- for ( ; i < iterators . length ; ++ i ) {
44- let iter = iterators [ i ] ;
45- yield * liftIterator ( getIteratorFlattenable ( iter , 'reject-strings' ) ) ;
46- }
47- } finally {
48- let err = null , hasErr = false ;
49- for ( ++ i ; i < iterators . length ; ++ i ) {
50- try {
51- let obj = iterators [ i ] ;
52- if ( obj != null && ( typeof obj === 'object' || typeof obj === 'function' ) ) {
53- let iter = obj as Iterator < unknown > ;
54- if ( typeof iter . next === 'function' ) {
55- iter . return ?.( ) ;
56- }
57- }
58- } catch ( e ) {
59- if ( ! hasErr ) {
60- hasErr = true ;
61- err = e ;
62- }
63- }
64- }
65- if ( hasErr ) throw err ;
9+ function concatImpl < A > ( iterableA : Iterable < A > ) : Generator < A >
10+ function concatImpl < A , B > ( iterableA : Iterable < A > , iterableB : Iterable < B > ) : Generator < A | B >
11+ function concatImpl < A , B , C > ( iterableA : Iterable < A > , iterableB : Iterable < B > , iterableC : Iterable < C > ) : Generator < A | B | C >
12+ function concatImpl < A , B , C , D > ( iterableA : Iterable < A > , iterableB : Iterable < B > , iterableC : Iterable < C > , iterableD : Iterable < D > ) : Generator < A | B | C | D >
13+ function concatImpl < A , B , C , D , E > ( iterableA : Iterable < A > , iterableB : Iterable < B > , iterableC : Iterable < C > , iterableD : Iterable < D > , iterableE : Iterable < E > ) : Generator < A | B | C | D | E >
14+ function concatImpl ( ...iterables : Array < Iterable < unknown > > ) : Generator < unknown >
15+ function concatImpl ( ...iterables : Array < unknown > ) : Generator < unknown > {
16+ const openMethods = [ ] ;
17+ for ( let iterable of iterables ) {
18+ if ( iterable == null || Object ( iterable ) !== iterable ) throw new TypeError ;
19+ let openMethod = ( iterable as any ) [ Symbol . iterator ] ;
20+ if ( typeof openMethod !== 'function' ) throw new TypeError ;
21+ openMethods . push ( { openMethod, iterable} ) ;
6622 }
23+ return function * ( ) {
24+ for ( let { openMethod, iterable } of openMethods ) {
25+ yield * { [ Symbol . iterator ] ( ) { return openMethod . call ( iterable ) ; } }
26+ }
27+ } ( ) ;
6728}
6829
6930// NOTE: this line makes concat non-constructible, and gives it the appropriate name and length
70- const concat = ( ...iterators : Array < IteratorOrIterable < unknown > > ) => concatImpl ( ...iterators ) ;
31+ const concat = ( ...iterators : Array < Iterable < unknown > > ) => concatImpl ( ...iterators ) ;
7132Object . defineProperty ( Iterator , 'concat' , {
7233 configurable : true ,
7334 writable : true ,
0 commit comments