source: frontend/node_modules/core-js-pure/modules/esnext.iterator.zip.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 11 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.0 KB
Line 
1'use strict';
2var $ = require('../internals/export');
3var anObject = require('../internals/an-object');
4var anObjectOrUndefined = require('../internals/an-object-or-undefined');
5var call = require('../internals/function-call');
6var uncurryThis = require('../internals/function-uncurry-this');
7var getIteratorRecord = require('../internals/get-iterator-record');
8var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
9var getModeOption = require('../internals/get-mode-option');
10var iteratorClose = require('../internals/iterator-close');
11var iteratorCloseAll = require('../internals/iterator-close-all');
12var iteratorZip = require('../internals/iterator-zip');
13var IS_PURE = require('../internals/is-pure');
14
15var concat = uncurryThis([].concat);
16var push = uncurryThis([].push);
17var THROW = 'throw';
18
19// `Iterator.zip` method
20// https://github.com/tc39/proposal-joint-iteration
21$({ target: 'Iterator', stat: true, forced: IS_PURE }, {
22 zip: function zip(iterables /* , options */) {
23 anObject(iterables);
24 var options = arguments.length > 1 ? anObjectOrUndefined(arguments[1]) : undefined;
25 var mode = getModeOption(options);
26 var paddingOption = mode === 'longest' ? anObjectOrUndefined(options && options.padding) : undefined;
27
28 var iters = [];
29 var padding = [];
30 var inputIter = getIteratorRecord(iterables);
31 var iter, done, next;
32 while (!done) {
33 try {
34 next = anObject(call(inputIter.next, inputIter.iterator));
35 done = next.done;
36 } catch (error) {
37 return iteratorCloseAll(iters, THROW, error);
38 }
39 if (!done) {
40 try {
41 iter = getIteratorFlattenable(next.value, false);
42 } catch (error) {
43 return iteratorCloseAll(concat([inputIter], iters), THROW, error);
44 }
45 push(iters, iter);
46 }
47 }
48
49 var iterCount = iters.length;
50 var i, paddingDone, paddingIter;
51 if (mode === 'longest') {
52 if (paddingOption === undefined) {
53 for (i = 0; i < iterCount; i++) push(padding, undefined);
54 } else {
55 try {
56 paddingIter = getIteratorRecord(paddingOption);
57 } catch (error) {
58 return iteratorCloseAll(iters, THROW, error);
59 }
60 var usingIterator = true;
61 for (i = 0; i < iterCount; i++) {
62 if (usingIterator) {
63 try {
64 next = anObject(call(paddingIter.next, paddingIter.iterator));
65 paddingDone = next.done;
66 next = next.value;
67 } catch (error) {
68 return iteratorCloseAll(iters, THROW, error);
69 }
70 if (paddingDone) {
71 usingIterator = false;
72 } else {
73 push(padding, next);
74 }
75 } else {
76 push(padding, undefined);
77 }
78 }
79
80 if (usingIterator) {
81 try {
82 iteratorClose(paddingIter.iterator, 'normal');
83 } catch (error) {
84 return iteratorCloseAll(iters, THROW, error);
85 }
86 }
87 }
88 }
89
90 return iteratorZip(iters, mode, padding);
91 }
92});
Note: See TracBrowser for help on using the repository browser.