ig-types 6.24.12 → 6.24.13

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.
Files changed (3) hide show
  1. package/Promise.js +29 -13
  2. package/package.json +1 -1
  3. package/test.js +26 -0
package/Promise.js CHANGED
@@ -306,6 +306,18 @@ object.Constructor('IterablePromise', Promise, {
306
306
  : list },
307
307
  // transform/handle packed array (sync, but can return promises in the list)...
308
308
  // XXX need a strict spec...
309
+ // XXX BUG???
310
+ // await Promise.iter([
311
+ // Promise.sync.resolve([1,1,1]),
312
+ // [2,2,2],
313
+ // Promise.resolve([3,3,3]),
314
+ // Promise.iter([4,4,4]),
315
+ // Promise.all([5,5,5]),
316
+ // ],
317
+ // e => e instanceof Array ? [[1,2,3]] : e)
318
+ // -> [ 1, 2, 3, [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ], [ 1, 2, 3 ] ]
319
+ // ...the fist result seems odd...
320
+ // XXX FIXED but need to add a test for IterablePromise branch below...
309
321
  __handle: function(list, handler=undefined, onerror=undefined){
310
322
  var that = this
311
323
  if(typeof(list) == 'function'){
@@ -325,38 +337,42 @@ object.Constructor('IterablePromise', Promise, {
325
337
  'smap'
326
338
  : 'map'
327
339
  var stop = false
340
+ var unwrap = function(elem){
341
+ return elem.length == 1 ?
342
+ elem[0]
343
+ : elem }
328
344
  return list
329
345
  [map](
330
346
  function(elem){
331
347
  return elem instanceof IterablePromise ?
332
- // XXX should this be expanded??? (like Array below)
348
+ // XXX should elem be expanded??? (like Array below)
333
349
  (elem.isSync() ?
334
350
  handler(elem.sync())
335
351
  // XXX need to handle this but keep it IterablePromise...
336
352
  : elem.iterthen(handler))
353
+ // sync sync promise...
337
354
  : (elem instanceof SyncPromise
338
355
  && !(elem.sync() instanceof Promise)) ?
339
- // XXX should this be expanded??? (like Array below)
340
- handler(elem.sync())
356
+ [handler(unwrap(elem.sync()))]
341
357
  // promise / promise-like...
342
358
  : elem && elem.then ?
343
359
  // NOTE: when this is explicitly stopped we
344
- // do not call any more handlers...
360
+ // do not call any more handlers after
361
+ // STOP is thrown/returned...
345
362
  // XXX TEST!!!
346
363
  elem.then(function(elem){
347
364
  return !stop ?
348
- handler(
349
- elem.length == 1 ?
350
- elem[0]
351
- :elem)
365
+ handler(unwrap(elem))
352
366
  : [] })
353
367
  : elem instanceof Array ?
354
- [handler(
355
- elem.length == 1 ?
356
- elem[0]
357
- : elem)]
368
+ // NOTE: we are calling .flat() on the result
369
+ // so we need to keep a handled array as
370
+ // a single element by wrapping the return
371
+ // of handled(..)...
372
+ [handler(unwrap(elem))]
358
373
  : handler(elem) },
359
- function(res){
374
+ // handle STOP...
375
+ function(){
360
376
  stop = true })
361
377
  .flat() },
362
378
  //*/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ig-types",
3
- "version": "6.24.12",
3
+ "version": "6.24.13",
4
4
  "description": "Generic JavaScript types and type extensions...",
5
5
  "main": "main.js",
6
6
  "scripts": {
package/test.js CHANGED
@@ -265,6 +265,32 @@ var cases = test.Cases({
265
265
  await Promise.iter([1, Promise.resolve(2), 3]),
266
266
  [1, 2, 3],
267
267
  'promises as elements')
268
+
269
+ // XXX need a recursive assert...
270
+ var should_be = [ [1], [2], [3], [4], [5] ]
271
+ var got = await Promise.iter([
272
+ [1,1,1],
273
+ Promise.sync.resolve([2,2,2]),
274
+ Promise.resolve([3,3,3]),
275
+ Promise.iter([4,4,4]),
276
+ Promise.all([5,5,5]),
277
+ ],
278
+ function(e){
279
+ return e instanceof Array ?
280
+ [[ e[0] ]]
281
+ // XXX
282
+ : e })
283
+ assert(
284
+ should_be
285
+ .reduce(function(res, e, i){
286
+ //console.log('---', e, got[i])
287
+ if(res === false){
288
+ return false }
289
+ return e instanceof Array
290
+ && got[i] instanceof Array
291
+ && e.length == got[i].length
292
+ && e[0] == got[i][0] }, true),
293
+ 'pack/unpack')
268
294
  },
269
295
 
270
296
  // Date.js