Skip to content

Commit 4951dc6

Browse files
author
Daniel Wirtz
committed
ByteBuffer#wrap(nodeBuffer)
1 parent 87cd4f4 commit 4951dc6

File tree

8 files changed

+96
-64
lines changed

8 files changed

+96
-64
lines changed

ByteBuffer.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@
2222
(function(global) {
2323
"use strict";
2424

25-
function loadByteBuffer(Long) {
25+
function loadByteBuffer(Long, nodeBuffer) {
26+
var Buffer = nodeBuffer &&
27+
typeof nodeBuffer['Buffer'] == 'function' &&
28+
typeof nodeBuffer['Buffer']['isBuffer'] == 'function'
29+
? nodeBuffer['Buffer'] : null;
2630

2731
/**
2832
* Constructs a new ByteBuffer.
@@ -146,6 +150,10 @@
146150
if (typeof buffer == 'string') {
147151
return new ByteBuffer().writeUTF8String(buffer).flip();
148152
}
153+
// Wrap node Buffer
154+
if (Buffer && Buffer.isBuffer(buffer)) {
155+
buffer = new Uint8Array(buffer);
156+
}
149157
// Wrap anything that is or contains an ArrayBuffer
150158
if (!!buffer["array"]) {
151159
buffer = buffer["array"];
@@ -1940,8 +1948,7 @@
19401948
* @expose
19411949
*/
19421950
ByteBuffer.prototype.toBuffer = function() {
1943-
try {
1944-
require("buffer"); // Just testing
1951+
if (Buffer) {
19451952
var offset = this.offset, length = this.length;
19461953
if (offset > length) {
19471954
var temp = offset;
@@ -1950,9 +1957,8 @@
19501957
}
19511958
var srcView = new Uint8Array(this.array);
19521959
return new Buffer(srcView.subarray(offset, length));
1953-
} catch (e) {
1954-
throw(e);
19551960
}
1961+
throw(new Error("Conversion to Buffer is available under node.js only"));
19561962
};
19571963

19581964
/**
@@ -1976,7 +1982,7 @@
19761982
// Enable module loading if available
19771983
if (typeof module != 'undefined' && module["exports"]) { // CommonJS
19781984
/** @expose */
1979-
module["exports"] = loadByteBuffer(require("long"));
1985+
module["exports"] = loadByteBuffer(require("long"), require("buffer"));
19801986
} else if (typeof define != 'undefined' && define["amd"]) { // AMD
19811987
define("ByteBuffer", ["Math/Long"], function(Long) { return loadByteBuffer(Long); });
19821988
} else { // Shim

ByteBuffer.min.js

Lines changed: 43 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ByteBuffer.min.map

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

ByteBuffer.noexpose.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@
2222
(function(global) {
2323
"use strict";
2424

25-
function loadByteBuffer(Long) {
25+
function loadByteBuffer(Long, nodeBuffer) {
26+
var Buffer = nodeBuffer &&
27+
typeof nodeBuffer['Buffer'] == 'function' &&
28+
typeof nodeBuffer['Buffer']['isBuffer'] == 'function'
29+
? nodeBuffer['Buffer'] : null;
2630

2731
/**
2832
* Constructs a new ByteBuffer.
@@ -133,6 +137,10 @@
133137
if (typeof buffer == 'string') {
134138
return new ByteBuffer().writeUTF8String(buffer).flip();
135139
}
140+
// Wrap node Buffer
141+
if (Buffer && Buffer.isBuffer(buffer)) {
142+
buffer = new Uint8Array(buffer);
143+
}
136144
// Wrap anything that is or contains an ArrayBuffer
137145
if (!!buffer["array"]) {
138146
buffer = buffer["array"];
@@ -1837,8 +1845,7 @@
18371845
* @throws {Error} If not running inside of node
18381846
*/
18391847
ByteBuffer.prototype.toBuffer = function() {
1840-
try {
1841-
require("buffer"); // Just testing
1848+
if (Buffer) {
18421849
var offset = this.offset, length = this.length;
18431850
if (offset > length) {
18441851
var temp = offset;
@@ -1847,9 +1854,8 @@
18471854
}
18481855
var srcView = new Uint8Array(this.array);
18491856
return new Buffer(srcView.subarray(offset, length));
1850-
} catch (e) {
1851-
throw(e);
18521857
}
1858+
throw(new Error("Conversion to Buffer is available under node.js only"));
18531859
};
18541860

18551861
/**
@@ -1871,7 +1877,7 @@
18711877

18721878
// Enable module loading if available
18731879
if (typeof module != 'undefined' && module["exports"]) { // CommonJS
1874-
module["exports"] = loadByteBuffer(require("long"));
1880+
module["exports"] = loadByteBuffer(require("long"), require("buffer"));
18751881
} else if (typeof define != 'undefined' && define["amd"]) { // AMD
18761882
define("ByteBuffer", ["Math/Long"], function(Long) { return loadByteBuffer(Long); });
18771883
} else { // Shim

externs/minimal-node-env.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,12 @@ var require = function(moduleName) {};
77
/**
88
* @param {number} size
99
* @constructor
10+
* @extends Array
1011
*/
1112
var Buffer = function(size) {};
13+
14+
/**
15+
* @param {*} buf
16+
* @return {boolean}
17+
*/
18+
Buffer.isBuffer = function(buf) {};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bytebuffer",
3-
"version": "1.3.3",
3+
"version": "1.3.4",
44
"author": "Daniel Wirtz <[email protected]>",
55
"description": "ByteBuffer.js: A Java-like, Netty-inspired ByteBuffer implementation using typed arrays.",
66
"main": "ByteBuffer.js",

src/ByteBuffer.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@
2222
(function(global) {
2323
"use strict";
2424

25-
function loadByteBuffer(Long) {
25+
function loadByteBuffer(Long, nodeBuffer) {
26+
var Buffer = nodeBuffer &&
27+
typeof nodeBuffer['Buffer'] == 'function' &&
28+
typeof nodeBuffer['Buffer']['isBuffer'] == 'function'
29+
? nodeBuffer['Buffer'] : null;
2630

2731
/**
2832
* Constructs a new ByteBuffer.
@@ -146,6 +150,10 @@
146150
if (typeof buffer == 'string') {
147151
return new ByteBuffer().writeUTF8String(buffer).flip();
148152
}
153+
// Wrap node Buffer
154+
if (Buffer && Buffer.isBuffer(buffer)) {
155+
buffer = new Uint8Array(buffer);
156+
}
149157
// Wrap anything that is or contains an ArrayBuffer
150158
if (!!buffer["array"]) {
151159
buffer = buffer["array"];
@@ -1940,8 +1948,7 @@
19401948
* @expose
19411949
*/
19421950
ByteBuffer.prototype.toBuffer = function() {
1943-
try {
1944-
require("buffer"); // Just testing
1951+
if (Buffer) {
19451952
var offset = this.offset, length = this.length;
19461953
if (offset > length) {
19471954
var temp = offset;
@@ -1950,9 +1957,8 @@
19501957
}
19511958
var srcView = new Uint8Array(this.array);
19521959
return new Buffer(srcView.subarray(offset, length));
1953-
} catch (e) {
1954-
throw(e);
19551960
}
1961+
throw(new Error("Conversion to Buffer is available under node.js only"));
19561962
};
19571963

19581964
/**
@@ -1976,7 +1982,7 @@
19761982
// Enable module loading if available
19771983
if (typeof module != 'undefined' && module["exports"]) { // CommonJS
19781984
/** @expose */
1979-
module["exports"] = loadByteBuffer(require("long"));
1985+
module["exports"] = loadByteBuffer(require("long"), require("buffer"));
19801986
} else if (typeof define != 'undefined' && define["amd"]) { // AMD
19811987
define("ByteBuffer", ["Math/Long"], function(Long) { return loadByteBuffer(Long); });
19821988
} else { // Shim

tests/suite.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ var suite = {
105105
test.equal(bb.readUTF8String(4), "test");
106106
test.done();
107107
},
108+
109+
"wrap(Buffer)": function(test) {
110+
var b = new Buffer("abc", "utf8");
111+
var bb = ByteBuffer.wrap(b);
112+
test.equal(bb.toHex(), "<61 62 63>");
113+
test.done();
114+
},
108115

109116
"resize": function(test) {
110117
var bb = new ByteBuffer(1);

0 commit comments

Comments
 (0)