UNPKG

stream-url

Version:
59 lines (51 loc) 1.71 kB
"use strict"; var url = require('url'); const adaptors = Object.create(null); // returns some "handler object" that has .close() method // and emits 'connection' event function listen (stream_url, options, callback) { if (options && options.constructor===Function) { callback = options; options = undefined; } var u = url.parse(stream_url.toString()); var proto = u.protocol.substr(0, u.protocol.length-1); var adaptor = adaptors[proto]; if (!adaptor) { throw new Error('protocol unknown: '+u.protocol); } return adaptor.listen(u, options, callback); } // returns a stream, either immediately or through the callback function connect (stream_url, options, callback) { if (options && options.constructor===Function) { callback = options; options = undefined; } var u = stream_url.constructor===url.Url ? stream_url : url.parse(stream_url.toString()); if (!u || !u.protocol) throw new Error('invalid URL: ' + stream_url); var proto = u.protocol.substr(0, u.protocol.length-1); var adaptor = adaptors[proto]; if (!adaptor) { throw new Error('protocol unknown: '+u.protocol); } return adaptor.connect(u, options, callback); } function register (protocol, listen_handler, connect_handler) { adaptors[protocol] = { protocol: protocol, listen: listen_handler, connect: connect_handler }; } adaptors['0'] = require('./src/zero.js'); adaptors.tcp = require('./src/tcp.js'); adaptors.std = require('./src/std.js'); adaptors.file = require('./src/file.js'); module.exports = { listen: listen, connect: connect, _adaptors: adaptors };