-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
83 lines (77 loc) · 2.4 KB
/
index.js
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
/*!
* value2stream <https://github.com/hybridables/value2stream>
*
* Copyright (c) 2016 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk)
* Released under the MIT license.
*/
'use strict'
var isPromise = require('is-promise')
var NativePromise = require('native-promise')
var promise2stream = require('promise2stream')
/**
* > Create a stream from any value.
*
* **Example**
*
* ```js
* var toStream = require('value2promise')
*
* toStream(123).on('data', function (val) {
* console.log(val) // => 123
* })
* toStream('str foo').on('data', function (val) {
* console.log(val) // => 'str foo'
* })
*
* // not throws if `opts.objectMode: true` (default)
* toStream({ foo: 'bar' }).on('data', function (val) {
* console.log(val) // => { foo: 'bar' }
* })
*
* // throws when non-object mode
* toStream({ foo: 'bar' }, { objectMode: false })
* .once('error', function (err) {
* console.log(err instanceof Error) // => true
* console.log(err) // => [Error: Invalid non-string/buffer chunk]
* })
*
* // same applies if non-object and promise resolves object
* var fails = Promise.resolve({ a: 'b' })
* toStream(fails, { objectMode: false })
* .once('error', function (err) {
* console.log(err instanceof Error) // => true
* console.log(err) // => [Error: Invalid non-string/buffer chunk]
* })
*
* var promise = Promise.resolve('foo bar')
* toStream(promise).on('data', function (val) {
* console.log(val) // => 'foo bar'
* })
*
* var rejected = Promise.reject(new Error('err msg'))
* toStream(rejected).once('error', function (err) {
* console.log(err instanceof Error) // => true
* console.log(err.message) // => 'err msg'
* })
* ```
*
* @param {Mixed} `val` Any type of value except function. Use [callback2stream][] for functions.
* @param {Object|Function=} `[opts]` Directly passed to [promise2stream][] and [through2][], otherwise Promise contstructor.
* @param {Function} `[Promize]` Promise constructor to be used when no support for native Promise.
* @return {Stream}
* @api public
*/
module.exports = function value2stream (val, opts, Promize) {
if (typeof opts === 'function') {
Promize = opts
opts = {}
}
if (isPromise(val)) {
return promise2stream(val, opts)
}
Promize = NativePromise || Promize
var promise = new Promize(function (resolve) {
resolve(val)
})
return promise2stream(promise, opts)
}