const npm = {
    read: require('./read')
};

/**
 * @namespace stream
 * @description
 * Namespace with methods that implement stream operations, and {@link stream.read read} is the only method currently supported.
 *
 * **Synchronous Stream Processing**
 *
 * ```js
 * const stream = require('spex')(Promise).stream;
 * const fs = require('fs');
 *
 * const rs = fs.createReadStream('values.txt');
 *
 * function receiver(index, data, delay) {
 *    console.log('RECEIVED:', index, data, delay);
 * }
 *
 * stream.read(rs, receiver)
 *     .then(data => {
 *         console.log('DATA:', data);
 *     })
 *     .catch(error => {
 *         console.log('ERROR:', error);
 *     });
 * ```
 *
 * **Asynchronous Stream Processing**
 *
 * ```js
 * const stream = require('spex')(Promise).stream;
 * const fs = require('fs');
 *
 * const rs = fs.createReadStream('values.txt');
 *
 * function receiver(index, data, delay) {
 *    return new Promise(resolve => {
 *        console.log('RECEIVED:', index, data, delay);
 *        resolve();
 *    });
 * }
 *
 * stream.read(rs, receiver)
 *     .then(data => {
 *         console.log('DATA:', data);
 *     })
 *     .catch(error => {
 *         console.log('ERROR:', error);
 *    });
 * ```
 *
 * @property {function} stream.read
 * Consumes and processes data from a $[Readable] stream.
 *
 */
module.exports = function (config) {
    const res = {
        read: npm.read(config)
    };
    Object.freeze(res);
    return res;
};