Files
enviPy-bayer/static/js/ketcher2/node_modules/varstream/src/VarStream.js
2025-06-23 20:13:54 +02:00

88 lines
2.4 KiB
JavaScript
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
/*
* Copyright (C) 2012 Nicolas Froidure
*
* This file is free software;
* you can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) as published by the Free Software
* Foundation, in version 3. It is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
*/
var DuplexStream = require('readable-stream').Duplex
, util = require('util')
, VarStreamReader = require('./VarStreamReader')
, VarStreamWriter = require('./VarStreamWriter')
;
// Inherit of duplex stream
util.inherits(VarStream, DuplexStream);
// Constructor
function VarStream(rootObject, rootProperty, options) {
var self = this;
// Ensure new were used
if(!(this instanceof VarStream)) {
return new VarStream(rootObject, rootProperty, options);
}
// Ensure we had root object and property
if(!(rootObject instanceof Object)) {
throw new Error('No root object provided.');
}
if('string' !== typeof rootProperty || rootProperty == '') {
throw new Error('No root property name given.');
}
// Parent constructor
DuplexStream.call(this);
this._varstreamReader=new VarStreamReader(rootObject, rootProperty,
options ? options&VarStreamReader.OPTIONS : 0);
this._varstreamWriter = new VarStreamWriter(function(str) {
self.push(new Buffer(str, 'utf8'));
}, options ? options&VarStreamWriter.OPTIONS : 0);
// Parse input
this._write = function _write(chunk, encoding, done) {
this._varstreamReader.read(chunk.toString(
encoding !== 'buffer' ? encoding : 'utf8'
));
done();
};
// Output data
this._read = function _read() {
this._varstreamWriter.write(rootObject[rootProperty]);
this.push(null);
};
}
// Parse helper
VarStream.parse = function(content) {
var root = {};
var stream = new VarStream(root, 'prop');
stream.write(Buffer(content));
stream.end();
return root.prop || {};
};
// Export helper
VarStream.stringify = function(obj) {
var root = {prop: obj}, stream, content;
if('object' !== typeof obj) {
throw new Error('The stringified object must be an instance of Object.');
}
stream = new VarStream(root, 'prop');
content = stream.read();
return String(content);
};
// Exporting
VarStream.VarStreamReader = VarStream.Reader = VarStreamReader;
VarStream.VarStreamWriter = VarStream.Writer = VarStreamWriter;
module.exports = VarStream;