source: frontend/node_modules/es-iterator-helpers/Iterator.zip/implementation.js

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

Fix frontend appearance

  • Property mode set to 100644
File size: 3.8 KB
RevLine 
[9af201e]1'use strict';
2
3var $TypeError = require('es-errors/type');
4
5var Get = require('es-abstract/2025/Get');
6var GetIterator = require('es-abstract/2025/GetIterator');
7var GetIteratorFlattenable = require('es-abstract/2025/GetIteratorFlattenable');
8var GetOptionsObject = require('../aos/GetOptionsObject');
9var IfAbruptCloseIterators = require('../aos/IfAbruptCloseIterators');
10var IteratorClose = require('es-abstract/2025/IteratorClose');
11var IteratorStepValue = require('es-abstract/2025/IteratorStepValue');
12var IteratorZip = require('../aos/IteratorZip');
13var NormalCompletion = require('es-abstract/2025/NormalCompletion');
14var ThrowCompletion = require('es-abstract/2025/ThrowCompletion');
15
16var isObject = require('es-abstract/helpers/isObject');
17
18module.exports = function zip(iterables) {
19 if (this instanceof zip) {
20 throw new $TypeError('`Iterator.zip` is not a constructor');
21 }
22
23 if (!isObject(iterables)) {
24 throw new $TypeError('`iterables` must be an Object'); // step 1
25 }
26
27 var options = GetOptionsObject(arguments.length > 1 ? arguments[1] : void undefined); // step 2
28
29 var mode = Get(options, 'mode'); // step 3
30
31 if (typeof mode === 'undefined') {
32 mode = 'shortest'; // step 4
33 }
34
35 if (mode !== 'shortest' && mode !== 'longest' && mode !== 'strict') {
36 throw new $TypeError('`mode` must be one of "shortest", "longest", or "strict"'); // step 5
37 }
38
39 var paddingOption; // step 6
40
41 if (mode === 'longest') {
42 paddingOption = Get(options, 'padding'); // step 7
43 if (typeof paddingOption !== 'undefined' && !isObject(paddingOption)) {
44 throw new $TypeError('`padding` option must be an Object'); // step 7.1
45 }
46 }
47
48 var iters = []; // step 8
49
50 var padding = []; // step 9
51
52 var inputIter = GetIterator(iterables, 'SYNC'); // step 10
53
54 var next; // = 'NOT-STARTED'; // step 11
55
56 while (!inputIter['[[Done]]']) { // step 12
57 try {
58 next = IteratorStepValue(inputIter); // step 12.a
59 } catch (e) {
60 IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 12.b
61 }
62
63 if (!inputIter['[[Done]]']) { // step 12.c
64 var iter;
65 try {
66 iter = GetIteratorFlattenable(next, 'REJECT-PRIMITIVES'); // step 12.c.i
67 } catch (e) {
68 IfAbruptCloseIterators(ThrowCompletion(e), [].concat(inputIter, iters)); // step 12.c.ii
69 }
70 iters[iters.length] = iter; // step 12.c.iii
71 }
72 }
73
74 var iterCount = iters.length; // step 13
75
76 if (mode === 'longest') { // step 14
77 if (typeof paddingOption === 'undefined') { // step 14.a
78 for (var i = 0; i < iterCount; i++) { // step 14.a.i
79 padding[padding.length] = void undefined; // step 14.a.i.1
80 }
81 } else { // step 14.b
82 var paddingIter;
83 try {
84 paddingIter = GetIterator(paddingOption, 'SYNC'); // step 14.b.i
85 } catch (e) {
86 IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 14.b.ii
87 }
88 var usingIterator = true; // step 14.b.iii
89 for (var j = 0; j < iterCount; j++) { // step 14.b.iv
90 if (usingIterator) { // step 14.b.iv.1
91 try {
92 next = IteratorStepValue(paddingIter); // step 14.b.iv.1.a
93 } catch (e) {
94 IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 14.b.iv.1.b
95 }
96 if (paddingIter['[[Done]]']) { // step 14.b.iv.1.c
97 usingIterator = false; // step 14.b.iv.1.c.i
98 } else { // step 14.b.iv.1.d
99 padding[padding.length] = next; // step 14.b.iv.1.d.i
100 }
101 }
102 if (!usingIterator) {
103 padding[padding.length] = void undefined; // step 14.b.iv.2
104 }
105 }
106
107 if (usingIterator) { // step 14.b.v
108 try {
109 IteratorClose(paddingIter, NormalCompletion(void undefined)); // step 14.b.v.1
110 } catch (e) {
111 IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 14.b.v.2
112 }
113 }
114 }
115 }
116
117 // eslint-disable-next-line no-sequences
118 var finishResults = (0, function (results) { // step 15
119 return results; // step 15.1
120 });
121
122 return IteratorZip(iters, mode, padding, finishResults); // step 16
123};
Note: See TracBrowser for help on using the repository browser.