gcl
Version:
码农村nodejs类库,完成解决回调陷阱,配置框架,IOC框架,统一多DB访问框架,可扩展日志框架和io/db/net/thread/pool 克隆表达式,加解密算法等等一系列基础类库和算法的实现
102 lines (80 loc) • 3.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ArrayStream = undefined;
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _stream = require('stream');
var _stream2 = _interopRequireDefault(_stream);
var _util = require('util');
var _tool = require('../common/tool');
var _tool2 = _interopRequireDefault(_tool);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* 内存流提供Stream写入与读取的一切方法,但是仅仅限于写入居多的toArray方法
*/
var ArrayStream = exports.ArrayStream = function (_S$Duplex) {
(0, _inherits3.default)(ArrayStream, _S$Duplex);
function ArrayStream() {
var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var buffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1024 * 16;
(0, _classCallCheck3.default)(this, ArrayStream);
var _this = (0, _possibleConstructorReturn3.default)(this, (ArrayStream.__proto__ || (0, _getPrototypeOf2.default)(ArrayStream)).call(this, { allowHalfOpen: true, readableObjectMode: true, writableObjectMode: true, highWaterMark: buffer }));
var _ = _this;
_.max = size;
_.buf = [];
_.buffersize = buffer;
return _this;
}
(0, _createClass3.default)(ArrayStream, [{
key: '_read',
value: function _read(length) {
var _ = this;
if (_.buf.length) {
// console.log('_read',length)
_.push(Buffer.from(_.buf.splice(0, length ? length : _.buffersize)));
} else _.push(null);
}
}, {
key: '_write',
value: function _write(chunk, encoding, callback) {
var _ = this;
var _buf = _.buf;
_.buf = _buf.concat(chunk.toJSON ? chunk.toJSON().data : chunk);
_buf = null;
callback(_.max > 0 && _.buf.length > _.max ? new Error('limit out of size:' + _.max) : null);
}
}, {
key: '_writev',
value: function _writev(chunks, callback) {
var _ = this;
_tool2.default.each(chunks, function (v) {
var _buf = _.buf;
_.buf = _buf.concat(v.chunk.toJSON ? v.chunk.toJSON().data : v.chunk);
_buf.splice(0, _buf.length);
_buf = null;
return false;
}, true).then(function () {
return callback(_.max > 0 && _.buf.length > _.max ? new Error('limit out of size:' + _.max) : null);
});
}
}, {
key: 'toArray',
value: function toArray() {
var _ = this;
return _.buf.splice(0, _.buf.length);
}
}]);
return ArrayStream;
}(_stream2.default.Duplex);
exports.default = { ArrayStream: ArrayStream };
//# sourceMappingURL=arraystream.js.map