mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
* first action! (#1)
This commit is contained in:
parent
8deacc95b1
commit
ace1e6a69a
3750 changed files with 1155519 additions and 0 deletions
8
node_modules/pumpify/.travis.yml
generated
vendored
Normal file
8
node_modules/pumpify/.travis.yml
generated
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
language: node_js
|
||||
|
||||
node_js:
|
||||
- "0.10"
|
||||
- "4"
|
||||
- "5"
|
||||
|
||||
sudo: false
|
21
node_modules/pumpify/LICENSE
generated
vendored
Normal file
21
node_modules/pumpify/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Mathias Buus
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
56
node_modules/pumpify/README.md
generated
vendored
Normal file
56
node_modules/pumpify/README.md
generated
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
# pumpify
|
||||
|
||||
Combine an array of streams into a single duplex stream using [pump](https://github.com/mafintosh/pump) and [duplexify](https://github.com/mafintosh/duplexify).
|
||||
If one of the streams closes/errors all streams in the pipeline will be destroyed.
|
||||
|
||||
```
|
||||
npm install pumpify
|
||||
```
|
||||
|
||||
[](http://travis-ci.org/mafintosh/pumpify)
|
||||
|
||||
## Usage
|
||||
|
||||
Pass the streams you want to pipe together to pumpify `pipeline = pumpify(s1, s2, s3, ...)`.
|
||||
`pipeline` is a duplex stream that writes to the first streams and reads from the last one.
|
||||
Streams are piped together using [pump](https://github.com/mafintosh/pump) so if one of them closes
|
||||
all streams will be destroyed.
|
||||
|
||||
``` js
|
||||
var pumpify = require('pumpify')
|
||||
var tar = require('tar-fs')
|
||||
var zlib = require('zlib')
|
||||
var fs = require('fs')
|
||||
|
||||
var untar = pumpify(zlib.createGunzip(), tar.extract('output-folder'))
|
||||
// you can also pass an array instead
|
||||
// var untar = pumpify([zlib.createGunzip(), tar.extract('output-folder')])
|
||||
|
||||
fs.createReadStream('some-gzipped-tarball.tgz').pipe(untar)
|
||||
```
|
||||
|
||||
If you are pumping object streams together use `pipeline = pumpify.obj(s1, s2, ...)`.
|
||||
Call `pipeline.destroy()` to destroy the pipeline (including the streams passed to pumpify).
|
||||
|
||||
### Using `setPipeline(s1, s2, ...)`
|
||||
|
||||
Similar to [duplexify](https://github.com/mafintosh/duplexify) you can also define the pipeline asynchronously using `setPipeline(s1, s2, ...)`
|
||||
|
||||
``` js
|
||||
var untar = pumpify()
|
||||
|
||||
setTimeout(function() {
|
||||
// will start draining the input now
|
||||
untar.setPipeline(zlib.createGunzip(), tar.extract('output-folder'))
|
||||
}, 1000)
|
||||
|
||||
fs.createReadStream('some-gzipped-tarball.tgz').pipe(untar)
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Related
|
||||
|
||||
`pumpify` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
|
60
node_modules/pumpify/index.js
generated
vendored
Normal file
60
node_modules/pumpify/index.js
generated
vendored
Normal file
|
@ -0,0 +1,60 @@
|
|||
var pump = require('pump')
|
||||
var inherits = require('inherits')
|
||||
var Duplexify = require('duplexify')
|
||||
|
||||
var toArray = function(args) {
|
||||
if (!args.length) return []
|
||||
return Array.isArray(args[0]) ? args[0] : Array.prototype.slice.call(args)
|
||||
}
|
||||
|
||||
var define = function(opts) {
|
||||
var Pumpify = function() {
|
||||
var streams = toArray(arguments)
|
||||
if (!(this instanceof Pumpify)) return new Pumpify(streams)
|
||||
Duplexify.call(this, null, null, opts)
|
||||
if (streams.length) this.setPipeline(streams)
|
||||
}
|
||||
|
||||
inherits(Pumpify, Duplexify)
|
||||
|
||||
Pumpify.prototype.setPipeline = function() {
|
||||
var streams = toArray(arguments)
|
||||
var self = this
|
||||
var ended = false
|
||||
var w = streams[0]
|
||||
var r = streams[streams.length-1]
|
||||
|
||||
r = r.readable ? r : null
|
||||
w = w.writable ? w : null
|
||||
|
||||
var onclose = function() {
|
||||
streams[0].emit('error', new Error('stream was destroyed'))
|
||||
}
|
||||
|
||||
this.on('close', onclose)
|
||||
this.on('prefinish', function() {
|
||||
if (!ended) self.cork()
|
||||
})
|
||||
|
||||
pump(streams, function(err) {
|
||||
self.removeListener('close', onclose)
|
||||
if (err) return self.destroy(err.message === 'premature close' ? null : err)
|
||||
ended = true
|
||||
// pump ends after the last stream is not writable *but*
|
||||
// pumpify still forwards the readable part so we need to catch errors
|
||||
// still, so reenable autoDestroy in this case
|
||||
if (self._autoDestroy === false) self._autoDestroy = true
|
||||
self.uncork()
|
||||
})
|
||||
|
||||
if (this.destroyed) return onclose()
|
||||
this.setWritable(w)
|
||||
this.setReadable(r)
|
||||
}
|
||||
|
||||
return Pumpify
|
||||
}
|
||||
|
||||
module.exports = define({autoDestroy:false, destroy:false})
|
||||
module.exports.obj = define({autoDestroy: false, destroy:false, objectMode:true, highWaterMark:16})
|
||||
module.exports.ctor = define
|
5
node_modules/pumpify/node_modules/pump/.travis.yml
generated
vendored
Normal file
5
node_modules/pumpify/node_modules/pump/.travis.yml
generated
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
|
||||
script: "npm test"
|
21
node_modules/pumpify/node_modules/pump/LICENSE
generated
vendored
Normal file
21
node_modules/pumpify/node_modules/pump/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Mathias Buus
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
56
node_modules/pumpify/node_modules/pump/README.md
generated
vendored
Normal file
56
node_modules/pumpify/node_modules/pump/README.md
generated
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
# pump
|
||||
|
||||
pump is a small node module that pipes streams together and destroys all of them if one of them closes.
|
||||
|
||||
```
|
||||
npm install pump
|
||||
```
|
||||
|
||||
[](http://travis-ci.org/mafintosh/pump)
|
||||
|
||||
## What problem does it solve?
|
||||
|
||||
When using standard `source.pipe(dest)` source will _not_ be destroyed if dest emits close or an error.
|
||||
You are also not able to provide a callback to tell when then pipe has finished.
|
||||
|
||||
pump does these two things for you
|
||||
|
||||
## Usage
|
||||
|
||||
Simply pass the streams you want to pipe together to pump and add an optional callback
|
||||
|
||||
``` js
|
||||
var pump = require('pump')
|
||||
var fs = require('fs')
|
||||
|
||||
var source = fs.createReadStream('/dev/random')
|
||||
var dest = fs.createWriteStream('/dev/null')
|
||||
|
||||
pump(source, dest, function(err) {
|
||||
console.log('pipe finished', err)
|
||||
})
|
||||
|
||||
setTimeout(function() {
|
||||
dest.destroy() // when dest is closed pump will destroy source
|
||||
}, 1000)
|
||||
```
|
||||
|
||||
You can use pump to pipe more than two streams together as well
|
||||
|
||||
``` js
|
||||
var transform = someTransformStream()
|
||||
|
||||
pump(source, transform, anotherTransform, dest, function(err) {
|
||||
console.log('pipe finished', err)
|
||||
})
|
||||
```
|
||||
|
||||
If `source`, `transform`, `anotherTransform` or `dest` closes all of them will be destroyed.
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Related
|
||||
|
||||
`pump` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
|
82
node_modules/pumpify/node_modules/pump/index.js
generated
vendored
Normal file
82
node_modules/pumpify/node_modules/pump/index.js
generated
vendored
Normal file
|
@ -0,0 +1,82 @@
|
|||
var once = require('once')
|
||||
var eos = require('end-of-stream')
|
||||
var fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes
|
||||
|
||||
var noop = function () {}
|
||||
var ancient = /^v?\.0/.test(process.version)
|
||||
|
||||
var isFn = function (fn) {
|
||||
return typeof fn === 'function'
|
||||
}
|
||||
|
||||
var isFS = function (stream) {
|
||||
if (!ancient) return false // newer node version do not need to care about fs is a special way
|
||||
if (!fs) return false // browser
|
||||
return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
|
||||
}
|
||||
|
||||
var isRequest = function (stream) {
|
||||
return stream.setHeader && isFn(stream.abort)
|
||||
}
|
||||
|
||||
var destroyer = function (stream, reading, writing, callback) {
|
||||
callback = once(callback)
|
||||
|
||||
var closed = false
|
||||
stream.on('close', function () {
|
||||
closed = true
|
||||
})
|
||||
|
||||
eos(stream, {readable: reading, writable: writing}, function (err) {
|
||||
if (err) return callback(err)
|
||||
closed = true
|
||||
callback()
|
||||
})
|
||||
|
||||
var destroyed = false
|
||||
return function (err) {
|
||||
if (closed) return
|
||||
if (destroyed) return
|
||||
destroyed = true
|
||||
|
||||
if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
|
||||
if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
|
||||
|
||||
if (isFn(stream.destroy)) return stream.destroy()
|
||||
|
||||
callback(err || new Error('stream was destroyed'))
|
||||
}
|
||||
}
|
||||
|
||||
var call = function (fn) {
|
||||
fn()
|
||||
}
|
||||
|
||||
var pipe = function (from, to) {
|
||||
return from.pipe(to)
|
||||
}
|
||||
|
||||
var pump = function () {
|
||||
var streams = Array.prototype.slice.call(arguments)
|
||||
var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
|
||||
|
||||
if (Array.isArray(streams[0])) streams = streams[0]
|
||||
if (streams.length < 2) throw new Error('pump requires two streams per minimum')
|
||||
|
||||
var error
|
||||
var destroys = streams.map(function (stream, i) {
|
||||
var reading = i < streams.length - 1
|
||||
var writing = i > 0
|
||||
return destroyer(stream, reading, writing, function (err) {
|
||||
if (!error) error = err
|
||||
if (err) destroys.forEach(call)
|
||||
if (reading) return
|
||||
destroys.forEach(call)
|
||||
callback(error)
|
||||
})
|
||||
})
|
||||
|
||||
streams.reduce(pipe)
|
||||
}
|
||||
|
||||
module.exports = pump
|
59
node_modules/pumpify/node_modules/pump/package.json
generated
vendored
Normal file
59
node_modules/pumpify/node_modules/pump/package.json
generated
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"_from": "pump@^2.0.0",
|
||||
"_id": "pump@2.0.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
|
||||
"_location": "/pumpify/pump",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "pump@^2.0.0",
|
||||
"name": "pump",
|
||||
"escapedName": "pump",
|
||||
"rawSpec": "^2.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^2.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/pumpify"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
|
||||
"_shasum": "12399add6e4cf7526d973cbc8b5ce2e2908b3909",
|
||||
"_spec": "pump@^2.0.0",
|
||||
"_where": "/home/shimataro/projects/actions/ssh-key-action/node_modules/pumpify",
|
||||
"author": {
|
||||
"name": "Mathias Buus Madsen",
|
||||
"email": "mathiasbuus@gmail.com"
|
||||
},
|
||||
"browser": {
|
||||
"fs": false
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/mafintosh/pump/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"end-of-stream": "^1.1.0",
|
||||
"once": "^1.3.1"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "pipe streams together and close all of them if one of them closes",
|
||||
"homepage": "https://github.com/mafintosh/pump#readme",
|
||||
"keywords": [
|
||||
"streams",
|
||||
"pipe",
|
||||
"destroy",
|
||||
"callback"
|
||||
],
|
||||
"license": "MIT",
|
||||
"name": "pump",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/mafintosh/pump.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node test-browser.js && node test-node.js"
|
||||
},
|
||||
"version": "2.0.1"
|
||||
}
|
62
node_modules/pumpify/node_modules/pump/test-browser.js
generated
vendored
Normal file
62
node_modules/pumpify/node_modules/pump/test-browser.js
generated
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
var stream = require('stream')
|
||||
var pump = require('./index')
|
||||
|
||||
var rs = new stream.Readable()
|
||||
var ws = new stream.Writable()
|
||||
|
||||
rs._read = function (size) {
|
||||
this.push(Buffer(size).fill('abc'))
|
||||
}
|
||||
|
||||
ws._write = function (chunk, encoding, cb) {
|
||||
setTimeout(function () {
|
||||
cb()
|
||||
}, 100)
|
||||
}
|
||||
|
||||
var toHex = function () {
|
||||
var reverse = new (require('stream').Transform)()
|
||||
|
||||
reverse._transform = function (chunk, enc, callback) {
|
||||
reverse.push(chunk.toString('hex'))
|
||||
callback()
|
||||
}
|
||||
|
||||
return reverse
|
||||
}
|
||||
|
||||
var wsClosed = false
|
||||
var rsClosed = false
|
||||
var callbackCalled = false
|
||||
|
||||
var check = function () {
|
||||
if (wsClosed && rsClosed && callbackCalled) {
|
||||
console.log('test-browser.js passes')
|
||||
clearTimeout(timeout)
|
||||
}
|
||||
}
|
||||
|
||||
ws.on('finish', function () {
|
||||
wsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
rs.on('end', function () {
|
||||
rsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
pump(rs, toHex(), toHex(), toHex(), ws, function () {
|
||||
callbackCalled = true
|
||||
check()
|
||||
})
|
||||
|
||||
setTimeout(function () {
|
||||
rs.push(null)
|
||||
rs.emit('close')
|
||||
}, 1000)
|
||||
|
||||
var timeout = setTimeout(function () {
|
||||
check()
|
||||
throw new Error('timeout')
|
||||
}, 5000)
|
53
node_modules/pumpify/node_modules/pump/test-node.js
generated
vendored
Normal file
53
node_modules/pumpify/node_modules/pump/test-node.js
generated
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
var pump = require('./index')
|
||||
|
||||
var rs = require('fs').createReadStream('/dev/random')
|
||||
var ws = require('fs').createWriteStream('/dev/null')
|
||||
|
||||
var toHex = function () {
|
||||
var reverse = new (require('stream').Transform)()
|
||||
|
||||
reverse._transform = function (chunk, enc, callback) {
|
||||
reverse.push(chunk.toString('hex'))
|
||||
callback()
|
||||
}
|
||||
|
||||
return reverse
|
||||
}
|
||||
|
||||
var wsClosed = false
|
||||
var rsClosed = false
|
||||
var callbackCalled = false
|
||||
|
||||
var check = function () {
|
||||
if (wsClosed && rsClosed && callbackCalled) {
|
||||
console.log('test-node.js passes')
|
||||
clearTimeout(timeout)
|
||||
}
|
||||
}
|
||||
|
||||
ws.on('close', function () {
|
||||
wsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
rs.on('close', function () {
|
||||
rsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
|
||||
callbackCalled = true
|
||||
check()
|
||||
})
|
||||
|
||||
if (res) {
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
rs.destroy()
|
||||
}, 1000)
|
||||
|
||||
var timeout = setTimeout(function () {
|
||||
throw new Error('timeout')
|
||||
}, 5000)
|
67
node_modules/pumpify/package.json
generated
vendored
Normal file
67
node_modules/pumpify/package.json
generated
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"_from": "pumpify@^1.3.3",
|
||||
"_id": "pumpify@1.5.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
|
||||
"_location": "/pumpify",
|
||||
"_phantomChildren": {
|
||||
"end-of-stream": "1.4.1",
|
||||
"once": "1.4.0"
|
||||
},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "pumpify@^1.3.3",
|
||||
"name": "pumpify",
|
||||
"escapedName": "pumpify",
|
||||
"rawSpec": "^1.3.3",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^1.3.3"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/mississippi"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
|
||||
"_shasum": "36513be246ab27570b1a374a5ce278bfd74370ce",
|
||||
"_spec": "pumpify@^1.3.3",
|
||||
"_where": "/home/shimataro/projects/actions/ssh-key-action/node_modules/mississippi",
|
||||
"author": {
|
||||
"name": "Mathias Buus"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/mafintosh/pumpify/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"dependencies": {
|
||||
"duplexify": "^3.6.0",
|
||||
"inherits": "^2.0.3",
|
||||
"pump": "^2.0.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Combine an array of streams into a single duplex stream using pump and duplexify",
|
||||
"devDependencies": {
|
||||
"tape": "^4.8.0",
|
||||
"through2": "^2.0.3"
|
||||
},
|
||||
"homepage": "https://github.com/mafintosh/pumpify",
|
||||
"keywords": [
|
||||
"pump",
|
||||
"duplexify",
|
||||
"duplex",
|
||||
"streams",
|
||||
"stream",
|
||||
"pipeline",
|
||||
"combine"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "pumpify",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/mafintosh/pumpify.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "tape test.js"
|
||||
},
|
||||
"version": "1.5.1"
|
||||
}
|
235
node_modules/pumpify/test.js
generated
vendored
Normal file
235
node_modules/pumpify/test.js
generated
vendored
Normal file
|
@ -0,0 +1,235 @@
|
|||
var tape = require('tape')
|
||||
var through = require('through2')
|
||||
var pumpify = require('./')
|
||||
var stream = require('stream')
|
||||
var duplexify = require('duplexify')
|
||||
|
||||
tape('basic', function(t) {
|
||||
t.plan(3)
|
||||
|
||||
var pipeline = pumpify(
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'hello')
|
||||
cb(null, data.toString().toUpperCase())
|
||||
}),
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'HELLO')
|
||||
cb(null, data.toString().toLowerCase())
|
||||
})
|
||||
)
|
||||
|
||||
pipeline.write('hello')
|
||||
pipeline.on('data', function(data) {
|
||||
t.same(data.toString(), 'hello')
|
||||
t.end()
|
||||
})
|
||||
})
|
||||
|
||||
tape('3 times', function(t) {
|
||||
t.plan(4)
|
||||
|
||||
var pipeline = pumpify(
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'hello')
|
||||
cb(null, data.toString().toUpperCase())
|
||||
}),
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'HELLO')
|
||||
cb(null, data.toString().toLowerCase())
|
||||
}),
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'hello')
|
||||
cb(null, data.toString().toUpperCase())
|
||||
})
|
||||
)
|
||||
|
||||
pipeline.write('hello')
|
||||
pipeline.on('data', function(data) {
|
||||
t.same(data.toString(), 'HELLO')
|
||||
t.end()
|
||||
})
|
||||
})
|
||||
|
||||
tape('destroy', function(t) {
|
||||
var test = through()
|
||||
test.destroy = function() {
|
||||
t.ok(true)
|
||||
t.end()
|
||||
}
|
||||
|
||||
var pipeline = pumpify(through(), test)
|
||||
|
||||
pipeline.destroy()
|
||||
})
|
||||
|
||||
tape('close', function(t) {
|
||||
var test = through()
|
||||
var pipeline = pumpify(through(), test)
|
||||
|
||||
pipeline.on('error', function(err) {
|
||||
t.same(err.message, 'lol')
|
||||
t.end()
|
||||
})
|
||||
|
||||
test.emit('error', new Error('lol'))
|
||||
})
|
||||
|
||||
tape('end waits for last one', function(t) {
|
||||
var ran = false
|
||||
|
||||
var a = through()
|
||||
var b = through()
|
||||
var c = through(function(data, enc, cb) {
|
||||
setTimeout(function() {
|
||||
ran = true
|
||||
cb()
|
||||
}, 100)
|
||||
})
|
||||
|
||||
var pipeline = pumpify(a, b, c)
|
||||
|
||||
pipeline.write('foo')
|
||||
pipeline.end(function() {
|
||||
t.ok(ran)
|
||||
t.end()
|
||||
})
|
||||
|
||||
t.ok(!ran)
|
||||
})
|
||||
|
||||
tape('always wait for finish', function(t) {
|
||||
var a = new stream.Readable()
|
||||
a._read = function() {}
|
||||
a.push('hello')
|
||||
|
||||
var pipeline = pumpify(a, through(), through())
|
||||
var ran = false
|
||||
|
||||
pipeline.on('finish', function() {
|
||||
t.ok(ran)
|
||||
t.end()
|
||||
})
|
||||
|
||||
setTimeout(function() {
|
||||
ran = true
|
||||
a.push(null)
|
||||
}, 100)
|
||||
})
|
||||
|
||||
tape('async', function(t) {
|
||||
var pipeline = pumpify()
|
||||
|
||||
t.plan(4)
|
||||
|
||||
pipeline.write('hello')
|
||||
pipeline.on('data', function(data) {
|
||||
t.same(data.toString(), 'HELLO')
|
||||
t.end()
|
||||
})
|
||||
|
||||
setTimeout(function() {
|
||||
pipeline.setPipeline(
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'hello')
|
||||
cb(null, data.toString().toUpperCase())
|
||||
}),
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'HELLO')
|
||||
cb(null, data.toString().toLowerCase())
|
||||
}),
|
||||
through(function(data, enc, cb) {
|
||||
t.same(data.toString(), 'hello')
|
||||
cb(null, data.toString().toUpperCase())
|
||||
})
|
||||
)
|
||||
}, 100)
|
||||
})
|
||||
|
||||
tape('early destroy', function(t) {
|
||||
var a = through()
|
||||
var b = through()
|
||||
var c = through()
|
||||
|
||||
b.destroy = function() {
|
||||
t.ok(true)
|
||||
t.end()
|
||||
}
|
||||
|
||||
var pipeline = pumpify()
|
||||
|
||||
pipeline.destroy()
|
||||
setTimeout(function() {
|
||||
pipeline.setPipeline(a, b, c)
|
||||
}, 100)
|
||||
})
|
||||
|
||||
tape('preserves error', function (t) {
|
||||
var a = through()
|
||||
var b = through(function (data, enc, cb) {
|
||||
cb(new Error('stop'))
|
||||
})
|
||||
var c = through()
|
||||
var s = pumpify()
|
||||
|
||||
s.on('error', function (err) {
|
||||
t.same(err.message, 'stop')
|
||||
t.end()
|
||||
})
|
||||
|
||||
s.setPipeline(a, b, c)
|
||||
s.resume()
|
||||
s.write('hi')
|
||||
})
|
||||
|
||||
tape('preserves error again', function (t) {
|
||||
var ws = new stream.Writable()
|
||||
var rs = new stream.Readable({highWaterMark: 16})
|
||||
|
||||
ws._write = function (data, enc, cb) {
|
||||
cb(null)
|
||||
}
|
||||
|
||||
rs._read = function () {
|
||||
process.nextTick(function () {
|
||||
rs.push('hello world')
|
||||
})
|
||||
}
|
||||
|
||||
var pumpifyErr = pumpify(
|
||||
through(),
|
||||
through(function(chunk, _, cb) {
|
||||
cb(new Error('test'))
|
||||
}),
|
||||
ws
|
||||
)
|
||||
|
||||
rs.pipe(pumpifyErr)
|
||||
.on('error', function (err) {
|
||||
t.ok(err)
|
||||
t.ok(err.message !== 'premature close', 'does not close with premature close')
|
||||
t.end()
|
||||
})
|
||||
})
|
||||
|
||||
tape('returns error from duplexify', function (t) {
|
||||
var a = through()
|
||||
var b = duplexify()
|
||||
var s = pumpify()
|
||||
|
||||
s.setPipeline(a, b)
|
||||
|
||||
s.on('error', function (err) {
|
||||
t.same(err.message, 'stop')
|
||||
t.end()
|
||||
})
|
||||
|
||||
s.write('data')
|
||||
// Test passes if `.end()` is not called
|
||||
s.end()
|
||||
|
||||
b.setWritable(through())
|
||||
|
||||
setImmediate(function () {
|
||||
b.destroy(new Error('stop'))
|
||||
})
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue