ig-types 6.25.1 → 6.25.3
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/Promise.js +65 -20
- package/generator.js +16 -0
- package/package.json +1 -1
- package/test.js +58 -9
package/Promise.js
CHANGED
|
@@ -117,11 +117,6 @@ module.packed =
|
|
|
117
117
|
&& Symbol.asyncIterator in list)){
|
|
118
118
|
return list
|
|
119
119
|
.then(this.pack.bind(this)) }
|
|
120
|
-
// list: generator...
|
|
121
|
-
if(typeof(list) == 'object'
|
|
122
|
-
&& !list.map
|
|
123
|
-
&& Symbol.iterator in list){
|
|
124
|
-
list = [...list] }
|
|
125
120
|
/* XXX on one hand this should be here and on the other I'm not
|
|
126
121
|
// sure how are we going to thread handler and onerror to
|
|
127
122
|
// here...
|
|
@@ -380,6 +375,11 @@ function(name){
|
|
|
380
375
|
return (await this)[name](...args) } }
|
|
381
376
|
|
|
382
377
|
|
|
378
|
+
// XXX if onerror(..) is triggered, does it write it's return value to
|
|
379
|
+
// .__packed and in what format???
|
|
380
|
+
// XXX should .__packed be undefined if something breaks???
|
|
381
|
+
// XXX revise how .__packed is handled by metods...
|
|
382
|
+
// XXX might be a good idea to use Symbols for .__value and .__packed...
|
|
383
383
|
var IterablePromise =
|
|
384
384
|
module.IterablePromise =
|
|
385
385
|
object.Constructor('IterablePromise', Promise, {
|
|
@@ -419,6 +419,17 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
419
419
|
// handle iterable promise...
|
|
420
420
|
if(list instanceof IterablePromise){
|
|
421
421
|
return this.__handle(list.__packed, handler, onerror) }
|
|
422
|
+
// list: generator...
|
|
423
|
+
if(typeof(list) == 'object'
|
|
424
|
+
// XXX this will cause a break later on...
|
|
425
|
+
//&& !list.map
|
|
426
|
+
&& Symbol.iterator in list){
|
|
427
|
+
try{
|
|
428
|
+
list = [...list]
|
|
429
|
+
} catch(err){
|
|
430
|
+
if(typeof(onerror) == 'function'){
|
|
431
|
+
return onerror(err) }
|
|
432
|
+
throw err } }
|
|
422
433
|
// handle promise / async-iterator...
|
|
423
434
|
if(typeof(list) == 'object'
|
|
424
435
|
&& Symbol.asyncIterator in list){
|
|
@@ -429,6 +440,7 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
429
440
|
|
|
430
441
|
// do the packing...
|
|
431
442
|
var packed = module.packed.pack(list)
|
|
443
|
+
|
|
432
444
|
// handle if needed...
|
|
433
445
|
return handler ?
|
|
434
446
|
this.__handle(packed, handler, onerror)
|
|
@@ -753,16 +765,28 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
753
765
|
: this.constructor(this.__packed, 'raw') },
|
|
754
766
|
|
|
755
767
|
// XXX EXPEREMENTAL
|
|
768
|
+
// XXX handle rejected state...
|
|
756
769
|
isSync: function(){
|
|
757
|
-
return
|
|
758
|
-
|| this.__packed
|
|
759
|
-
.
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
770
|
+
return '__value' in this
|
|
771
|
+
|| (this.__packed instanceof Array
|
|
772
|
+
&& !(this.__packed
|
|
773
|
+
.filter(function(e){
|
|
774
|
+
return e instanceof IterablePromise ?
|
|
775
|
+
!e.isSync()
|
|
776
|
+
: e instanceof Promise
|
|
777
|
+
&& !(e instanceof SyncPromise) })
|
|
778
|
+
.length > 0)) },
|
|
779
|
+
// XXX BUG: if sync is called before .__handle(..) is done it will
|
|
780
|
+
// do things that we do not want yet like unwinding generators
|
|
781
|
+
// etc...
|
|
765
782
|
sync: function(error=false){
|
|
783
|
+
if('__value' in this){
|
|
784
|
+
return this.__value }
|
|
785
|
+
if(!this.isSync()){
|
|
786
|
+
return error ?
|
|
787
|
+
this.catch(error)
|
|
788
|
+
: this }
|
|
789
|
+
// try and unpack...
|
|
766
790
|
try{
|
|
767
791
|
var res = this.__unpack()
|
|
768
792
|
}catch(err){
|
|
@@ -834,11 +858,26 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
834
858
|
|
|
835
859
|
// populate new instance...
|
|
836
860
|
if(promise){
|
|
861
|
+
// XXX EXPEREMENTAL...
|
|
862
|
+
obj.then(function(value){
|
|
863
|
+
Object.defineProperty(obj, '__value', {
|
|
864
|
+
value,
|
|
865
|
+
enumerable: false,
|
|
866
|
+
}) })
|
|
867
|
+
|
|
837
868
|
// handle onerror(..)
|
|
869
|
+
var error = false
|
|
838
870
|
var handleError = function(err){
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
871
|
+
error = true
|
|
872
|
+
if(onerror){
|
|
873
|
+
var res = onerror(err)
|
|
874
|
+
// XXX do we use .__pack(..) here???
|
|
875
|
+
//obj.__packed = undefined
|
|
876
|
+
// XXX this is wrong -- need to store the value as-is...
|
|
877
|
+
obj.__packed = [res]
|
|
878
|
+
promise.resolve(res)
|
|
879
|
+
} else {
|
|
880
|
+
promise.reject(err) } }
|
|
842
881
|
// handle/pack input data...
|
|
843
882
|
if(handler != 'raw'){
|
|
844
883
|
//list = list instanceof IterablePromise ?
|
|
@@ -852,6 +891,10 @@ object.Constructor('IterablePromise', Promise, {
|
|
|
852
891
|
writable: true,
|
|
853
892
|
})
|
|
854
893
|
|
|
894
|
+
// list generator broke...
|
|
895
|
+
if(error){
|
|
896
|
+
return obj }
|
|
897
|
+
|
|
855
898
|
// handle promise state...
|
|
856
899
|
try{
|
|
857
900
|
var res = obj.__unpack(list)
|
|
@@ -939,18 +982,20 @@ object.Constructor('IterableSequentialStartPromise', IterablePromise, {
|
|
|
939
982
|
res.push(e) }
|
|
940
983
|
return res }
|
|
941
984
|
|
|
942
|
-
// NOTE: we are not handling the list here...
|
|
943
|
-
|
|
985
|
+
// NOTE: we are not handling the list here yet...
|
|
986
|
+
// NOTE: if packing breaks but the error is handled this will return undefined...
|
|
987
|
+
list = object.parentCall(IterableSequentialStartPromise.prototype.__pack, this,
|
|
988
|
+
list, undefined, onerror)
|
|
944
989
|
list = list instanceof SyncPromise ?
|
|
945
990
|
list.sync()
|
|
946
991
|
: list
|
|
947
992
|
// repack...
|
|
948
993
|
list = list instanceof Array ?
|
|
949
994
|
repack(list)
|
|
950
|
-
: list.then ?
|
|
995
|
+
: list && list.then ?
|
|
951
996
|
list.then(repack)
|
|
952
997
|
: list
|
|
953
|
-
return handler ?
|
|
998
|
+
return list && handler ?
|
|
954
999
|
this.__handle(list, handler, onerror)
|
|
955
1000
|
: list },
|
|
956
1001
|
})
|
package/generator.js
CHANGED
|
@@ -236,6 +236,14 @@ object.Mixin('GeneratorMixin', 'soft', {
|
|
|
236
236
|
reduce: makeGenerator('reduce'),
|
|
237
237
|
reduceRight: makeGenerator('reduceRight'),
|
|
238
238
|
|
|
239
|
+
// XXX
|
|
240
|
+
smap: makeGenerator('smap'),
|
|
241
|
+
sfilter: makeGenerator('sfilter'),
|
|
242
|
+
sreduce: makeGenerator('sreduce'),
|
|
243
|
+
sreduceRight: makeGenerator('sreduceRight'),
|
|
244
|
+
sforEach: makeGenerator('sforEach'),
|
|
245
|
+
//*/
|
|
246
|
+
|
|
239
247
|
between: makeGenerator('between'),
|
|
240
248
|
|
|
241
249
|
// XXX EXPERIMENTAL
|
|
@@ -413,6 +421,8 @@ object.Mixin('GeneratorProtoMixin', 'soft', {
|
|
|
413
421
|
for(var e of this){
|
|
414
422
|
yield func(e, i++, this) } } },
|
|
415
423
|
__onstop),
|
|
424
|
+
smap: function*(func){
|
|
425
|
+
yield* this.map(...arguments) },
|
|
416
426
|
filter: stoppable(
|
|
417
427
|
function*(func){
|
|
418
428
|
var i = 0
|
|
@@ -428,6 +438,8 @@ object.Mixin('GeneratorProtoMixin', 'soft', {
|
|
|
428
438
|
err.value = e }
|
|
429
439
|
throw err } },
|
|
430
440
|
__onstop),
|
|
441
|
+
sfilter: function*(func){
|
|
442
|
+
yield* this.filter(...arguments) },
|
|
431
443
|
|
|
432
444
|
reduce: stoppable(
|
|
433
445
|
function(func, res){
|
|
@@ -439,6 +451,8 @@ object.Mixin('GeneratorProtoMixin', 'soft', {
|
|
|
439
451
|
// was passed a function from ever being treated as onstop(..)...
|
|
440
452
|
function(res, f, _, onstop){
|
|
441
453
|
return __onstop.call(this, res, onstop) }),
|
|
454
|
+
sreduce: function*(func, res){
|
|
455
|
+
yield* this.reduce(...arguments) },
|
|
442
456
|
greduce: function*(func, res){
|
|
443
457
|
yield this.reduce(...arguments) },
|
|
444
458
|
|
|
@@ -463,6 +477,8 @@ object.Mixin('GeneratorProtoMixin', 'soft', {
|
|
|
463
477
|
// XXX EXPERIMENTAL
|
|
464
478
|
forEach: function(func){
|
|
465
479
|
return [...this].map(func) },
|
|
480
|
+
sforEach: function(func){
|
|
481
|
+
return this.forEach(func) },
|
|
466
482
|
|
|
467
483
|
pop: function(){
|
|
468
484
|
return [...this].pop() },
|
package/package.json
CHANGED
package/test.js
CHANGED
|
@@ -304,7 +304,7 @@ var cases = test.Cases({
|
|
|
304
304
|
'promises as elements')
|
|
305
305
|
|
|
306
306
|
// XXX split this into separate cases...
|
|
307
|
-
for(var meth of ['iter', 'seqiter']){
|
|
307
|
+
for(var meth of ['iter', 'seqiter', 'seqstartiter']){
|
|
308
308
|
// XXX need a recursive assert...
|
|
309
309
|
var should_be = [ [1], [2], [3], [4], [5], [6] ]
|
|
310
310
|
var got = await Promise[meth]([
|
|
@@ -336,6 +336,12 @@ var cases = test.Cases({
|
|
|
336
336
|
await Promise[meth]([1, Promise.resolve(2), Promise.resolve(3)]),
|
|
337
337
|
[1,2,3],
|
|
338
338
|
'flat unpack', meth)
|
|
339
|
+
|
|
340
|
+
assert.array(
|
|
341
|
+
await Promise[meth](
|
|
342
|
+
(function*(){ yield* [1, Promise.resolve(2), Promise.resolve(3)] })()),
|
|
343
|
+
[1,2,3],
|
|
344
|
+
'generator input', meth)
|
|
339
345
|
}
|
|
340
346
|
|
|
341
347
|
var order = []
|
|
@@ -457,7 +463,8 @@ var cases = test.Cases({
|
|
|
457
463
|
// error...
|
|
458
464
|
for(var iter of ['iter', 'seqiter', 'seqstartiter']){
|
|
459
465
|
assert(
|
|
460
|
-
await Promise[iter](
|
|
466
|
+
await Promise[iter](
|
|
467
|
+
[1,2,Promise.resolve(3),4,5],
|
|
461
468
|
function(e){
|
|
462
469
|
if(e == 2){
|
|
463
470
|
throw 'ERROR' }
|
|
@@ -467,7 +474,8 @@ var cases = test.Cases({
|
|
|
467
474
|
== 'done',
|
|
468
475
|
`.${iter}(..): .catch(..)`)
|
|
469
476
|
assert(
|
|
470
|
-
await Promise[iter](
|
|
477
|
+
await Promise[iter](
|
|
478
|
+
[1,2,Promise.resolve(3),4,5],
|
|
471
479
|
function(e){
|
|
472
480
|
if(e == 2){
|
|
473
481
|
throw 'ERROR' }
|
|
@@ -477,7 +485,8 @@ var cases = test.Cases({
|
|
|
477
485
|
== 'done',
|
|
478
486
|
`.${iter}(..): onerror(..)`)
|
|
479
487
|
assert(
|
|
480
|
-
await Promise[iter](
|
|
488
|
+
await Promise[iter](
|
|
489
|
+
[1,2,Promise.resolve(3),4,5],
|
|
481
490
|
function(e){
|
|
482
491
|
if(e == 3){
|
|
483
492
|
throw 'ERROR' }
|
|
@@ -487,7 +496,8 @@ var cases = test.Cases({
|
|
|
487
496
|
== 'done',
|
|
488
497
|
`.${iter}(..): edge onerror(..)`)
|
|
489
498
|
assert(
|
|
490
|
-
await Promise[iter](
|
|
499
|
+
await Promise[iter](
|
|
500
|
+
[1,2,Promise.resolve(3),4,5],
|
|
491
501
|
function(e){
|
|
492
502
|
if(e == 4){
|
|
493
503
|
throw 'ERROR' }
|
|
@@ -499,17 +509,56 @@ var cases = test.Cases({
|
|
|
499
509
|
assert(
|
|
500
510
|
await Promise[iter](
|
|
501
511
|
(function*(){
|
|
502
|
-
yield* [1,2,3]
|
|
503
|
-
throw 'ERROR' })(),
|
|
512
|
+
yield* [1,2,3] })(),
|
|
504
513
|
function(e){
|
|
505
|
-
if(e ==
|
|
514
|
+
if(e == 2){
|
|
506
515
|
throw 'ERROR' }
|
|
507
516
|
return e },
|
|
508
517
|
function(err){
|
|
509
518
|
return 'done' })
|
|
510
519
|
== 'done',
|
|
511
|
-
`.${iter}(..):
|
|
520
|
+
`.${iter}(..): input generator, onerror(..) in handler`)
|
|
521
|
+
assert(
|
|
522
|
+
(pr = await Promise[iter](
|
|
523
|
+
(function*(){
|
|
524
|
+
yield* [1,2,3]
|
|
525
|
+
throw 'ERROR' })(),
|
|
526
|
+
function(e){
|
|
527
|
+
return e },
|
|
528
|
+
function(err){
|
|
529
|
+
return 'done' }))
|
|
530
|
+
== 'done',
|
|
531
|
+
`.${iter}(..): onerror(..) in input generator`, pr)
|
|
532
|
+
assert(
|
|
533
|
+
await (pr = Promise[iter](
|
|
534
|
+
(function*(){
|
|
535
|
+
yield* [1,2,3]
|
|
536
|
+
throw 'ERROR' })(),
|
|
537
|
+
function(e){
|
|
538
|
+
if(e == 4){
|
|
539
|
+
throw 'ERROR' }
|
|
540
|
+
return e },
|
|
541
|
+
function(err){
|
|
542
|
+
return 'done' })
|
|
543
|
+
.sync())
|
|
544
|
+
=== 'done',
|
|
545
|
+
`.${iter}(..): onerror(..) on input generator + .sync()`, pr)
|
|
546
|
+
assert(
|
|
547
|
+
await Promise.iter(
|
|
548
|
+
(function*(){
|
|
549
|
+
yield* [1,2,3]
|
|
550
|
+
throw 'ERROR' })(),
|
|
551
|
+
function(e){
|
|
552
|
+
return new Promise(function(ok, err){
|
|
553
|
+
if(e == 2){
|
|
554
|
+
err('moo!') }
|
|
555
|
+
ok(e) })},
|
|
556
|
+
function(err){
|
|
557
|
+
return 333 })
|
|
558
|
+
== 333,
|
|
559
|
+
`.${iter}(..): onerror(..) with promise handler`)
|
|
512
560
|
}
|
|
561
|
+
|
|
513
562
|
},
|
|
514
563
|
|
|
515
564
|
// Date.js
|