ig-types 6.16.3 → 6.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Array.js +29 -0
- package/Promise.js +25 -0
- package/README.md +77 -0
- package/generator.js +47 -0
- package/package.json +1 -1
package/Array.js
CHANGED
|
@@ -482,6 +482,35 @@ object.Mixin('ArrayProtoMixin', 'soft', {
|
|
|
482
482
|
this.constructor.zip(this, func, ...arrays)
|
|
483
483
|
: this.constructor.zip(func, this, ...arrays) },
|
|
484
484
|
|
|
485
|
+
// Insert new values between elements of an array
|
|
486
|
+
//
|
|
487
|
+
// .between(value)
|
|
488
|
+
// -> array
|
|
489
|
+
//
|
|
490
|
+
// .between(func)
|
|
491
|
+
// -> array
|
|
492
|
+
//
|
|
493
|
+
// func([a, b], from_index, to_index, array)
|
|
494
|
+
// -> elem
|
|
495
|
+
//
|
|
496
|
+
between: function(func){
|
|
497
|
+
var res = []
|
|
498
|
+
// NOTE: we skip the last element...
|
|
499
|
+
for(var i=0; i < this.length; i+=1){
|
|
500
|
+
var pair = new Array(2)
|
|
501
|
+
i in this ?
|
|
502
|
+
res.push(pair[0] = this[i])
|
|
503
|
+
: (res.length += 1)
|
|
504
|
+
if(i+1 >= this.length){
|
|
505
|
+
break }
|
|
506
|
+
i+1 in this
|
|
507
|
+
&& (pair[1] = this[i+1])
|
|
508
|
+
res.push(
|
|
509
|
+
typeof(func) == 'function' ?
|
|
510
|
+
func.call(this, pair, i, res.length, this)
|
|
511
|
+
: func) }
|
|
512
|
+
return res },
|
|
513
|
+
|
|
485
514
|
// get iterator over array...
|
|
486
515
|
//
|
|
487
516
|
// Array.iter()
|
package/Promise.js
CHANGED
|
@@ -249,6 +249,15 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
249
249
|
: (await Promise.all(list))
|
|
250
250
|
.flat() },
|
|
251
251
|
|
|
252
|
+
[Symbol.asyncIterator]: async function*(){
|
|
253
|
+
var list = this.__packed
|
|
254
|
+
if(list instanceof Promise){
|
|
255
|
+
yield this.__unpack(await list)
|
|
256
|
+
return }
|
|
257
|
+
for await(var elem of list){
|
|
258
|
+
yield* elem instanceof Array ?
|
|
259
|
+
elem
|
|
260
|
+
: [elem] } },
|
|
252
261
|
|
|
253
262
|
// iterator methods...
|
|
254
263
|
//
|
|
@@ -294,6 +303,22 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
294
303
|
.then(function(){
|
|
295
304
|
return res }) },
|
|
296
305
|
|
|
306
|
+
// XXX BETWEEN...
|
|
307
|
+
between: function(func){
|
|
308
|
+
var i = 0
|
|
309
|
+
var j = 0
|
|
310
|
+
var prev
|
|
311
|
+
return this.constructor(this,
|
|
312
|
+
function(e){
|
|
313
|
+
return i++ > 0 ?
|
|
314
|
+
[
|
|
315
|
+
typeof(func) == 'function' ?
|
|
316
|
+
func.call(this, [prev, e], i, i + j++)
|
|
317
|
+
: func,
|
|
318
|
+
e,
|
|
319
|
+
]
|
|
320
|
+
: [e] }) },
|
|
321
|
+
|
|
297
322
|
// XXX .chain(..) -- see generator.chain(..)
|
|
298
323
|
|
|
299
324
|
flat: function(depth=1){
|
package/README.md
CHANGED
|
@@ -30,6 +30,7 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
30
30
|
- [`<array>.toMap(..)`](#arraytomap)
|
|
31
31
|
- [`Array.zip(..)` / `<array>.zip(..)`](#arrayzip--arrayzip)
|
|
32
32
|
- [`Array.iter(..)` / `<array>.iter()`](#arrayiter--arrayiter)
|
|
33
|
+
- [`<array>.between(..)`](#arraybetween)
|
|
33
34
|
- [Abortable `Array` iteration](#abortable-array-iteration)
|
|
34
35
|
- [`array.STOP` / `array.STOP(..)`](#arraystop--arraystop)
|
|
35
36
|
- [`<array>.smap(..)` / `<array>.sfilter(..)` / `<array>.sreduce(..)` / `<array>.sforEach(..)`](#arraysmap--arraysfilter--arraysreduce--arraysforeach)
|
|
@@ -75,6 +76,7 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
75
76
|
- [`<promise>.iter()`](#promiseiter)
|
|
76
77
|
- [`<promise-iter>.iter()`](#promise-iteriter)
|
|
77
78
|
- [`<promise-iter>.map(..)` / `<promise-iter>.filter(..)` / `<promise-iter>.reduce(..)`](#promise-itermap--promise-iterfilter--promise-iterreduce)
|
|
79
|
+
- [`<promise-iter>.between(..)`](#promise-iterbetween)
|
|
78
80
|
- [`<promise-iter>.flat(..)`](#promise-iterflat)
|
|
79
81
|
- [`<promise-iter>.reverse()`](#promise-iterreverse)
|
|
80
82
|
- [`<promise-iter>.concat(..)`](#promise-iterconcat)
|
|
@@ -100,6 +102,8 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
100
102
|
- [`<generator>.iter(..)`](#generatoriter-1)
|
|
101
103
|
- [`<generator>.map(..)` / `<generator>.filter(..)`](#generatormap--generatorfilter)
|
|
102
104
|
- [`<generator>.reduce(..)` / `<generator>.greduce(..)`](#generatorreduce--generatorgreduce)
|
|
105
|
+
- [`<generator>.forEach(..)` (EXPERIMENTAL)](#generatorforeach-experimental)
|
|
106
|
+
- [`<generator>.between(..)`](#generatorbetween)
|
|
103
107
|
- [`<generator>.slice(..)`](#generatorslice)
|
|
104
108
|
- [`<generator>.at(..)` / `<generator>.gat(..)`](#generatorat--generatorgat)
|
|
105
109
|
- [`<generator>.flat(..)`](#generatorflat)
|
|
@@ -116,6 +120,7 @@ Library of JavaScript type extensions, types and utilities.
|
|
|
116
120
|
- [`<generator>.unshift(..)` / `<generator>.push(..)`](#generatorunshift--generatorpush-1)
|
|
117
121
|
- [`<Generator>.slice(..)`](#generatorslice-1)
|
|
118
122
|
- [`<Generator>.map(..)` / `<Generator>.filter(..)` / `<Generator>.reduce(..)` / `<Generator>.flat()`](#generatormap--generatorfilter--generatorreduce--generatorflat)
|
|
123
|
+
- [`<Generator>.between(..)`](#generatorbetween-1)
|
|
119
124
|
- [`<Generator>.toArray()`](#generatortoarray-1)
|
|
120
125
|
- [`<Generator>.join(..)`](#generatorjoin-1)
|
|
121
126
|
- [`<Generator>.then(..)` / `<Generator>.catch(..)` / `<Generator>.finally(..)`](#generatorthen--generatorcatch--generatorfinally-1)
|
|
@@ -736,6 +741,19 @@ Return an iterator/generator from the current array.
|
|
|
736
741
|
This is mostly useful in combination with the [Generator extensions and utilities](#generator-extensions-and-utilities)
|
|
737
742
|
|
|
738
743
|
|
|
744
|
+
### `<array>.between(..)`
|
|
745
|
+
|
|
746
|
+
```bnf
|
|
747
|
+
<array>.between(<value>)
|
|
748
|
+
-> <array>
|
|
749
|
+
<array>.between(<func>)
|
|
750
|
+
-> <array>
|
|
751
|
+
|
|
752
|
+
<func>([<pre>, <post>], <index-in>, <index-out>, <array>)
|
|
753
|
+
-> <value>
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
|
|
739
757
|
### Abortable `Array` iteration
|
|
740
758
|
|
|
741
759
|
A an alternative to `Array`'s `.map(..)` / `.filter(..)` / .. methods with ability to
|
|
@@ -1562,6 +1580,14 @@ in how they process values:
|
|
|
1562
1580
|
appropriate method on the result.
|
|
1563
1581
|
<!-- XXX list + mark definitions as "(proxy)" -->
|
|
1564
1582
|
|
|
1583
|
+
Promise iterators directly support _for-await-of_ iteration:
|
|
1584
|
+
|
|
1585
|
+
```javascript
|
|
1586
|
+
for await (var elem of Promise.iter(/* ... */)){
|
|
1587
|
+
// ...
|
|
1588
|
+
}
|
|
1589
|
+
```
|
|
1590
|
+
|
|
1565
1591
|
<!--
|
|
1566
1592
|
XXX should we support generators as input?
|
|
1567
1593
|
...not sure about the control flow direction here, on one hand the generator
|
|
@@ -1657,6 +1683,19 @@ Note that since `.reduce(..)` handler's execution order can not be known,
|
|
|
1657
1683
|
there is no point in implementing `.reduceRigth(..)`.
|
|
1658
1684
|
|
|
1659
1685
|
|
|
1686
|
+
### `<promise-iter>.between(..)`
|
|
1687
|
+
|
|
1688
|
+
```bnf
|
|
1689
|
+
<promise-iter>.between(<value>)
|
|
1690
|
+
-> <promise-iter>
|
|
1691
|
+
<promise-iter>.between(<func>)
|
|
1692
|
+
-> <promise-iter>
|
|
1693
|
+
|
|
1694
|
+
<func>([<pre>, <post>], <index-in>, <index-out>, <promise-iter>)
|
|
1695
|
+
-> <value>
|
|
1696
|
+
```
|
|
1697
|
+
|
|
1698
|
+
|
|
1660
1699
|
#### `<promise-iter>.flat(..)`
|
|
1661
1700
|
|
|
1662
1701
|
```bnf
|
|
@@ -2135,6 +2174,31 @@ XXX .reduce(..) can return a non-iterable -- test and document this case...
|
|
|
2135
2174
|
...compare with Array.prototype.reduce(..)
|
|
2136
2175
|
-->
|
|
2137
2176
|
|
|
2177
|
+
#### `<generator>.forEach(..)` (EXPERIMENTAL)
|
|
2178
|
+
|
|
2179
|
+
```bnf
|
|
2180
|
+
<generator>.forEach(<func>)
|
|
2181
|
+
-> <array>
|
|
2182
|
+
```
|
|
2183
|
+
|
|
2184
|
+
This is different from the above in that this will unwind the `<generator>`.
|
|
2185
|
+
|
|
2186
|
+
Note that this differs from `<array>.forEach(..)` in that his will return the
|
|
2187
|
+
resulting array, essentially behaving like `.map(..)`.
|
|
2188
|
+
|
|
2189
|
+
|
|
2190
|
+
#### `<generator>.between(..)`
|
|
2191
|
+
|
|
2192
|
+
```bnf
|
|
2193
|
+
<generator>.between(<value>)
|
|
2194
|
+
-> <generator>
|
|
2195
|
+
<generator>.between(<func>)
|
|
2196
|
+
-> <generator>
|
|
2197
|
+
|
|
2198
|
+
<func>([<pre>, <post>], <index-in>, <index-out>, <generator>)
|
|
2199
|
+
-> <value>
|
|
2200
|
+
```
|
|
2201
|
+
|
|
2138
2202
|
|
|
2139
2203
|
#### `<generator>.slice(..)`
|
|
2140
2204
|
|
|
@@ -2416,6 +2480,19 @@ but return a `<Generator>`.
|
|
|
2416
2480
|
<!-- XXX -->
|
|
2417
2481
|
|
|
2418
2482
|
|
|
2483
|
+
#### `<Generator>.between(..)`
|
|
2484
|
+
|
|
2485
|
+
```bnf
|
|
2486
|
+
<Generator>.between(<value>)
|
|
2487
|
+
-> <Generator>
|
|
2488
|
+
<Generator>.between(<func>)
|
|
2489
|
+
-> <Generator>
|
|
2490
|
+
|
|
2491
|
+
<func>([<pre>, <post>], <index-in>, <index-out>, <Generator>)
|
|
2492
|
+
-> <value>
|
|
2493
|
+
```
|
|
2494
|
+
|
|
2495
|
+
|
|
2419
2496
|
#### `<Generator>.toArray()`
|
|
2420
2497
|
|
|
2421
2498
|
Return a function that will return a `<generator>` output as an `Array`.
|
package/generator.js
CHANGED
|
@@ -223,6 +223,15 @@ object.Mixin('GeneratorMixin', 'soft', {
|
|
|
223
223
|
reduce: makeGenerator('reduce'),
|
|
224
224
|
reduceRight: makeGenerator('reduceRight'),
|
|
225
225
|
|
|
226
|
+
between: makeGenerator('between'),
|
|
227
|
+
|
|
228
|
+
// XXX EXPERIMENTAL
|
|
229
|
+
// XXX add .toString(..) to this???
|
|
230
|
+
forEach: function(func){
|
|
231
|
+
var that = this
|
|
232
|
+
return function(){
|
|
233
|
+
return that(...arguments).forEach(func) } },
|
|
234
|
+
|
|
226
235
|
// non-generators...
|
|
227
236
|
//
|
|
228
237
|
toArray: function(){
|
|
@@ -397,6 +406,26 @@ object.Mixin('GeneratorProtoMixin', 'soft', {
|
|
|
397
406
|
greduce: function*(func, res){
|
|
398
407
|
yield this.reduce(...arguments) },
|
|
399
408
|
|
|
409
|
+
between: stoppable(function*(func){
|
|
410
|
+
var i = 0
|
|
411
|
+
var j = 0
|
|
412
|
+
var prev
|
|
413
|
+
for(var e of this){
|
|
414
|
+
if(i > 0){
|
|
415
|
+
yield typeof(func) == 'function' ?
|
|
416
|
+
func.call(this, [prev, e], i-1, i + j++, this)
|
|
417
|
+
: func }
|
|
418
|
+
prev = e
|
|
419
|
+
yield e
|
|
420
|
+
i++ } }),
|
|
421
|
+
|
|
422
|
+
// NOTE: this is a special case in that it will unwind the generator...
|
|
423
|
+
// NOTE: this is different from <array>.forEach(..) in that this will
|
|
424
|
+
// return the resulting array.
|
|
425
|
+
// XXX EXPERIMENTAL
|
|
426
|
+
forEach: function(func){
|
|
427
|
+
return [...this].map(func) },
|
|
428
|
+
|
|
400
429
|
pop: function(){
|
|
401
430
|
return [...this].pop() },
|
|
402
431
|
// XXX this needs the value to be iterable...
|
|
@@ -490,6 +519,9 @@ object.Mixin('AsyncGeneratorMixin', 'soft', {
|
|
|
490
519
|
map: makeGenerator('async', 'map'),
|
|
491
520
|
filter: makeGenerator('async', 'filter'),
|
|
492
521
|
reduce: makeGenerator('async', 'reduce'),
|
|
522
|
+
|
|
523
|
+
// XXX TEST...
|
|
524
|
+
between: makeGenerator('async', 'between'),
|
|
493
525
|
})
|
|
494
526
|
|
|
495
527
|
var AsyncGeneratorProtoMixin =
|
|
@@ -547,6 +579,21 @@ object.Mixin('AsyncGeneratorProtoMixin', 'soft', {
|
|
|
547
579
|
return [] })
|
|
548
580
|
return state },
|
|
549
581
|
|
|
582
|
+
// XXX BETWEEN...
|
|
583
|
+
between: async function*(func){
|
|
584
|
+
var i = 0
|
|
585
|
+
var j = 0
|
|
586
|
+
var prev
|
|
587
|
+
yield* this.iter(function(e){
|
|
588
|
+
return i++ > 0 ?
|
|
589
|
+
[
|
|
590
|
+
typeof(func) == 'function' ?
|
|
591
|
+
func.call(this, [prev, e], i, i + j++, this)
|
|
592
|
+
: func,
|
|
593
|
+
e,
|
|
594
|
+
]
|
|
595
|
+
: [e] }) },
|
|
596
|
+
|
|
550
597
|
// XXX TEST...
|
|
551
598
|
chain: async function*(...next){
|
|
552
599
|
yield* next
|