Comparing version 0.6.20 to 0.7.2
@@ -8,4 +8,4 @@ (function (exportName) { | ||
* zswang (http://weibo.com/zswang) | ||
* @version 0.6.20 | ||
* @date 2016-04-06 | ||
* @version 0.7.2 | ||
* @date 2016-08-01 | ||
*/ | ||
@@ -160,9 +160,21 @@ function createSchema() { | ||
* | ||
* @param {Array|Buffer} 数组和缓冲区 | ||
* @param {Array|Buffer|string} 数组和缓冲区 | ||
* @return {ArrayBuffer} 返回转换后的 ArrayBuffer | ||
'''<example>''' | ||
* @example arrayBufferFrom():string | ||
```js | ||
var _ = jpacks; | ||
var ab = _.arrayBufferFrom('abc'); | ||
console.log(new Buffer(new Uint8Array(ab)).toString('hex')); | ||
// > 616263 | ||
``` | ||
'''</example>''' | ||
*/ | ||
function arrayBufferFrom(buffer) { | ||
function arrayBufferFrom(buffer, options) { | ||
if (buffer instanceof ArrayBuffer) { | ||
return buffer; | ||
} | ||
if (typeof buffer === 'string' && Schema.stringBytes) { | ||
buffer = Schema.stringBytes(buffer, options); | ||
} | ||
var ab = new ArrayBuffer(buffer.length); | ||
@@ -181,3 +193,39 @@ var arr = new Uint8Array(ab, 0, buffer.length); | ||
* @return {Number|Object} 返回解包的值 | ||
*/ | ||
'''<example>''' | ||
* @example together():base | ||
```js | ||
var _ = jpacks; | ||
function f(a, b, c) { | ||
console.log(JSON.stringify([a, b, c])); | ||
} | ||
var t = _.together(f); | ||
t(1)()(2, 3); | ||
// > [1,2,3] | ||
t(4)(5)()(6); | ||
// > [4,5,6] | ||
t(7, 8, 9); | ||
// > [7,8,9] | ||
t('a', 'b')('c'); | ||
// > ["a","b","c"] | ||
t()('x')()()('y')()()('z'); | ||
// > ["x","y","z"] | ||
``` | ||
* @example together():hook | ||
```js | ||
var _ = jpacks; | ||
function f(a, b, c) {} | ||
var t = _.together(f, function(t, args) { | ||
t.schema = 'f(' + args + ')'; | ||
}); | ||
console.log(t(1)(2).schema); | ||
// > f(1,2) | ||
function go() { | ||
console.log(1); | ||
} | ||
var g = _.together(go); | ||
g(); | ||
// > 1 | ||
``` | ||
'''</example>''' | ||
*/ | ||
function unpack(packSchema, buffer, options, offsets) { | ||
@@ -196,8 +244,7 @@ /*<debug> | ||
/*</safe>*/ | ||
buffer = arrayBufferFrom(buffer); // 确保是 ArrayBuffer 类型 | ||
options = options || {}; | ||
offsets = offsets || [0]; | ||
Object.keys(packSchema.defaultOptions || {}).forEach(function(key) { | ||
Object.keys(schema.defaultOptions || {}).forEach(function(key) { | ||
if (typeof options[key] === 'undefined') { | ||
options[key] = packSchema.defaultOptions[key]; | ||
options[key] = schema.defaultOptions[key]; | ||
} | ||
@@ -210,3 +257,3 @@ }); | ||
}); | ||
return schema.unpack(buffer, options, offsets); // 解码 | ||
return schema.unpack(arrayBufferFrom(buffer, options), options, offsets); // 解码 | ||
} | ||
@@ -237,5 +284,5 @@ Schema.unpack = unpack; | ||
options = options || {}; | ||
Object.keys(packSchema.defaultOptions || {}).forEach(function(key) { | ||
Object.keys(schema.defaultOptions || {}).forEach(function(key) { | ||
if (typeof options[key] === 'undefined') { | ||
options[key] = packSchema.defaultOptions[key]; | ||
options[key] = schema.defaultOptions[key]; | ||
} | ||
@@ -1134,4 +1181,5 @@ }); | ||
function stringBytes(value, options) { | ||
options = options || {}; | ||
if (!options.browser && typeof Buffer !== 'undefined') { // NodeJS | ||
return new Buffer(value, options.encoding); | ||
return new Buffer(value, options.encoding || 'binary'); | ||
} else { | ||
@@ -1804,2 +1852,3 @@ if (typeof TextEncoder === 'function') { | ||
var exports = root; | ||
/* istanbul ignore next */ | ||
if (typeof define === 'function') { | ||
@@ -1806,0 +1855,0 @@ if (define.amd || define.cmd) { |
@@ -8,4 +8,4 @@ (function (exportName) { | ||
* zswang (http://weibo.com/zswang) | ||
* @version 0.6.20 | ||
* @date 2016-04-06 | ||
* @version 0.7.2 | ||
* @date 2016-08-02 | ||
*/ | ||
@@ -145,9 +145,21 @@ function createSchema() { | ||
* | ||
* @param {Array|Buffer} 数组和缓冲区 | ||
* @param {Array|Buffer|string} 数组和缓冲区 | ||
* @return {ArrayBuffer} 返回转换后的 ArrayBuffer | ||
'''<example>''' | ||
* @example arrayBufferFrom():string | ||
```js | ||
var _ = jpacks; | ||
var ab = _.arrayBufferFrom('abc'); | ||
console.log(new Buffer(new Uint8Array(ab)).toString('hex')); | ||
// > 616263 | ||
``` | ||
'''</example>''' | ||
*/ | ||
function arrayBufferFrom(buffer) { | ||
function arrayBufferFrom(buffer, options) { | ||
if (buffer instanceof ArrayBuffer) { | ||
return buffer; | ||
} | ||
if (typeof buffer === 'string' && Schema.stringBytes) { | ||
buffer = Schema.stringBytes(buffer, options); | ||
} | ||
var ab = new ArrayBuffer(buffer.length); | ||
@@ -166,3 +178,39 @@ var arr = new Uint8Array(ab, 0, buffer.length); | ||
* @return {Number|Object} 返回解包的值 | ||
*/ | ||
'''<example>''' | ||
* @example together():base | ||
```js | ||
var _ = jpacks; | ||
function f(a, b, c) { | ||
console.log(JSON.stringify([a, b, c])); | ||
} | ||
var t = _.together(f); | ||
t(1)()(2, 3); | ||
// > [1,2,3] | ||
t(4)(5)()(6); | ||
// > [4,5,6] | ||
t(7, 8, 9); | ||
// > [7,8,9] | ||
t('a', 'b')('c'); | ||
// > ["a","b","c"] | ||
t()('x')()()('y')()()('z'); | ||
// > ["x","y","z"] | ||
``` | ||
* @example together():hook | ||
```js | ||
var _ = jpacks; | ||
function f(a, b, c) {} | ||
var t = _.together(f, function(t, args) { | ||
t.schema = 'f(' + args + ')'; | ||
}); | ||
console.log(t(1)(2).schema); | ||
// > f(1,2) | ||
function go() { | ||
console.log(1); | ||
} | ||
var g = _.together(go); | ||
g(); | ||
// > 1 | ||
``` | ||
'''</example>''' | ||
*/ | ||
function unpack(packSchema, buffer, options, offsets) { | ||
@@ -173,8 +221,7 @@ if (packSchema === null) { | ||
var schema = Schema.from(packSchema); | ||
buffer = arrayBufferFrom(buffer); // 确保是 ArrayBuffer 类型 | ||
options = options || {}; | ||
offsets = offsets || [0]; | ||
Object.keys(packSchema.defaultOptions || {}).forEach(function(key) { | ||
Object.keys(schema.defaultOptions || {}).forEach(function(key) { | ||
if (typeof options[key] === 'undefined') { | ||
options[key] = packSchema.defaultOptions[key]; | ||
options[key] = schema.defaultOptions[key]; | ||
} | ||
@@ -187,3 +234,3 @@ }); | ||
}); | ||
return schema.unpack(buffer, options, offsets); // 解码 | ||
return schema.unpack(arrayBufferFrom(buffer, options), options, offsets); // 解码 | ||
} | ||
@@ -206,5 +253,5 @@ Schema.unpack = unpack; | ||
options = options || {}; | ||
Object.keys(packSchema.defaultOptions || {}).forEach(function(key) { | ||
Object.keys(schema.defaultOptions || {}).forEach(function(key) { | ||
if (typeof options[key] === 'undefined') { | ||
options[key] = packSchema.defaultOptions[key]; | ||
options[key] = schema.defaultOptions[key]; | ||
} | ||
@@ -1071,4 +1118,5 @@ }); | ||
function stringBytes(value, options) { | ||
options = options || {}; | ||
if (!options.browser && typeof Buffer !== 'undefined') { // NodeJS | ||
return new Buffer(value, options.encoding); | ||
return new Buffer(value, options.encoding || 'binary'); | ||
} else { | ||
@@ -1675,2 +1723,3 @@ if (typeof TextEncoder === 'function') { | ||
var exports = root; | ||
/* istanbul ignore next */ | ||
if (typeof define === 'function') { | ||
@@ -1677,0 +1726,0 @@ if (define.amd || define.cmd) { |
@@ -5,3 +5,3 @@ { | ||
"description": "Binary data packing and unpacking.", | ||
"version": "0.6.20", | ||
"version": "0.7.2", | ||
"homepage": "http://github.com/zswang/jpacks", | ||
@@ -8,0 +8,0 @@ "main": "jpacks.js", |
@@ -56,3 +56,3 @@ var protobufjs = require('protobufjs'); | ||
if (!value && /int64/.test(type.type.name)) { // 空值优化 | ||
if (!value && /int|float/.test(type.type.name)) { // 空值优化 | ||
value = 0; | ||
@@ -280,10 +280,12 @@ } | ||
var _ = jpacks; | ||
var _schema = _.protobuf('package Long; message Value { optional uint64 value = 1; }', 'Long.Value', null); | ||
var _schema = _.protobuf('package Long; message Value { optional int64 int64_value = 1; optional int32 int32_value = 2; optional float float_value = 3; }', 'Long.Value', null); | ||
var buffer = _.pack(_schema, { | ||
value: '' | ||
int64_value: '', | ||
int32_value: '', | ||
float_value: '' | ||
}); | ||
console.log(JSON.stringify(_.unpack(_schema, buffer))); | ||
// > {"value":"0"} | ||
// > {"int64_value":"0","int32_value":0,"float_value":0} | ||
``` | ||
@@ -290,0 +292,0 @@ '''</example>''' |
126483
4100