Socket
Socket
Sign inDemoInstall

fcbuffer

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

fcbuffer - npm Package Compare versions

Comparing version 1.0.1 to 1.0.2

2

index.js

@@ -20,3 +20,3 @@ const Types = require('./src/types')

/**
@arg {object} definitions - examples https://github.com/eosjs/json/blob/master/schema/operations.json
@arg {object} definitions - examples https://github.com/eosjs/json/blob/master/schema/generated.json
@arg {SerializerConfig} config

@@ -23,0 +23,0 @@ @return {CreateStruct}

/* eslint-env mocha */
const assert = require('assert')
const Fcbuffer = require('.')
const Types = require('./src/types')
const Struct = require('./src/struct')
const {create, toBuffer, fromBuffer} = require('./src/fcbuffer')
const {create} = require('./src/fcbuffer')

@@ -142,3 +143,3 @@ describe('API', function () {

assertCompile({Struct: {fields: {checksum: 'FixedBytes32'}}})
throws(() => assertCompile({Struct: {}}), /Expecting Struct.base or Struct.fields/)
throws(() => assertCompile({Struct: {}}), /Expecting Struct.fields or Struct.base/)
throws(() => assertCompile({Struct: {base: {obj: 'val'}}}), /Expecting string/)

@@ -207,7 +208,58 @@ throws(() => assertCompile({Struct: {fields: 'String'}}), /Expecting object/)

const type = structs.Struct
throws(() => fromBuffer(type, Buffer.from('')), /Illegal offset/)
throws(() => Fcbuffer.fromBuffer(type, Buffer.from('')), /Illegal offset/)
})
})
function assertCompile (definitions, config = {defaults: true, debug: false}) {
describe('Override', function () {
it('Struct', function () {
const definitions = {
Message: {
fields: {
type: 'String', // another definition (like transfer)
data: 'Bytes'
}
},
transfer: {
fields: {
from: 'String',
to: 'String'
}
}
}
const config = {
override: {
'Message.data.fromByteBuffer': ({fields, object, b, config}) => {
const ser = (object.type || '') == '' ? fields.data : structs[object.type]
object.data = ser.fromByteBuffer(b, config)
},
'Message.data.appendByteBuffer': ({fields, object, b}) => {
const ser = (object.type || '') == '' ? fields.data : structs[object.type]
ser.appendByteBuffer(b, object.data)
},
'Message.data.fromObject': ({fields, serializedObject, result}) => {
const {data, type} = serializedObject
const ser = (type || '') == '' ? fields.data : structs[type]
result.data = ser.fromObject(data)
},
'Message.data.toObject': ({fields, serializedObject, result, config}) => {
const {data, type} = serializedObject || {}
const ser = (type || '') == '' ? fields.data : structs[type]
result.data = ser.toObject(data, config)
},
}
}
const {structs, errors} = create(definitions, Types(config))
assert.equal(errors.length, 0)
assertSerializer(structs.Message, {
type: 'transfer',
data: {
from: 'slim',
to: 'charles'
}
})
})
})
function assertCompile (definitions, config) {
config = Object.assign({defaults: true, debug: false}, config)
const {errors, structs} = create(definitions, Types(config))

@@ -226,4 +278,4 @@ assert.equal(errors.length, 0, errors[0])

const obj = type.fromObject(value) // tests fromObject
const buf = toBuffer(type, obj) // tests appendByteBuffer
const obj2 = fromBuffer(type, buf) // tests fromByteBuffer
const buf = Fcbuffer.toBuffer(type, obj) // tests appendByteBuffer
const obj2 = Fcbuffer.fromBuffer(type, buf) // tests fromByteBuffer

@@ -230,0 +282,0 @@ // tests toObject

{
"name": "fcbuffer",
"description": "Serialization library geared towards immutable data storage such as blockchains.",
"version": "1.0.1",
"version": "1.0.2",
"main": "index.js",

@@ -6,0 +6,0 @@ "license": "MIT",

@@ -96,3 +96,3 @@ [![Build Status](https://travis-ci.org/jcalfee/fcbuffer.svg?branch=master)](https://travis-ci.org/jcalfee/fcbuffer)

- Built-in Types: [types.js](./src/types.js)
- EOS Definitions: [operations.json](https://github.com/eosjs/json/blob/master/schema/operations.json)
- EOS Definitions: [generated.json](https://github.com/eosjs/json/blob/master/schema/generated.json)

@@ -99,0 +99,0 @@ # Environment

@@ -24,3 +24,3 @@ const ByteBuffer = require('bytebuffer')

if (!base && !fields) {
errors.push(`Expecting ${key}.base or ${key}.fields`)
errors.push(`Expecting ${key}.fields or ${key}.base`)
continue

@@ -70,3 +70,3 @@ }

// Structs can inherit another struct, they will share the same instance
// Structs can inherit another struct, they will share the same instance
for (const key in definitions) {

@@ -89,2 +89,3 @@ const thisStruct = structs[key]

// Create types from a string (ex Vector[Type])
function getTypeOrStruct (Type, typeArgs) {

@@ -96,3 +97,3 @@ const typeatty = parseType(Type)

if (arrayType == null) {
// AnyType
// AnyType
const fieldStruct = structs[name]

@@ -99,0 +100,0 @@ if (fieldStruct) { return fieldStruct }

const ByteBuffer = require('bytebuffer')
/** @class Struct */
/**
@class Struct
@arg {object} config.override = {
'Message.data.appendByteBuffer': ({fields, object, b}) => {..}
}
Rare cases where specialized serilization is needed (ex A Message object has
'type' and 'data' fields where object.type === 'transfer' can define
serialization time Struct needed for 'data' .. This saves complexity for the
end-user's working with json. See override unit test.
*/
module.exports = (name, config = {debug: false}) => {
config = Object.assign({override: {}}, config)
const fields = {}

@@ -39,3 +50,8 @@ return {

} else {
object[field] = type.fromByteBuffer(b, config)
const fromByteBuffer = config.override[`${name}.${field}.fromByteBuffer`]
if(fromByteBuffer) {
fromByteBuffer({fields, object, b, config})
} else {
object[field] = type.fromByteBuffer(b, config)
}
}

@@ -65,3 +81,8 @@ } catch (e) {

} else {
type.appendByteBuffer(b, object[field])
const appendByteBuffer = config.override[`${name}.${field}.appendByteBuffer`]
if(appendByteBuffer) {
appendByteBuffer({fields, object, b})
} else {
type.appendByteBuffer(b, object[field])
}
}

@@ -90,5 +111,10 @@ }

} else {
const value = serializedObject[field]
const object = type.fromObject(value)
result[field] = object
const fromObject = config.override[`${name}.${field}.fromObject`]
if(fromObject) {
fromObject({fields, serializedObject, result})
} else {
const value = serializedObject[field]
const object = type.fromObject(value)
result[field] = object
}
}

@@ -113,8 +139,13 @@ }

const object = type.toObject(serializedObject ? serializedObject[field] : null, config)
if (field === '') {
// structPtr
result = Object.assign(result, object)
const toObject = config.override[`${name}.${field}.toObject`]
if(toObject) {
toObject({fields, serializedObject, result, config})
} else {
result[field] = object
const object = type.toObject(serializedObject ? serializedObject[field] : null, config)
if (field === '') {
// structPtr
result = Object.assign(result, object)
} else {
result[field] = object
}
}

@@ -121,0 +152,0 @@

@@ -41,3 +41,5 @@ const BN = require('bn.js')

config = Object.assign({defaults: false, debug: false, customTypes: {}}, config)
const typeMap = Object.keys(Object.assign(types, config.customTypes)).reduce((map, name) => {
const allTypes = Object.assign(types, config.customTypes)
const createTypeReducer = (map, name) => {
map[name] = (...args) => {

@@ -48,3 +50,5 @@ const type = createType(name, config, ...args)

return map
}, {})
}
const typeMap = Object.keys(allTypes).reduce(createTypeReducer, {})
typeMap.config = config

@@ -234,3 +238,3 @@ return typeMap

fromByteBuffer (b) {
return Buffer.from(b.readVString(), 'utf8')
return b.readVString()
},

@@ -243,3 +247,3 @@ appendByteBuffer (b, value) {

validate(value, validation)
return Buffer.from(value, 'utf8')
return value
},

@@ -251,3 +255,3 @@ toObject (value) {

validate(value, validation)
return value.toString('utf8')
return value
}

@@ -307,3 +311,3 @@ })

if (isEmpty(value)) {
throw new Error(`Required value ${validation.typeName}`)
throw new Error(`Required ${validation.typeName}`)
}

@@ -331,3 +335,3 @@

if (isEmpty(value)) {
throw new Error(`Required value ${validation.typeName}`)
throw new Error(`Required ${validation.typeName}`)
}

@@ -334,0 +338,0 @@ const {signed = false, bits = 54} = validation

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc