binary-data
Version:
Declarative binary data encoder / decoder.
1 lines • 7.67 kB
Source Map (JSON)
{"version":3,"sources":["index.js"],"names":["BinaryStream","require","array","buffer","bool","reserved","string","numbers","when","select","encode","decode","encodingLength","Transaction","NotEnoughDataError","types","type","Object","keys","kschema","Symbol","createEncodeStream","schema","stream","readableObjectMode","writableObjectMode","transform","transformEncode","createDecodeStream","bufOrSchema","isBuffer","Buffer","transformDecode","append","chunk","encoding","cb","buf","slice","consume","length","error","transaction","data","commit","push","module","exports"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"index.js","sourcesContent":["'use strict';\n\nconst BinaryStream = require('lib/binary-stream');\nconst array = require('types/array');\nconst buffer = require('types/buffer');\nconst bool = require('types/bool');\nconst reserved = require('types/reserved');\nconst string = require('types/string');\nconst numbers = require('types/numbers');\nconst when = require('types/when');\nconst select = require('types/select');\nconst { encode } = require('lib/encode');\nconst { decode } = require('lib/decode');\nconst { encodingLength } = require('lib/encoding-length');\nconst Transaction = require('lib/transaction');\nconst NotEnoughDataError = require('lib/not-enough-data-error');\n\nconst types = {\n array,\n bool,\n buffer,\n reserved,\n string,\n when,\n select,\n};\n\nfor (const type of Object.keys(numbers)) {\n types[type] = numbers[type]; // eslint-disable-line security/detect-object-injection\n}\n\nconst kschema = Symbol('schema');\n\n/**\n * Create transform stream to encode objects into Buffer.\n * @param {Object} [schema]\n * @returns {EncodeStream}\n */\nfunction createEncodeStream(schema) {\n const stream = new BinaryStream({\n readableObjectMode: false,\n writableObjectMode: true,\n transform: transformEncode,\n });\n\n stream[kschema] = schema;\n return stream;\n}\n\n/**\n * Create transform stream to decode binary data into object.\n * @param {Buffer|Object} [bufOrSchema]\n * @returns {DecodeStream}\n */\nfunction createDecodeStream(bufOrSchema) {\n let schema = null;\n const isBuffer = Buffer.isBuffer(bufOrSchema);\n\n if (!isBuffer) {\n schema = bufOrSchema;\n }\n\n const stream = new BinaryStream({\n transform: transformDecode,\n readableObjectMode: true,\n writableObjectMode: false,\n });\n\n stream[kschema] = schema;\n\n if (isBuffer) {\n stream.append(bufOrSchema);\n }\n\n return stream;\n}\n\n/**\n * The `transform` function for transform stream.\n * @param {*} chunk Any valid js data type.\n * @param {string} encoding\n * @param {Function} cb\n */\nfunction transformEncode(chunk, encoding, cb) {\n try {\n encode(chunk, this, this[kschema]);\n\n const buf = this.slice();\n this.consume(buf.length);\n\n cb(null, buf);\n } catch (error) {\n cb(error);\n }\n}\n\n/**\n * The `transform` function for transform stream.\n * @param {*} chunk Any valid js data type.\n * @param {string} encoding\n * @param {Function} cb\n */\nfunction transformDecode(chunk, encoding, cb) {\n this.append(chunk);\n\n try {\n while (this.length > 0) {\n const transaction = new Transaction(this);\n const data = decode(transaction, this[kschema]);\n\n transaction.commit();\n this.push(data);\n }\n\n cb();\n } catch (error) {\n if (error instanceof NotEnoughDataError) {\n cb();\n } else {\n cb(error);\n }\n }\n}\n\nmodule.exports = {\n /* Main api */\n createEncodeStream,\n createDecodeStream,\n encode,\n decode,\n encodingLength,\n\n /* Data types */\n types,\n\n /* Re-export utils */\n BinaryStream,\n NotEnoughDataError,\n};\n"]}