Blame view

node_modules/asynckit/lib/readable_asynckit.js 1.57 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  var streamify = require('./streamify.js')
    , defer     = require('./defer.js')
    ;
  
  // API
  module.exports = ReadableAsyncKit;
  
  /**
   * Base constructor for all streams
   * used to hold properties/methods
   */
  function ReadableAsyncKit()
  {
    ReadableAsyncKit.super_.apply(this, arguments);
  
    // list of active jobs
    this.jobs = {};
  
    // add stream methods
    this.destroy = destroy;
    this._start  = _start;
    this._read   = _read;
  }
  
  /**
   * Destroys readable stream,
   * by aborting outstanding jobs
   *
   * @returns {void}
   */
  function destroy()
  {
    if (this.destroyed)
    {
      return;
    }
  
    this.destroyed = true;
  
    if (typeof this.terminator == 'function')
    {
      this.terminator();
    }
  }
  
  /**
   * Starts provided jobs in async manner
   *
   * @private
   */
  function _start()
  {
    // first argument – runner function
    var runner = arguments[0]
      // take away first argument
      , args   = Array.prototype.slice.call(arguments, 1)
        // second argument - input data
      , input  = args[0]
        // last argument - result callback
      , endCb  = streamify.callback.call(this, args[args.length - 1])
      ;
  
    args[args.length - 1] = endCb;
    // third argument - iterator
    args[1] = streamify.iterator.call(this, args[1]);
  
    // allow time for proper setup
    defer(function()
    {
      if (!this.destroyed)
      {
        this.terminator = runner.apply(null, args);
      }
      else
      {
        endCb(null, Array.isArray(input) ? [] : {});
      }
    }.bind(this));
  }
  
  
  /**
   * Implement _read to comply with Readable streams
   * Doesn't really make sense for flowing object mode
   *
   * @private
   */
  function _read()
  {
  
  }