source: frontend/node_modules/es-iterator-helpers/Iterator.zipKeyed/implementation.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.8 KB
Line 
1'use strict';
2
3var $TypeError = require('es-errors/type');
4
5var CreateDataPropertyOrThrow = require('es-abstract/2025/CreateDataPropertyOrThrow');
6var Get = require('es-abstract/2025/Get');
7var GetIteratorFlattenable = require('es-abstract/2025/GetIteratorFlattenable');
8var OrdinaryObjectCreate = require('es-abstract/2025/OrdinaryObjectCreate');
9var ThrowCompletion = require('es-abstract/2025/ThrowCompletion');
10var ToPropertyDescriptor = require('es-abstract/2025/ToPropertyDescriptor');
11
12var forEach = require('es-abstract/helpers/forEach');
13var isObject = require('es-abstract/helpers/isObject');
14var ownKeys = require('es-abstract/helpers/OwnPropertyKeys');
15
16var gOPD = require('gopd');
17var IteratorZip = require('../aos/IteratorZip');
18var IfAbruptCloseIterators = require('../aos/IfAbruptCloseIterators');
19var GetOptionsObject = require('../aos/GetOptionsObject');
20
21module.exports = function zipKeyed(iterables) {
22 if (this instanceof zipKeyed) {
23 throw new $TypeError('`Iterator.zip` is not a constructor');
24 }
25
26 if (!isObject(iterables)) {
27 throw new $TypeError('`iterables` must be an Object'); // step 1
28 }
29
30 var options = GetOptionsObject(arguments.length > 1 ? arguments[1] : void undefined); // step 2
31
32 var mode = Get(options, 'mode'); // step 3
33
34 if (typeof mode === 'undefined') {
35 mode = 'shortest'; // step 4
36 }
37
38 if (mode !== 'shortest' && mode !== 'longest' && mode !== 'strict') {
39 throw new $TypeError('`mode` must be one of "shortest", "longest", or "strict"'); // step 5
40 }
41
42 var paddingOption; // step 6
43
44 if (mode === 'longest') { // step 7
45 paddingOption = Get(options, 'padding'); // step 7.a
46 if (typeof paddingOption !== 'undefined' && !isObject(paddingOption)) {
47 throw new $TypeError('`padding` option must be an Object'); // step 7.b
48 }
49 }
50
51 var iters = []; // step 8
52
53 var padding = []; // step 9
54
55 var allKeys = ownKeys(iterables); // step 10
56
57 var keys = []; // step 11
58
59 // eslint-disable-next-line consistent-return
60 forEach(allKeys, function (key) { // step 12
61 var desc;
62 try {
63 desc = ToPropertyDescriptor(gOPD(iterables, key)); // step 12.a
64 } catch (e) {
65 return IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 12.b
66 }
67
68 if (typeof desc !== 'undefined' && desc['[[Enumerable]]'] === true) { // step 12.c
69 var value;
70 try {
71 value = Get(iterables, key); // step 12.c.i
72 } catch (e) {
73 return IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 12.c.ii
74 }
75 if (typeof value !== 'undefined') { // step 12.c.iii
76 keys[keys.length] = key; // step 12.c.iii.1
77 var iter;
78 try {
79 iter = GetIteratorFlattenable(value, 'REJECT-PRIMITIVES'); // step 12.c.iii.2
80 } catch (e) {
81 return IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 12.c.iii.3
82 }
83 iters[iters.length] = iter; // step 12.c.iii.4
84 }
85 }
86 });
87
88 var iterCount = iters.length; // step 13
89
90 if (mode === 'longest') { // step 14
91 if (typeof paddingOption === 'undefined') { // step 14.a
92 for (var j = 0; j < iterCount; j += 1) { // step 14.a.i
93 padding[padding.length] = void undefined; // step 14.a.i.1
94 }
95 } else { // step 14.b
96 // eslint-disable-next-line consistent-return
97 forEach(keys, function (key) { // step 14.b.i
98 var value;
99 try {
100 value = Get(paddingOption, key); // step 14.b.i.1
101 } catch (e) {
102 return IfAbruptCloseIterators(ThrowCompletion(e), iters); // step 14.b.i.2
103 }
104 padding[padding.length] = value; // step 14.b.i.3
105 });
106 }
107 }
108
109 // eslint-disable-next-line no-sequences
110 var finishResults = (0, function (results) { // step 15
111 var obj = OrdinaryObjectCreate(null); // step 15.a
112 for (var i = 0; i < iterCount; i += 1) { // step 15.b
113 CreateDataPropertyOrThrow(obj, keys[i], results[i]); // step 15.b.i
114 }
115 return obj; // step 15.c
116 });
117
118 return IteratorZip(iters, mode, padding, finishResults); // step 16
119};
Note: See TracBrowser for help on using the repository browser.