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 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 !(this.__packed instanceof Promise
758
- || this.__packed
759
- .filter(function(e){
760
- return e instanceof IterablePromise ?
761
- !e.isSync()
762
- : e instanceof Promise
763
- && !(e instanceof SyncPromise) })
764
- .length > 0) },
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
- onerror ?
840
- promise.resolve(onerror(err))
841
- : promise.reject(err) }
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
- list = object.parentCall(IterableSequentialStartPromise.prototype.__pack, this, list)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ig-types",
3
- "version": "6.25.1",
3
+ "version": "6.25.3",
4
4
  "description": "Generic JavaScript types and type extensions...",
5
5
  "main": "main.js",
6
6
  "scripts": {
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]([1,2,Promise.resolve(3),4,5],
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]([1,2,Promise.resolve(3),4,5],
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]([1,2,Promise.resolve(3),4,5],
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]([1,2,Promise.resolve(3),4,5],
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 == 4){
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}(..): late onerror(..)`)
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