New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

structly

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

structly - npm Package Compare versions

Comparing version
0.3.0
to
0.3.1
+14
-2
CHANGELOG.md
# Changelog
## 0.3.1
* Introduce `Buffer` type
* Add back `Bool` type
* Fix missing string handler for views
## 0.3.0
* Typed views! With `createView`, you can now create objects from your type schemas that automagically update their buffer storage on modification!
* Removed `startOffset` in converter functions. Use a typed array instead.
* New `createDecoder` and `createEncoder` functions
## 0.2.0
* Code generation! The code for reading and writing to buffers is now created on demand from the type schemas. This means that all type handlers are inlined, bypassing the need for runtime lookup!
* All built-in type schemas are made immutable using Object.freeze
* Uint64 and Bool types have been removed
* All built-in type schemas are made immutable using `Object.freeze`
* `Uint64` and `Bool` types have been removed

@@ -9,0 +21,0 @@ ## 0.1.2

@@ -136,2 +136,5 @@ (function (global, factory) {

var boolean = Object.freeze({ tag: 'Boolean', byteLength: 1, byteAlignment: 1 });
var bool = boolean;
var int8 = createNumberType('Int8', 1);

@@ -317,2 +320,14 @@ var uint8 = createNumberType('Uint8', 1);

function buffer(length) {
if (length === undefined || typeof length !== 'number') {
throw new TypeError('You must specify a length of the buffer!');
}
return Object.freeze({
tag: 'Buffer',
byteLength: length,
byteAlignment: 1
});
}
var readerVisitor = Object.freeze({

@@ -328,2 +343,8 @@ Number: function Number(_ref, stackDepth) {

},
Boolean: function Boolean(_, stackDepth) {
var resultVar = createVariable('result', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return resultVar + ' = Boolean(dataView.getUint8(' + byteOffsetVar + '));';
},
String: function String(_ref2, stackDepth) {

@@ -422,2 +443,10 @@ var byteLength = _ref2.byteLength;

}).join('\n') + '\n ';
},
Buffer: function Buffer(_ref12, stackDepth) {
var byteLength = _ref12.byteLength;
var resultVar = createVariable('result', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return '\n if (' + resultVar + ' === void 0 ||\n ' + resultVar + '.buffer !== dataView.buffer ||\n ' + resultVar + '.byteLength !== ' + byteOffsetVar + ' ||\n ' + resultVar + '.byteOffset !== ' + byteLength + ') {\n ' + resultVar + ' = new Uint8Array(dataView.buffer, ' + byteOffsetVar + ', ' + byteLength + ');\n }\n ';
}

@@ -443,2 +472,8 @@ });

},
Boolean: function Boolean(_, stackDepth) {
var dataVar = createVariable('data', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return 'dataView.setUint8(' + byteOffsetVar + ', Number(' + dataVar + '));';
},
String: function String(_ref2, stackDepth) {

@@ -527,2 +562,10 @@ var byteLength = _ref2.byteLength;

}).join('\n') + '\n ' + writerVisitor[element.tag](element, innerStackDepth) + '\n ';
},
Buffer: function Buffer(_ref10, stackDepth) {
var byteLength = _ref10.byteLength;
var dataVar = createVariable('data', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return '\n if (' + dataVar + '.buffer !== dataView.buffer ||\n ' + dataVar + '.byteLength !== ' + byteOffsetVar + ' ||\n ' + dataVar + '.byteOffset !== ' + byteLength + ') {\n new Uint8Array(dataView.buffer, ' + byteOffsetVar + ', ' + byteLength + ').set(' + dataVar + ');\n }\n ';
}

@@ -667,5 +710,55 @@ });

},
Array: function Array(_ref4, dataView, byteOffset) {
var length = _ref4.length;
var element = _ref4.element;
Boolean: function (_Boolean) {
function Boolean(_x3, _x4, _x5) {
return _Boolean.apply(this, arguments);
}
Boolean.toString = function () {
return _Boolean.toString();
};
return Boolean;
}(function (_, dataView, byteOffset) {
return Boolean(dataView.getUint8(byteOffset));
}),
String: function (_String) {
function String(_x6, _x7, _x8) {
return _String.apply(this, arguments);
}
String.toString = function () {
return _String.toString();
};
return String;
}(function (_ref4, dataView, byteOffset) {
var byteLength = _ref4.byteLength;
var encoding = _ref4.encoding;
var array = new Uint8Array(dataView.buffer, byteOffset, byteLength);
var index = array.indexOf(0);
if (index >= 0) {
array = array.subarray(0, index);
}
if (typeof Buffer === 'function') {
return new Buffer(array).toString(encoding);
}
/* eslint-disable no-undef */
/* istanbul ignore next */
if (typeof TextDecoder === 'function') {
return new TextDecoder(encoding).decode(array);
}
/* eslint-enable no-undef */
/* eslint-disable prefer-spread */
/* istanbul ignore next */
return String.fromCharCode.apply(String, array);
/* eslint-enable prefer-spread */
}),
Array: function Array(_ref5, dataView, byteOffset) {
var length = _ref5.length;
var element = _ref5.element;
var useProxy = arguments.length <= 3 || arguments[3] === undefined ? length > 20 : arguments[3];

@@ -689,4 +782,4 @@

},
Tuple: function Tuple(_ref5, dataView, byteOffset, useProxy) {
var members = _ref5.members;
Tuple: function Tuple(_ref6, dataView, byteOffset, useProxy) {
var members = _ref6.members;

@@ -721,4 +814,4 @@ var handlers = members.map(function (member) {

},
Struct: function Struct(_ref6, dataView, byteOffset, useProxy) {
var members = _ref6.members;
Struct: function Struct(_ref7, dataView, byteOffset, useProxy) {
var members = _ref7.members;

@@ -730,7 +823,8 @@ var names = members.map(function (member) {

/* eslint-disable no-param-reassign */
obj[member.name] = assign({}, member, {
obj[member.name] = {
element: member.element,
writer: createWriter(member.element),
totalByteOffset: byteOffset + member.byteOffset,
proxyHandler: viewVisitor[member.element.tag]
});
};
/* eslint-enable */

@@ -758,5 +852,5 @@ return obj;

},
Bitfield: function Bitfield(_ref7, dataView, byteOffset) {
var element = _ref7.element;
var members = _ref7.members;
Bitfield: function Bitfield(_ref8, dataView, byteOffset) {
var element = _ref8.element;
var members = _ref8.members;

@@ -771,5 +865,5 @@ var reader = createReader(element);

var currentBitOffset = 0;
var infoByName = members.reduce(function (info, _ref8) {
var name = _ref8.name;
var bits = _ref8.bits;
var infoByName = members.reduce(function (info, _ref9) {
var name = _ref9.name;
var bits = _ref9.bits;

@@ -807,2 +901,7 @@ var bitOffset = currentBitOffset;

});
},
Buffer: function Buffer(_ref10, dataView, byteOffset) {
var byteLength = _ref10.byteLength;
return new Uint8Array(dataView.buffer, byteOffset, byteLength);
}

@@ -926,2 +1025,4 @@ });

exports.strideof = strideof;
exports.boolean = boolean;
exports.bool = bool;
exports.int8 = int8;

@@ -952,2 +1053,3 @@ exports.uint8 = uint8;

exports.bitfield = bitfield;
exports.buffer = buffer;
exports.createDecoder = createDecoder;

@@ -954,0 +1056,0 @@ exports.createEncoder = createEncoder;

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":null,"sources":["../src/utils.js","../src/types.js","../src/visitors/reader.js","../src/visitors/writer.js","../src/visitors/view.js","../src/converters.js"],"sourcesContent":["/**\n * Whether the running system is little endian (true = LE, false = BE)\n */\nexport const systemLittleEndian = (typeof os === 'object')\n /* eslint-disable no-undef */\n ? os.endianness() === 'LE'\n /* eslint-enable no-undef */\n : new Uint32Array(new Uint8Array([0x11, 0x22, 0x33, 0x44]).buffer)[0] === 0x44332211;\n\n/**\n * Gets the closest multiple of byteAlignment from byteOffset (base-2 only)\n */\nexport function align(byteOffset, byteAlignment) {\n /* eslint-disable no-mixed-operators */\n return (byteOffset + byteAlignment - 1) & ~(byteAlignment - 1);\n}\n\n/**\n * The byte alignment of the given type\n */\nexport function alignof({ byteAlignment = 0 } = {}) {\n return byteAlignment;\n}\n\n/**\n * The byte size of the type, excluding alignment padding\n */\nexport function sizeof({ byteLength = 0 } = {}) {\n return byteLength;\n}\n\n/**\n * The byte size of the type, including alignment padding\n */\nexport function strideof(type, byteAlignment = alignof(type)) {\n return align(sizeof(type), byteAlignment);\n}\n\nexport function createMask(bits) {\n return (bits <= 0) ? 0 : 0xFFFFFFFF >>> (32 - bits);\n}\n\nexport function createVariable(name, stackDepth = 0) {\n return `${name}${stackDepth}`;\n}\n\n/* eslint-disable no-param-reassign, prefer-rest-params, no-restricted-syntax */\nexport const assign = Object.assign ||/* istanbul ignore next */ function assign(target) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n target = Object(target);\n for (let index = 1, len = arguments.length; index < len; index++) {\n const source = Object(arguments[index]);\n if (source != null) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n};\n\nexport function getDataView(data) {\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n } else if (ArrayBuffer.isView(data)) {\n const { buffer, byteOffset, byteLength } = data;\n return new DataView(buffer, byteOffset, byteLength);\n }\n throw new TypeError('Invalid input data');\n}\n\n// Memoize if WeakMap if supported, otherwise passthrough\nexport const maybeMemoize = (() => {\n if (typeof WeakMap === 'function') {\n return function memoize(fn) {\n const cache = new WeakMap();\n return function memoized(key) {\n if (!cache.has(key)) {\n cache.set(key, fn(key));\n }\n return cache.get(key);\n };\n };\n }\n /* istanbul ignore next */\n return function passthrough(fn) {\n return fn;\n };\n})();\n","/* eslint-disable no-param-reassign */\nimport { systemLittleEndian, align, assign, alignof } from './utils';\n\nfunction createNumberType(kind, size, littleEndian = systemLittleEndian) {\n return Object.freeze({\n tag: 'Number',\n kind,\n byteLength: size,\n byteAlignment: size,\n littleEndian,\n });\n}\n\nexport const int8 = createNumberType('Int8', 1);\nexport const uint8 = createNumberType('Uint8', 1);\n\nexport const int16 = createNumberType('Int16', 2);\nexport const int16le = createNumberType('Int16', 2, true);\nexport const int16be = createNumberType('Int16', 2, false);\n\nexport const uint16 = createNumberType('Uint16', 2);\nexport const uint16le = createNumberType('Uint16', 2, true);\nexport const uint16be = createNumberType('Uint16', 2, false);\n\nexport const int32 = createNumberType('Int32', 4);\nexport const int32le = createNumberType('Int32', 4, true);\nexport const int32be = createNumberType('Int32', 4, false);\n\nexport const uint32 = createNumberType('Uint32', 4);\nexport const uint32le = createNumberType('Uint32', 4, true);\nexport const uint32be = createNumberType('Uint32', 4, false);\n\nexport const float32 = createNumberType('Float32', 4);\nexport const float32le = createNumberType('Float32', 4, true);\nexport const float32be = createNumberType('Float32', 4, false);\n\nexport const float64 = createNumberType('Float64', 8);\nexport const float64le = createNumberType('Float64', 8, true);\nexport const float64be = createNumberType('Float64', 8, false);\n\n/**\n * Create a string type.\n */\nexport function string(maxLength, encoding = 'utf8') {\n if (maxLength === undefined) {\n throw new TypeError('You must specify a max length for the string!');\n }\n\n return Object.freeze({\n tag: 'String',\n byteLength: maxLength,\n byteAlignment: 1,\n encoding,\n });\n}\n\n/**\n * Create an array type.\n */\nexport function array(element, length, { pack } = {}) {\n if (element === undefined) {\n throw new TypeError('You must specify the array element type!');\n }\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the array!');\n }\n\n return Object.freeze({\n tag: 'Array',\n byteLength: length * element.byteLength,\n byteAlignment: pack || element.byteAlignment,\n length,\n element,\n });\n}\n\nfunction offsetHelper(tag, elements, inject, pack = 0) {\n let byteOffset = 0;\n let maxByteAlignment = 0;\n\n const members = Object.freeze(elements.map(element => {\n const { byteLength, byteAlignment } = element;\n\n byteOffset = align(byteOffset, pack || byteAlignment);\n\n const result = { byteOffset, element };\n\n if (inject !== undefined) {\n assign(result, inject(element));\n }\n\n byteOffset += byteLength;\n maxByteAlignment = Math.max(maxByteAlignment, byteAlignment);\n\n return Object.freeze(result);\n }));\n\n return Object.freeze({\n tag,\n byteLength: byteOffset,\n byteAlignment: pack || maxByteAlignment,\n members,\n });\n}\n\n/**\n * Create a tuple type.\n */\nexport function tuple(...elements) {\n return offsetHelper('Tuple', elements);\n}\n\nfunction injectName({ name }) {\n return { name };\n}\n\n/**\n * Create a struct type.\n */\nexport function struct(members, { reorder = false, pack = 0 } = {}) {\n if (members === undefined) {\n throw new TypeError('You must specify the struct members!');\n }\n\n pack = Number(pack);\n const memberNames = Object.keys(members);\n\n if (reorder) {\n memberNames.sort((a, b) => alignof(members[a]) - alignof(members[b]));\n }\n\n const sortedMembers = memberNames.map(name => assign({ name }, members[name]));\n\n return offsetHelper('Struct', sortedMembers, injectName, pack);\n}\n\n/**\n * Create a bitfield type.\n */\nexport function bitfield(members, element = uint32) {\n if (members === undefined) {\n throw new TypeError('You must specify the bitfield members!');\n }\n\n const memberNames = Object.keys(members);\n const totalBits = memberNames.reduce((sum, name) => sum + members[name], 0);\n\n if (totalBits > 8 * element.byteLength) {\n throw new RangeError('Sum of bitfield widths is too large for storage element');\n }\n\n return Object.freeze({\n tag: 'Bitfield',\n byteLength: element.byteLength,\n byteAlignment: element.byteAlignment,\n members: Object.freeze(memberNames.map(name => Object.freeze({ name, bits: members[name] }))),\n element,\n });\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const readerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = dataView.get${kind}(${byteOffsetVar}, ${littleEndian});`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const arrayVar = createVariable('array', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n var ${arrayVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n var ${indexVar} = ${arrayVar}.indexOf(0);\n if (${indexVar} >= 0) {\n ${arrayVar} = ${arrayVar}.subarray(0, ${indexVar});\n }\n ${(() => {\n if (typeof Buffer === 'function') {\n return `${resultVar} = new Buffer(${arrayVar}).toString(${JSON.stringify(encoding)});`;\n }\n\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return `${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});`;\n }\n\n /* istanbul ignore next */\n return `${resultVar} = String.fromCharCode.apply(String, ${arrayVar});`;\n })()}\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${length});\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerResultVar} = ${resultVar}[${indexVar}];\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${indexVar}] = ${innerResultVar};\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${members.length});\n }\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerResultVar} = ${resultVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${i}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyStruct = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyStruct};\n }\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerResultVar} = ${resultVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyBitfield = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyBitfield};\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerResultVar};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${members.map(({ name, bits }) => `\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar} & ${createMask(bits)};\n ${innerResultVar} >>>= ${bits};\n `).join('\\n')}\n `;\n },\n});\n\nexport function createReader(type) {\n const resultVar = createVariable('result');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, resultVar, `\n \"use strict\";\n ${readerVisitor[type.tag](type, 0)}\n return ${resultVar};\n `);\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const writerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.set${kind}(${byteOffsetVar}, ${dataVar}, ${littleEndian});`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const lengthVar = createVariable('length', stackDepth);\n\n if (typeof Buffer === 'function') {\n return `\n new Buffer(${dataVar}, ${JSON.stringify(encoding)}).copy(new Buffer(dataView.buffer, dataView.byteOffset, dataView.byteLength), ${byteOffsetVar});\n `;\n }\n\n /* istanbul ignore next */\n if (typeof TextEncoder === 'function') {\n return `\n new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength).set(new TextDecoder(${JSON.stringify(encoding)}).encode(${dataVar}));\n `;\n }\n\n /* istanbul ignore next */\n return `\n ${dataVar} = new String(${dataVar});\n for (var ${indexVar} = 0, ${lengthVar} = ${dataVar}.length; ${indexVar} < ${lengthVar}; ++${indexVar}) {\n dataView.setUint8(${byteOffsetVar} + ${indexVar}, ${dataVar}.charCodeAt(${indexVar}));\n }\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerDataVar} = ${dataVar}[${indexVar}];\n ${writerVisitor[element.tag](element, innerStackDepth)}\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerDataVar} = ${dataVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerDataVar} = ${dataVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerDataVar} = 0;\n ${members.slice().reverse().map(({ name, bits }) => `\n ${innerDataVar} <<= ${bits};\n ${innerDataVar} |= ${dataVar}[${JSON.stringify(name)}] & ${createMask(bits)};\n `).join('\\n')}\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `;\n },\n});\n\nexport function createWriter(type) {\n const dataVar = createVariable('data');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, dataVar, `\n \"use strict\";\n ${writerVisitor[type.tag](type, 0)}\n `);\n}\n","import { createReader } from './reader';\nimport { createWriter } from './writer';\nimport { sizeof, strideof, getDataView, assign, createMask } from '../utils';\n\nconst SUPPORTS_PROXY = typeof Proxy === 'function';\n\nfunction createArrayProxy(length, { get, set, useProxy = SUPPORTS_PROXY } = {}) {\n const array = new Array(length);\n\n // Lazily compute properties if proxy is available\n if (useProxy) {\n return new Proxy(array, {\n has(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n return (index >= 0) && (index < length);\n }\n return key in target;\n },\n\n get(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n if ((index >= 0) && (index < length)) {\n let cache;\n if (Reflect.has(target, key)) {\n cache = target[key];\n } else {\n cache = get(index);\n if (typeof cache === 'object') {\n /* eslint-disable no-param-reassign */\n target[key] = cache;\n /* eslint-enable */\n }\n }\n return cache;\n }\n }\n return target[key];\n },\n\n set(target, key, value) {\n // Check that key is either a number or a numeric string\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n // Check bounds\n if ((index >= 0) && (index < length)) {\n return set(index, value) || true;\n }\n }\n // Don't allow any other properties to be changed\n return false;\n },\n });\n }\n\n // Eagerly compute properties using Object.defineProperty\n for (let i = 0; i < length; ++i) {\n let cache;\n Object.defineProperty(array, i, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(i);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, i),\n });\n }\n\n return Object.freeze(array);\n}\n\nfunction createObjectProxy(keys, { get, set } = {}) {\n const object = {};\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let cache;\n Object.defineProperty(object, key, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(key);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, key),\n });\n }\n\n return Object.freeze(object);\n}\n\nexport const viewVisitor = Object.freeze({\n Number({ littleEndian, kind }, dataView, byteOffset) {\n return dataView[`get${kind}`](byteOffset, littleEndian);\n },\n\n Array({ length, element }, dataView, byteOffset, useProxy = length > 20) {\n const elementProxyHandler = viewVisitor[element.tag];\n const elementWriter = createWriter(element);\n const byteStride = strideof(element);\n\n return createArrayProxy(length, {\n useProxy,\n get(i) {\n const elementByteOffset = byteOffset + (byteStride * i);\n return elementProxyHandler(element, dataView, elementByteOffset, useProxy);\n },\n set(i, value) {\n const elementByteOffset = byteOffset + (byteStride * i);\n elementWriter(dataView, elementByteOffset, value);\n },\n });\n },\n\n Tuple({ members }, dataView, byteOffset, useProxy) {\n const handlers = members.map(member => ({\n element: member.element,\n proxyHandler: viewVisitor[member.element.tag],\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n }));\n\n return createArrayProxy(members.length, {\n useProxy: false,\n get(i) {\n const { element, proxyHandler, totalByteOffset } = handlers[i];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(i, value) {\n const { writer, totalByteOffset } = handlers[i];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Struct({ members }, dataView, byteOffset, useProxy) {\n const names = members.map(member => member.name);\n const membersByName = members.reduce((obj, member) => {\n /* eslint-disable no-param-reassign */\n obj[member.name] = assign({}, member, {\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n proxyHandler: viewVisitor[member.element.tag],\n });\n /* eslint-enable */\n return obj;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { element, proxyHandler, totalByteOffset } = membersByName[name];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(name, value) {\n const { writer, totalByteOffset } = membersByName[name];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Bitfield({ element, members }, dataView, byteOffset) {\n const reader = createReader(element);\n const writer = createWriter(element);\n\n const names = members.map(member => member.name);\n\n let currentBitOffset = 0;\n const infoByName = members.reduce((info, { name, bits }) => {\n const bitOffset = currentBitOffset;\n const mask = createMask(bits);\n const clearMask = ~(mask << bitOffset);\n /* eslint-disable no-param-reassign */\n info[name] = { bitOffset, mask, clearMask };\n /* eslint-enable */\n currentBitOffset += bits;\n return info;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { bitOffset, mask } = infoByName[name];\n const elementValue = reader(dataView, byteOffset);\n return (elementValue >>> bitOffset) & mask;\n },\n set(name, value) {\n const { bitOffset, clearMask, mask } = infoByName[name];\n let elementValue = reader(dataView, byteOffset);\n elementValue &= clearMask;\n elementValue |= (value & mask) << bitOffset;\n writer(dataView, byteOffset, elementValue);\n },\n });\n },\n});\n\nexport function createView(type, buffer = new ArrayBuffer(sizeof(type)), useProxy) {\n const dataView = getDataView(buffer);\n\n const viewHandler = viewVisitor[type.tag];\n const writer = createWriter(type);\n\n const view = {\n buffer: dataView.buffer,\n byteOffset: dataView.byteOffset,\n byteLength: dataView.byteLength,\n };\n\n let cache;\n Object.defineProperty(view, 'value', {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = viewHandler(type, dataView, 0, useProxy);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set(value) {\n writer(dataView, 0, value);\n },\n });\n\n return Object.seal(view);\n}\n","/* eslint-disable no-shadow */\nimport { getDataView, sizeof, maybeMemoize } from './utils';\nimport { createReader } from './visitors/reader';\nimport { createWriter } from './visitors/writer';\n\nexport { createView } from './visitors/view';\n\n// Since type schemas are immutable, we should always create the same code for the same object\nconst createReaderMemoized = maybeMemoize(createReader);\nconst createWriterMemoized = maybeMemoize(createWriter);\n\n/**\n * Create a decode function for converting a buffer into its JavaScript representation\n */\nexport function createDecoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const reader = createReaderMemoized(type);\n return function decode(buffer, data) {\n if (buffer === undefined) {\n throw new TypeError('You must specify the buffer the decode');\n }\n const dataView = getDataView(buffer);\n return reader(dataView, 0, data);\n };\n}\n\n/**\n * Create an encode function for serializing a JavaScript object or value into a buffer\n */\nexport function createEncoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const writer = createWriterMemoized(type);\n return function encode(data, buffer = new ArrayBuffer(sizeof(type))) {\n if (data === undefined) {\n throw new TypeError('You must specify the data to encode');\n }\n const dataView = getDataView(buffer);\n if (sizeof(dataView) < sizeof(type)) {\n throw new RangeError('The provided buffer is too small to store the encoded type');\n }\n writer(dataView, 0, data);\n return buffer;\n };\n}\n\n/**\n * Create a converter object that contains both an encoder and a decoder\n */\nexport function createConverter(type) {\n /* istanbul ignore next */\n const encode = createEncoder(type);\n /* istanbul ignore next */\n const decode = createDecoder(type);\n /* istanbul ignore next */\n return { type, encode, decode };\n}\n\n/**\n * Converting a buffer into its JavaScript representation\n * @deprecated\n */\nexport function decode(type, buffer, data) {\n const decode = createDecoder(type);\n return decode(buffer, data);\n}\n\n/**\n * Serialize a JavaScript object or value into a buffer\n * @deprecated\n */\nexport function encode(type, data, buffer) {\n const encode = createEncoder(type);\n return encode(data, buffer);\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":null,"sources":["../src/utils.js","../src/types.js","../src/visitors/reader.js","../src/visitors/writer.js","../src/visitors/view.js","../src/converters.js"],"sourcesContent":["/**\n * Whether the running system is little endian (true = LE, false = BE)\n */\nexport const systemLittleEndian = (typeof os === 'object')\n /* eslint-disable no-undef */\n ? os.endianness() === 'LE'\n /* eslint-enable no-undef */\n : new Uint32Array(new Uint8Array([0x11, 0x22, 0x33, 0x44]).buffer)[0] === 0x44332211;\n\n/**\n * Gets the closest multiple of byteAlignment from byteOffset (base-2 only)\n */\nexport function align(byteOffset, byteAlignment) {\n /* eslint-disable no-mixed-operators */\n return (byteOffset + byteAlignment - 1) & ~(byteAlignment - 1);\n}\n\n/**\n * The byte alignment of the given type\n */\nexport function alignof({ byteAlignment = 0 } = {}) {\n return byteAlignment;\n}\n\n/**\n * The byte size of the type, excluding alignment padding\n */\nexport function sizeof({ byteLength = 0 } = {}) {\n return byteLength;\n}\n\n/**\n * The byte size of the type, including alignment padding\n */\nexport function strideof(type, byteAlignment = alignof(type)) {\n return align(sizeof(type), byteAlignment);\n}\n\nexport function createMask(bits) {\n return (bits <= 0) ? 0 : 0xFFFFFFFF >>> (32 - bits);\n}\n\nexport function createVariable(name, stackDepth = 0) {\n return `${name}${stackDepth}`;\n}\n\n/* eslint-disable no-param-reassign, prefer-rest-params, no-restricted-syntax */\nexport const assign = Object.assign ||/* istanbul ignore next */ function assign(target) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n target = Object(target);\n for (let index = 1, len = arguments.length; index < len; index++) {\n const source = Object(arguments[index]);\n if (source != null) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n};\n\nexport function getDataView(data) {\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n } else if (ArrayBuffer.isView(data)) {\n const { buffer, byteOffset, byteLength } = data;\n return new DataView(buffer, byteOffset, byteLength);\n }\n throw new TypeError('Invalid input data');\n}\n\n// Memoize if WeakMap if supported, otherwise passthrough\nexport const maybeMemoize = (() => {\n if (typeof WeakMap === 'function') {\n return function memoize(fn) {\n const cache = new WeakMap();\n return function memoized(key) {\n if (!cache.has(key)) {\n cache.set(key, fn(key));\n }\n return cache.get(key);\n };\n };\n }\n /* istanbul ignore next */\n return function passthrough(fn) {\n return fn;\n };\n})();\n","/* eslint-disable no-param-reassign */\nimport { systemLittleEndian, align, assign, alignof } from './utils';\n\nfunction createNumberType(kind, size, littleEndian = systemLittleEndian) {\n return Object.freeze({\n tag: 'Number',\n kind,\n byteLength: size,\n byteAlignment: size,\n littleEndian,\n });\n}\n\nexport const boolean = Object.freeze({ tag: 'Boolean', byteLength: 1, byteAlignment: 1 });\nexport const bool = boolean;\n\nexport const int8 = createNumberType('Int8', 1);\nexport const uint8 = createNumberType('Uint8', 1);\n\nexport const int16 = createNumberType('Int16', 2);\nexport const int16le = createNumberType('Int16', 2, true);\nexport const int16be = createNumberType('Int16', 2, false);\n\nexport const uint16 = createNumberType('Uint16', 2);\nexport const uint16le = createNumberType('Uint16', 2, true);\nexport const uint16be = createNumberType('Uint16', 2, false);\n\nexport const int32 = createNumberType('Int32', 4);\nexport const int32le = createNumberType('Int32', 4, true);\nexport const int32be = createNumberType('Int32', 4, false);\n\nexport const uint32 = createNumberType('Uint32', 4);\nexport const uint32le = createNumberType('Uint32', 4, true);\nexport const uint32be = createNumberType('Uint32', 4, false);\n\nexport const float32 = createNumberType('Float32', 4);\nexport const float32le = createNumberType('Float32', 4, true);\nexport const float32be = createNumberType('Float32', 4, false);\n\nexport const float64 = createNumberType('Float64', 8);\nexport const float64le = createNumberType('Float64', 8, true);\nexport const float64be = createNumberType('Float64', 8, false);\n\n/**\n * Create a string type.\n */\nexport function string(maxLength, encoding = 'utf8') {\n if (maxLength === undefined) {\n throw new TypeError('You must specify a max length for the string!');\n }\n\n return Object.freeze({\n tag: 'String',\n byteLength: maxLength,\n byteAlignment: 1,\n encoding,\n });\n}\n\n/**\n * Create an array type.\n */\nexport function array(element, length, { pack } = {}) {\n if (element === undefined) {\n throw new TypeError('You must specify the array element type!');\n }\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the array!');\n }\n\n return Object.freeze({\n tag: 'Array',\n byteLength: length * element.byteLength,\n byteAlignment: pack || element.byteAlignment,\n length,\n element,\n });\n}\n\nfunction offsetHelper(tag, elements, inject, pack = 0) {\n let byteOffset = 0;\n let maxByteAlignment = 0;\n\n const members = Object.freeze(elements.map(element => {\n const { byteLength, byteAlignment } = element;\n\n byteOffset = align(byteOffset, pack || byteAlignment);\n\n const result = { byteOffset, element };\n\n if (inject !== undefined) {\n assign(result, inject(element));\n }\n\n byteOffset += byteLength;\n maxByteAlignment = Math.max(maxByteAlignment, byteAlignment);\n\n return Object.freeze(result);\n }));\n\n return Object.freeze({\n tag,\n byteLength: byteOffset,\n byteAlignment: pack || maxByteAlignment,\n members,\n });\n}\n\n/**\n * Create a tuple type.\n */\nexport function tuple(...elements) {\n return offsetHelper('Tuple', elements);\n}\n\nfunction injectName({ name }) {\n return { name };\n}\n\n/**\n * Create a struct type.\n */\nexport function struct(members, { reorder = false, pack = 0 } = {}) {\n if (members === undefined) {\n throw new TypeError('You must specify the struct members!');\n }\n\n pack = Number(pack);\n const memberNames = Object.keys(members);\n\n if (reorder) {\n memberNames.sort((a, b) => alignof(members[a]) - alignof(members[b]));\n }\n\n const sortedMembers = memberNames.map(name => assign({ name }, members[name]));\n\n return offsetHelper('Struct', sortedMembers, injectName, pack);\n}\n\n/**\n * Create a bitfield type.\n */\nexport function bitfield(members, element = uint32) {\n if (members === undefined) {\n throw new TypeError('You must specify the bitfield members!');\n }\n\n const memberNames = Object.keys(members);\n const totalBits = memberNames.reduce((sum, name) => sum + members[name], 0);\n\n if (totalBits > 8 * element.byteLength) {\n throw new RangeError('Sum of bitfield widths is too large for storage element');\n }\n\n return Object.freeze({\n tag: 'Bitfield',\n byteLength: element.byteLength,\n byteAlignment: element.byteAlignment,\n members: Object.freeze(memberNames.map(name => Object.freeze({ name, bits: members[name] }))),\n element,\n });\n}\n\nexport function buffer(length) {\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the buffer!');\n }\n\n return Object.freeze({\n tag: 'Buffer',\n byteLength: length,\n byteAlignment: 1,\n });\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const readerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = dataView.get${kind}(${byteOffsetVar}, ${littleEndian});`;\n },\n\n Boolean(_, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = Boolean(dataView.getUint8(${byteOffsetVar}));`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const arrayVar = createVariable('array', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n var ${arrayVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n var ${indexVar} = ${arrayVar}.indexOf(0);\n if (${indexVar} >= 0) {\n ${arrayVar} = ${arrayVar}.subarray(0, ${indexVar});\n }\n ${(() => {\n if (typeof Buffer === 'function') {\n return `${resultVar} = new Buffer(${arrayVar}).toString(${JSON.stringify(encoding)});`;\n }\n\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return `${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});`;\n }\n\n /* istanbul ignore next */\n return `${resultVar} = String.fromCharCode.apply(String, ${arrayVar});`;\n })()}\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${length});\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerResultVar} = ${resultVar}[${indexVar}];\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${indexVar}] = ${innerResultVar};\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${members.length});\n }\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerResultVar} = ${resultVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${i}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyStruct = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyStruct};\n }\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerResultVar} = ${resultVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyBitfield = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyBitfield};\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerResultVar};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${members.map(({ name, bits }) => `\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar} & ${createMask(bits)};\n ${innerResultVar} >>>= ${bits};\n `).join('\\n')}\n `;\n },\n\n Buffer({ byteLength }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n if (${resultVar} === void 0 ||\n ${resultVar}.buffer !== dataView.buffer ||\n ${resultVar}.byteLength !== ${byteOffsetVar} ||\n ${resultVar}.byteOffset !== ${byteLength}) {\n ${resultVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n }\n `;\n },\n});\n\nexport function createReader(type) {\n const resultVar = createVariable('result');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, resultVar, `\n \"use strict\";\n ${readerVisitor[type.tag](type, 0)}\n return ${resultVar};\n `);\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const writerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.set${kind}(${byteOffsetVar}, ${dataVar}, ${littleEndian});`;\n },\n\n Boolean(_, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.setUint8(${byteOffsetVar}, Number(${dataVar}));`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const lengthVar = createVariable('length', stackDepth);\n\n if (typeof Buffer === 'function') {\n return `\n new Buffer(${dataVar}, ${JSON.stringify(encoding)}).copy(new Buffer(dataView.buffer, dataView.byteOffset, dataView.byteLength), ${byteOffsetVar});\n `;\n }\n\n /* istanbul ignore next */\n if (typeof TextEncoder === 'function') {\n return `\n new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength).set(new TextDecoder(${JSON.stringify(encoding)}).encode(${dataVar}));\n `;\n }\n\n /* istanbul ignore next */\n return `\n ${dataVar} = new String(${dataVar});\n for (var ${indexVar} = 0, ${lengthVar} = ${dataVar}.length; ${indexVar} < ${lengthVar}; ++${indexVar}) {\n dataView.setUint8(${byteOffsetVar} + ${indexVar}, ${dataVar}.charCodeAt(${indexVar}));\n }\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerDataVar} = ${dataVar}[${indexVar}];\n ${writerVisitor[element.tag](element, innerStackDepth)}\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerDataVar} = ${dataVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerDataVar} = ${dataVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerDataVar} = 0;\n ${members.slice().reverse().map(({ name, bits }) => `\n ${innerDataVar} <<= ${bits};\n ${innerDataVar} |= ${dataVar}[${JSON.stringify(name)}] & ${createMask(bits)};\n `).join('\\n')}\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `;\n },\n\n Buffer({ byteLength }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n if (${dataVar}.buffer !== dataView.buffer ||\n ${dataVar}.byteLength !== ${byteOffsetVar} ||\n ${dataVar}.byteOffset !== ${byteLength}) {\n new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength}).set(${dataVar});\n }\n `;\n },\n});\n\nexport function createWriter(type) {\n const dataVar = createVariable('data');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, dataVar, `\n \"use strict\";\n ${writerVisitor[type.tag](type, 0)}\n `);\n}\n","import { createReader } from './reader';\nimport { createWriter } from './writer';\nimport { sizeof, strideof, getDataView, createMask } from '../utils';\n\nconst SUPPORTS_PROXY = typeof Proxy === 'function';\n\nfunction createArrayProxy(length, { get, set, useProxy = SUPPORTS_PROXY } = {}) {\n const array = new Array(length);\n\n // Lazily compute properties if proxy is available\n if (useProxy) {\n return new Proxy(array, {\n has(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n return (index >= 0) && (index < length);\n }\n return key in target;\n },\n\n get(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n if ((index >= 0) && (index < length)) {\n let cache;\n if (Reflect.has(target, key)) {\n cache = target[key];\n } else {\n cache = get(index);\n if (typeof cache === 'object') {\n /* eslint-disable no-param-reassign */\n target[key] = cache;\n /* eslint-enable */\n }\n }\n return cache;\n }\n }\n return target[key];\n },\n\n set(target, key, value) {\n // Check that key is either a number or a numeric string\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n // Check bounds\n if ((index >= 0) && (index < length)) {\n return set(index, value) || true;\n }\n }\n // Don't allow any other properties to be changed\n return false;\n },\n });\n }\n\n // Eagerly compute properties using Object.defineProperty\n for (let i = 0; i < length; ++i) {\n let cache;\n Object.defineProperty(array, i, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(i);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, i),\n });\n }\n\n return Object.freeze(array);\n}\n\nfunction createObjectProxy(keys, { get, set } = {}) {\n const object = {};\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let cache;\n Object.defineProperty(object, key, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(key);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, key),\n });\n }\n\n return Object.freeze(object);\n}\n\nexport const viewVisitor = Object.freeze({\n Number({ littleEndian, kind }, dataView, byteOffset) {\n return dataView[`get${kind}`](byteOffset, littleEndian);\n },\n\n Boolean(_, dataView, byteOffset) {\n return Boolean(dataView.getUint8(byteOffset));\n },\n\n String({ byteLength, encoding }, dataView, byteOffset) {\n let array = new Uint8Array(dataView.buffer, byteOffset, byteLength);\n\n const index = array.indexOf(0);\n if (index >= 0) {\n array = array.subarray(0, index);\n }\n\n if (typeof Buffer === 'function') {\n return new Buffer(array).toString(encoding);\n }\n\n /* eslint-disable no-undef */\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return new TextDecoder(encoding).decode(array);\n }\n /* eslint-enable no-undef */\n\n /* eslint-disable prefer-spread */\n /* istanbul ignore next */\n return String.fromCharCode.apply(String, array);\n /* eslint-enable prefer-spread */\n },\n\n Array({ length, element }, dataView, byteOffset, useProxy = length > 20) {\n const elementProxyHandler = viewVisitor[element.tag];\n const elementWriter = createWriter(element);\n const byteStride = strideof(element);\n\n return createArrayProxy(length, {\n useProxy,\n get(i) {\n const elementByteOffset = byteOffset + (byteStride * i);\n return elementProxyHandler(element, dataView, elementByteOffset, useProxy);\n },\n set(i, value) {\n const elementByteOffset = byteOffset + (byteStride * i);\n elementWriter(dataView, elementByteOffset, value);\n },\n });\n },\n\n Tuple({ members }, dataView, byteOffset, useProxy) {\n const handlers = members.map(member => ({\n element: member.element,\n proxyHandler: viewVisitor[member.element.tag],\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n }));\n\n return createArrayProxy(members.length, {\n useProxy: false,\n get(i) {\n const { element, proxyHandler, totalByteOffset } = handlers[i];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(i, value) {\n const { writer, totalByteOffset } = handlers[i];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Struct({ members }, dataView, byteOffset, useProxy) {\n const names = members.map(member => member.name);\n const membersByName = members.reduce((obj, member) => {\n /* eslint-disable no-param-reassign */\n obj[member.name] = {\n element: member.element,\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n proxyHandler: viewVisitor[member.element.tag],\n };\n /* eslint-enable */\n return obj;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { element, proxyHandler, totalByteOffset } = membersByName[name];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(name, value) {\n const { writer, totalByteOffset } = membersByName[name];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Bitfield({ element, members }, dataView, byteOffset) {\n const reader = createReader(element);\n const writer = createWriter(element);\n\n const names = members.map(member => member.name);\n\n let currentBitOffset = 0;\n const infoByName = members.reduce((info, { name, bits }) => {\n const bitOffset = currentBitOffset;\n const mask = createMask(bits);\n const clearMask = ~(mask << bitOffset);\n /* eslint-disable no-param-reassign */\n info[name] = { bitOffset, mask, clearMask };\n /* eslint-enable */\n currentBitOffset += bits;\n return info;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { bitOffset, mask } = infoByName[name];\n const elementValue = reader(dataView, byteOffset);\n return (elementValue >>> bitOffset) & mask;\n },\n set(name, value) {\n const { bitOffset, clearMask, mask } = infoByName[name];\n let elementValue = reader(dataView, byteOffset);\n elementValue &= clearMask;\n elementValue |= (value & mask) << bitOffset;\n writer(dataView, byteOffset, elementValue);\n },\n });\n },\n\n Buffer({ byteLength }, dataView, byteOffset) {\n return new Uint8Array(dataView.buffer, byteOffset, byteLength);\n },\n});\n\nexport function createView(type, buffer = new ArrayBuffer(sizeof(type)), useProxy) {\n const dataView = getDataView(buffer);\n\n const viewHandler = viewVisitor[type.tag];\n const writer = createWriter(type);\n\n const view = {\n buffer: dataView.buffer,\n byteOffset: dataView.byteOffset,\n byteLength: dataView.byteLength,\n };\n\n let cache;\n Object.defineProperty(view, 'value', {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = viewHandler(type, dataView, 0, useProxy);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set(value) {\n writer(dataView, 0, value);\n },\n });\n\n return Object.seal(view);\n}\n","/* eslint-disable no-shadow */\nimport { getDataView, sizeof, maybeMemoize } from './utils';\nimport { createReader } from './visitors/reader';\nimport { createWriter } from './visitors/writer';\n\nexport { createView } from './visitors/view';\n\n// Since type schemas are immutable, we should always create the same code for the same object\nconst createReaderMemoized = maybeMemoize(createReader);\nconst createWriterMemoized = maybeMemoize(createWriter);\n\n/**\n * Create a decode function for converting a buffer into its JavaScript representation\n */\nexport function createDecoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const reader = createReaderMemoized(type);\n return function decode(buffer, data) {\n if (buffer === undefined) {\n throw new TypeError('You must specify the buffer the decode');\n }\n const dataView = getDataView(buffer);\n return reader(dataView, 0, data);\n };\n}\n\n/**\n * Create an encode function for serializing a JavaScript object or value into a buffer\n */\nexport function createEncoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const writer = createWriterMemoized(type);\n return function encode(data, buffer = new ArrayBuffer(sizeof(type))) {\n if (data === undefined) {\n throw new TypeError('You must specify the data to encode');\n }\n const dataView = getDataView(buffer);\n if (sizeof(dataView) < sizeof(type)) {\n throw new RangeError('The provided buffer is too small to store the encoded type');\n }\n writer(dataView, 0, data);\n return buffer;\n };\n}\n\n/**\n * Create a converter object that contains both an encoder and a decoder\n */\nexport function createConverter(type) {\n /* istanbul ignore next */\n const encode = createEncoder(type);\n /* istanbul ignore next */\n const decode = createDecoder(type);\n /* istanbul ignore next */\n return { type, encode, decode };\n}\n\n/**\n * Converting a buffer into its JavaScript representation\n * @deprecated\n */\nexport function decode(type, buffer, data) {\n const decode = createDecoder(type);\n return decode(buffer, data);\n}\n\n/**\n * Serialize a JavaScript object or value into a buffer\n * @deprecated\n */\nexport function encode(type, data, buffer) {\n const encode = createEncoder(type);\n return encode(data, buffer);\n}\n"],"names":[],"mappings":"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"}

@@ -130,2 +130,5 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {

var boolean = Object.freeze({ tag: 'Boolean', byteLength: 1, byteAlignment: 1 });
var bool = boolean;
var int8 = createNumberType('Int8', 1);

@@ -284,3 +287,4 @@ var uint8 = createNumberType('Uint8', 1);

*/
function bitfield(members) { var element = arguments.length <= 1 || arguments[1] === undefined ? uint32 : arguments[1];
function bitfield(members) {
var element = arguments.length <= 1 || arguments[1] === undefined ? uint32 : arguments[1];

@@ -311,2 +315,13 @@ if (members === undefined) {

function buffer(length) { if (length === undefined || typeof length !== 'number') {
throw new TypeError('You must specify a length of the buffer!');
}
return Object.freeze({
tag: 'Buffer',
byteLength: length,
byteAlignment: 1
});
}
var readerVisitor = Object.freeze({

@@ -322,2 +337,8 @@ Number: function Number(_ref, stackDepth) {

},
Boolean: function Boolean(_, stackDepth) {
var resultVar = createVariable('result', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return resultVar + ' = Boolean(dataView.getUint8(' + byteOffsetVar + '));';
},
String: function String(_ref2, stackDepth) {

@@ -416,2 +437,10 @@ var byteLength = _ref2.byteLength;

}).join('\n') + '\n ';
},
Buffer: function Buffer(_ref12, stackDepth) {
var byteLength = _ref12.byteLength;
var resultVar = createVariable('result', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return '\n if (' + resultVar + ' === void 0 ||\n ' + resultVar + '.buffer !== dataView.buffer ||\n ' + resultVar + '.byteLength !== ' + byteOffsetVar + ' ||\n ' + resultVar + '.byteOffset !== ' + byteLength + ') {\n ' + resultVar + ' = new Uint8Array(dataView.buffer, ' + byteOffsetVar + ', ' + byteLength + ');\n }\n ';
}

@@ -436,2 +465,8 @@ });

},
Boolean: function Boolean(_, stackDepth) {
var dataVar = createVariable('data', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return 'dataView.setUint8(' + byteOffsetVar + ', Number(' + dataVar + '));';
},
String: function String(_ref2, stackDepth) {

@@ -520,2 +555,10 @@ var byteLength = _ref2.byteLength;

}).join('\n') + '\n ' + writerVisitor[element.tag](element, innerStackDepth) + '\n ';
},
Buffer: function Buffer(_ref10, stackDepth) {
var byteLength = _ref10.byteLength;
var dataVar = createVariable('data', stackDepth);
var byteOffsetVar = createVariable('byteOffset', stackDepth);
return '\n if (' + dataVar + '.buffer !== dataView.buffer ||\n ' + dataVar + '.byteLength !== ' + byteOffsetVar + ' ||\n ' + dataVar + '.byteOffset !== ' + byteLength + ') {\n new Uint8Array(dataView.buffer, ' + byteOffsetVar + ', ' + byteLength + ').set(' + dataVar + ');\n }\n ';
}

@@ -659,5 +702,55 @@ });

},
Array: function Array(_ref4, dataView, byteOffset) {
var length = _ref4.length;
var element = _ref4.element;
Boolean: function (_Boolean) {
function Boolean(_x3, _x4, _x5) {
return _Boolean.apply(this, arguments);
}
Boolean.toString = function () {
return _Boolean.toString();
};
return Boolean;
}(function (_, dataView, byteOffset) {
return Boolean(dataView.getUint8(byteOffset));
}),
String: function (_String) {
function String(_x6, _x7, _x8) {
return _String.apply(this, arguments);
}
String.toString = function () {
return _String.toString();
};
return String;
}(function (_ref4, dataView, byteOffset) {
var byteLength = _ref4.byteLength;
var encoding = _ref4.encoding;
var array = new Uint8Array(dataView.buffer, byteOffset, byteLength);
var index = array.indexOf(0);
if (index >= 0) {
array = array.subarray(0, index);
}
if (typeof Buffer === 'function') {
return new Buffer(array).toString(encoding);
}
/* eslint-disable no-undef */
/* istanbul ignore next */
if (typeof TextDecoder === 'function') {
return new TextDecoder(encoding).decode(array);
}
/* eslint-enable no-undef */
/* eslint-disable prefer-spread */
/* istanbul ignore next */
return String.fromCharCode.apply(String, array);
/* eslint-enable prefer-spread */
}),
Array: function Array(_ref5, dataView, byteOffset) {
var length = _ref5.length;
var element = _ref5.element;
var useProxy = arguments.length <= 3 || arguments[3] === undefined ? length > 20 : arguments[3];

@@ -681,4 +774,4 @@

},
Tuple: function Tuple(_ref5, dataView, byteOffset, useProxy) {
var members = _ref5.members;
Tuple: function Tuple(_ref6, dataView, byteOffset, useProxy) {
var members = _ref6.members;

@@ -713,4 +806,4 @@ var handlers = members.map(function (member) {

},
Struct: function Struct(_ref6, dataView, byteOffset, useProxy) {
var members = _ref6.members;
Struct: function Struct(_ref7, dataView, byteOffset, useProxy) {
var members = _ref7.members;

@@ -722,7 +815,8 @@ var names = members.map(function (member) {

/* eslint-disable no-param-reassign */
obj[member.name] = assign({}, member, {
obj[member.name] = {
element: member.element,
writer: createWriter(member.element),
totalByteOffset: byteOffset + member.byteOffset,
proxyHandler: viewVisitor[member.element.tag]
});
};
/* eslint-enable */

@@ -750,5 +844,5 @@ return obj;

},
Bitfield: function Bitfield(_ref7, dataView, byteOffset) {
var element = _ref7.element;
var members = _ref7.members;
Bitfield: function Bitfield(_ref8, dataView, byteOffset) {
var element = _ref8.element;
var members = _ref8.members;

@@ -763,5 +857,5 @@ var reader = createReader(element);

var currentBitOffset = 0;
var infoByName = members.reduce(function (info, _ref8) {
var name = _ref8.name;
var bits = _ref8.bits;
var infoByName = members.reduce(function (info, _ref9) {
var name = _ref9.name;
var bits = _ref9.bits;

@@ -799,2 +893,7 @@ var bitOffset = currentBitOffset;

});
},
Buffer: function Buffer(_ref10, dataView, byteOffset) {
var byteLength = _ref10.byteLength;
return new Uint8Array(dataView.buffer, byteOffset, byteLength);
}

@@ -913,3 +1012,3 @@ });

export { systemLittleEndian, sizeof, alignof, strideof, int8, uint8, int16, int16le, int16be, uint16, uint16le, uint16be, int32, int32le, int32be, uint32, uint32le, uint32be, float32, float32le, float32be, float64, float64le, float64be, string, array, tuple, struct, bitfield, createDecoder, createEncoder, createConverter, decode, encode, createView };
export { systemLittleEndian, sizeof, alignof, strideof, boolean, bool, int8, uint8, int16, int16le, int16be, uint16, uint16le, uint16be, int32, int32le, int32be, uint32, uint32le, uint32be, float32, float32le, float32be, float64, float64le, float64be, string, array, tuple, struct, bitfield, buffer, createDecoder, createEncoder, createConverter, decode, encode, createView };
//# sourceMappingURL=structly.mjs.map

@@ -1,1 +0,1 @@

{"version":3,"file":null,"sources":["../src/utils.js","../src/types.js","../src/visitors/reader.js","../src/visitors/writer.js","../src/visitors/view.js","../src/converters.js"],"sourcesContent":["/**\n * Whether the running system is little endian (true = LE, false = BE)\n */\nexport const systemLittleEndian = (typeof os === 'object')\n /* eslint-disable no-undef */\n ? os.endianness() === 'LE'\n /* eslint-enable no-undef */\n : new Uint32Array(new Uint8Array([0x11, 0x22, 0x33, 0x44]).buffer)[0] === 0x44332211;\n\n/**\n * Gets the closest multiple of byteAlignment from byteOffset (base-2 only)\n */\nexport function align(byteOffset, byteAlignment) {\n /* eslint-disable no-mixed-operators */\n return (byteOffset + byteAlignment - 1) & ~(byteAlignment - 1);\n}\n\n/**\n * The byte alignment of the given type\n */\nexport function alignof({ byteAlignment = 0 } = {}) {\n return byteAlignment;\n}\n\n/**\n * The byte size of the type, excluding alignment padding\n */\nexport function sizeof({ byteLength = 0 } = {}) {\n return byteLength;\n}\n\n/**\n * The byte size of the type, including alignment padding\n */\nexport function strideof(type, byteAlignment = alignof(type)) {\n return align(sizeof(type), byteAlignment);\n}\n\nexport function createMask(bits) {\n return (bits <= 0) ? 0 : 0xFFFFFFFF >>> (32 - bits);\n}\n\nexport function createVariable(name, stackDepth = 0) {\n return `${name}${stackDepth}`;\n}\n\n/* eslint-disable no-param-reassign, prefer-rest-params, no-restricted-syntax */\nexport const assign = Object.assign ||/* istanbul ignore next */ function assign(target) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n target = Object(target);\n for (let index = 1, len = arguments.length; index < len; index++) {\n const source = Object(arguments[index]);\n if (source != null) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n};\n\nexport function getDataView(data) {\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n } else if (ArrayBuffer.isView(data)) {\n const { buffer, byteOffset, byteLength } = data;\n return new DataView(buffer, byteOffset, byteLength);\n }\n throw new TypeError('Invalid input data');\n}\n\n// Memoize if WeakMap if supported, otherwise passthrough\nexport const maybeMemoize = (() => {\n if (typeof WeakMap === 'function') {\n return function memoize(fn) {\n const cache = new WeakMap();\n return function memoized(key) {\n if (!cache.has(key)) {\n cache.set(key, fn(key));\n }\n return cache.get(key);\n };\n };\n }\n /* istanbul ignore next */\n return function passthrough(fn) {\n return fn;\n };\n})();\n","/* eslint-disable no-param-reassign */\nimport { systemLittleEndian, align, assign, alignof } from './utils';\n\nfunction createNumberType(kind, size, littleEndian = systemLittleEndian) {\n return Object.freeze({\n tag: 'Number',\n kind,\n byteLength: size,\n byteAlignment: size,\n littleEndian,\n });\n}\n\nexport const int8 = createNumberType('Int8', 1);\nexport const uint8 = createNumberType('Uint8', 1);\n\nexport const int16 = createNumberType('Int16', 2);\nexport const int16le = createNumberType('Int16', 2, true);\nexport const int16be = createNumberType('Int16', 2, false);\n\nexport const uint16 = createNumberType('Uint16', 2);\nexport const uint16le = createNumberType('Uint16', 2, true);\nexport const uint16be = createNumberType('Uint16', 2, false);\n\nexport const int32 = createNumberType('Int32', 4);\nexport const int32le = createNumberType('Int32', 4, true);\nexport const int32be = createNumberType('Int32', 4, false);\n\nexport const uint32 = createNumberType('Uint32', 4);\nexport const uint32le = createNumberType('Uint32', 4, true);\nexport const uint32be = createNumberType('Uint32', 4, false);\n\nexport const float32 = createNumberType('Float32', 4);\nexport const float32le = createNumberType('Float32', 4, true);\nexport const float32be = createNumberType('Float32', 4, false);\n\nexport const float64 = createNumberType('Float64', 8);\nexport const float64le = createNumberType('Float64', 8, true);\nexport const float64be = createNumberType('Float64', 8, false);\n\n/**\n * Create a string type.\n */\nexport function string(maxLength, encoding = 'utf8') {\n if (maxLength === undefined) {\n throw new TypeError('You must specify a max length for the string!');\n }\n\n return Object.freeze({\n tag: 'String',\n byteLength: maxLength,\n byteAlignment: 1,\n encoding,\n });\n}\n\n/**\n * Create an array type.\n */\nexport function array(element, length, { pack } = {}) {\n if (element === undefined) {\n throw new TypeError('You must specify the array element type!');\n }\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the array!');\n }\n\n return Object.freeze({\n tag: 'Array',\n byteLength: length * element.byteLength,\n byteAlignment: pack || element.byteAlignment,\n length,\n element,\n });\n}\n\nfunction offsetHelper(tag, elements, inject, pack = 0) {\n let byteOffset = 0;\n let maxByteAlignment = 0;\n\n const members = Object.freeze(elements.map(element => {\n const { byteLength, byteAlignment } = element;\n\n byteOffset = align(byteOffset, pack || byteAlignment);\n\n const result = { byteOffset, element };\n\n if (inject !== undefined) {\n assign(result, inject(element));\n }\n\n byteOffset += byteLength;\n maxByteAlignment = Math.max(maxByteAlignment, byteAlignment);\n\n return Object.freeze(result);\n }));\n\n return Object.freeze({\n tag,\n byteLength: byteOffset,\n byteAlignment: pack || maxByteAlignment,\n members,\n });\n}\n\n/**\n * Create a tuple type.\n */\nexport function tuple(...elements) {\n return offsetHelper('Tuple', elements);\n}\n\nfunction injectName({ name }) {\n return { name };\n}\n\n/**\n * Create a struct type.\n */\nexport function struct(members, { reorder = false, pack = 0 } = {}) {\n if (members === undefined) {\n throw new TypeError('You must specify the struct members!');\n }\n\n pack = Number(pack);\n const memberNames = Object.keys(members);\n\n if (reorder) {\n memberNames.sort((a, b) => alignof(members[a]) - alignof(members[b]));\n }\n\n const sortedMembers = memberNames.map(name => assign({ name }, members[name]));\n\n return offsetHelper('Struct', sortedMembers, injectName, pack);\n}\n\n/**\n * Create a bitfield type.\n */\nexport function bitfield(members, element = uint32) {\n if (members === undefined) {\n throw new TypeError('You must specify the bitfield members!');\n }\n\n const memberNames = Object.keys(members);\n const totalBits = memberNames.reduce((sum, name) => sum + members[name], 0);\n\n if (totalBits > 8 * element.byteLength) {\n throw new RangeError('Sum of bitfield widths is too large for storage element');\n }\n\n return Object.freeze({\n tag: 'Bitfield',\n byteLength: element.byteLength,\n byteAlignment: element.byteAlignment,\n members: Object.freeze(memberNames.map(name => Object.freeze({ name, bits: members[name] }))),\n element,\n });\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const readerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = dataView.get${kind}(${byteOffsetVar}, ${littleEndian});`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const arrayVar = createVariable('array', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n var ${arrayVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n var ${indexVar} = ${arrayVar}.indexOf(0);\n if (${indexVar} >= 0) {\n ${arrayVar} = ${arrayVar}.subarray(0, ${indexVar});\n }\n ${(() => {\n if (typeof Buffer === 'function') {\n return `${resultVar} = new Buffer(${arrayVar}).toString(${JSON.stringify(encoding)});`;\n }\n\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return `${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});`;\n }\n\n /* istanbul ignore next */\n return `${resultVar} = String.fromCharCode.apply(String, ${arrayVar});`;\n })()}\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${length});\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerResultVar} = ${resultVar}[${indexVar}];\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${indexVar}] = ${innerResultVar};\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${members.length});\n }\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerResultVar} = ${resultVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${i}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyStruct = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyStruct};\n }\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerResultVar} = ${resultVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyBitfield = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyBitfield};\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerResultVar};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${members.map(({ name, bits }) => `\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar} & ${createMask(bits)};\n ${innerResultVar} >>>= ${bits};\n `).join('\\n')}\n `;\n },\n});\n\nexport function createReader(type) {\n const resultVar = createVariable('result');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, resultVar, `\n \"use strict\";\n ${readerVisitor[type.tag](type, 0)}\n return ${resultVar};\n `);\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const writerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.set${kind}(${byteOffsetVar}, ${dataVar}, ${littleEndian});`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const lengthVar = createVariable('length', stackDepth);\n\n if (typeof Buffer === 'function') {\n return `\n new Buffer(${dataVar}, ${JSON.stringify(encoding)}).copy(new Buffer(dataView.buffer, dataView.byteOffset, dataView.byteLength), ${byteOffsetVar});\n `;\n }\n\n /* istanbul ignore next */\n if (typeof TextEncoder === 'function') {\n return `\n new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength).set(new TextDecoder(${JSON.stringify(encoding)}).encode(${dataVar}));\n `;\n }\n\n /* istanbul ignore next */\n return `\n ${dataVar} = new String(${dataVar});\n for (var ${indexVar} = 0, ${lengthVar} = ${dataVar}.length; ${indexVar} < ${lengthVar}; ++${indexVar}) {\n dataView.setUint8(${byteOffsetVar} + ${indexVar}, ${dataVar}.charCodeAt(${indexVar}));\n }\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerDataVar} = ${dataVar}[${indexVar}];\n ${writerVisitor[element.tag](element, innerStackDepth)}\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerDataVar} = ${dataVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerDataVar} = ${dataVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerDataVar} = 0;\n ${members.slice().reverse().map(({ name, bits }) => `\n ${innerDataVar} <<= ${bits};\n ${innerDataVar} |= ${dataVar}[${JSON.stringify(name)}] & ${createMask(bits)};\n `).join('\\n')}\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `;\n },\n});\n\nexport function createWriter(type) {\n const dataVar = createVariable('data');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, dataVar, `\n \"use strict\";\n ${writerVisitor[type.tag](type, 0)}\n `);\n}\n","import { createReader } from './reader';\nimport { createWriter } from './writer';\nimport { sizeof, strideof, getDataView, assign, createMask } from '../utils';\n\nconst SUPPORTS_PROXY = typeof Proxy === 'function';\n\nfunction createArrayProxy(length, { get, set, useProxy = SUPPORTS_PROXY } = {}) {\n const array = new Array(length);\n\n // Lazily compute properties if proxy is available\n if (useProxy) {\n return new Proxy(array, {\n has(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n return (index >= 0) && (index < length);\n }\n return key in target;\n },\n\n get(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n if ((index >= 0) && (index < length)) {\n let cache;\n if (Reflect.has(target, key)) {\n cache = target[key];\n } else {\n cache = get(index);\n if (typeof cache === 'object') {\n /* eslint-disable no-param-reassign */\n target[key] = cache;\n /* eslint-enable */\n }\n }\n return cache;\n }\n }\n return target[key];\n },\n\n set(target, key, value) {\n // Check that key is either a number or a numeric string\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n // Check bounds\n if ((index >= 0) && (index < length)) {\n return set(index, value) || true;\n }\n }\n // Don't allow any other properties to be changed\n return false;\n },\n });\n }\n\n // Eagerly compute properties using Object.defineProperty\n for (let i = 0; i < length; ++i) {\n let cache;\n Object.defineProperty(array, i, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(i);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, i),\n });\n }\n\n return Object.freeze(array);\n}\n\nfunction createObjectProxy(keys, { get, set } = {}) {\n const object = {};\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let cache;\n Object.defineProperty(object, key, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(key);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, key),\n });\n }\n\n return Object.freeze(object);\n}\n\nexport const viewVisitor = Object.freeze({\n Number({ littleEndian, kind }, dataView, byteOffset) {\n return dataView[`get${kind}`](byteOffset, littleEndian);\n },\n\n Array({ length, element }, dataView, byteOffset, useProxy = length > 20) {\n const elementProxyHandler = viewVisitor[element.tag];\n const elementWriter = createWriter(element);\n const byteStride = strideof(element);\n\n return createArrayProxy(length, {\n useProxy,\n get(i) {\n const elementByteOffset = byteOffset + (byteStride * i);\n return elementProxyHandler(element, dataView, elementByteOffset, useProxy);\n },\n set(i, value) {\n const elementByteOffset = byteOffset + (byteStride * i);\n elementWriter(dataView, elementByteOffset, value);\n },\n });\n },\n\n Tuple({ members }, dataView, byteOffset, useProxy) {\n const handlers = members.map(member => ({\n element: member.element,\n proxyHandler: viewVisitor[member.element.tag],\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n }));\n\n return createArrayProxy(members.length, {\n useProxy: false,\n get(i) {\n const { element, proxyHandler, totalByteOffset } = handlers[i];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(i, value) {\n const { writer, totalByteOffset } = handlers[i];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Struct({ members }, dataView, byteOffset, useProxy) {\n const names = members.map(member => member.name);\n const membersByName = members.reduce((obj, member) => {\n /* eslint-disable no-param-reassign */\n obj[member.name] = assign({}, member, {\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n proxyHandler: viewVisitor[member.element.tag],\n });\n /* eslint-enable */\n return obj;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { element, proxyHandler, totalByteOffset } = membersByName[name];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(name, value) {\n const { writer, totalByteOffset } = membersByName[name];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Bitfield({ element, members }, dataView, byteOffset) {\n const reader = createReader(element);\n const writer = createWriter(element);\n\n const names = members.map(member => member.name);\n\n let currentBitOffset = 0;\n const infoByName = members.reduce((info, { name, bits }) => {\n const bitOffset = currentBitOffset;\n const mask = createMask(bits);\n const clearMask = ~(mask << bitOffset);\n /* eslint-disable no-param-reassign */\n info[name] = { bitOffset, mask, clearMask };\n /* eslint-enable */\n currentBitOffset += bits;\n return info;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { bitOffset, mask } = infoByName[name];\n const elementValue = reader(dataView, byteOffset);\n return (elementValue >>> bitOffset) & mask;\n },\n set(name, value) {\n const { bitOffset, clearMask, mask } = infoByName[name];\n let elementValue = reader(dataView, byteOffset);\n elementValue &= clearMask;\n elementValue |= (value & mask) << bitOffset;\n writer(dataView, byteOffset, elementValue);\n },\n });\n },\n});\n\nexport function createView(type, buffer = new ArrayBuffer(sizeof(type)), useProxy) {\n const dataView = getDataView(buffer);\n\n const viewHandler = viewVisitor[type.tag];\n const writer = createWriter(type);\n\n const view = {\n buffer: dataView.buffer,\n byteOffset: dataView.byteOffset,\n byteLength: dataView.byteLength,\n };\n\n let cache;\n Object.defineProperty(view, 'value', {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = viewHandler(type, dataView, 0, useProxy);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set(value) {\n writer(dataView, 0, value);\n },\n });\n\n return Object.seal(view);\n}\n","/* eslint-disable no-shadow */\nimport { getDataView, sizeof, maybeMemoize } from './utils';\nimport { createReader } from './visitors/reader';\nimport { createWriter } from './visitors/writer';\n\nexport { createView } from './visitors/view';\n\n// Since type schemas are immutable, we should always create the same code for the same object\nconst createReaderMemoized = maybeMemoize(createReader);\nconst createWriterMemoized = maybeMemoize(createWriter);\n\n/**\n * Create a decode function for converting a buffer into its JavaScript representation\n */\nexport function createDecoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const reader = createReaderMemoized(type);\n return function decode(buffer, data) {\n if (buffer === undefined) {\n throw new TypeError('You must specify the buffer the decode');\n }\n const dataView = getDataView(buffer);\n return reader(dataView, 0, data);\n };\n}\n\n/**\n * Create an encode function for serializing a JavaScript object or value into a buffer\n */\nexport function createEncoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const writer = createWriterMemoized(type);\n return function encode(data, buffer = new ArrayBuffer(sizeof(type))) {\n if (data === undefined) {\n throw new TypeError('You must specify the data to encode');\n }\n const dataView = getDataView(buffer);\n if (sizeof(dataView) < sizeof(type)) {\n throw new RangeError('The provided buffer is too small to store the encoded type');\n }\n writer(dataView, 0, data);\n return buffer;\n };\n}\n\n/**\n * Create a converter object that contains both an encoder and a decoder\n */\nexport function createConverter(type) {\n /* istanbul ignore next */\n const encode = createEncoder(type);\n /* istanbul ignore next */\n const decode = createDecoder(type);\n /* istanbul ignore next */\n return { type, encode, decode };\n}\n\n/**\n * Converting a buffer into its JavaScript representation\n * @deprecated\n */\nexport function decode(type, buffer, data) {\n const decode = createDecoder(type);\n return decode(buffer, data);\n}\n\n/**\n * Serialize a JavaScript object or value into a buffer\n * @deprecated\n */\nexport function encode(type, data, buffer) {\n const encode = createEncoder(type);\n return encode(data, buffer);\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":null,"sources":["../src/utils.js","../src/types.js","../src/visitors/reader.js","../src/visitors/writer.js","../src/visitors/view.js","../src/converters.js"],"sourcesContent":["/**\n * Whether the running system is little endian (true = LE, false = BE)\n */\nexport const systemLittleEndian = (typeof os === 'object')\n /* eslint-disable no-undef */\n ? os.endianness() === 'LE'\n /* eslint-enable no-undef */\n : new Uint32Array(new Uint8Array([0x11, 0x22, 0x33, 0x44]).buffer)[0] === 0x44332211;\n\n/**\n * Gets the closest multiple of byteAlignment from byteOffset (base-2 only)\n */\nexport function align(byteOffset, byteAlignment) {\n /* eslint-disable no-mixed-operators */\n return (byteOffset + byteAlignment - 1) & ~(byteAlignment - 1);\n}\n\n/**\n * The byte alignment of the given type\n */\nexport function alignof({ byteAlignment = 0 } = {}) {\n return byteAlignment;\n}\n\n/**\n * The byte size of the type, excluding alignment padding\n */\nexport function sizeof({ byteLength = 0 } = {}) {\n return byteLength;\n}\n\n/**\n * The byte size of the type, including alignment padding\n */\nexport function strideof(type, byteAlignment = alignof(type)) {\n return align(sizeof(type), byteAlignment);\n}\n\nexport function createMask(bits) {\n return (bits <= 0) ? 0 : 0xFFFFFFFF >>> (32 - bits);\n}\n\nexport function createVariable(name, stackDepth = 0) {\n return `${name}${stackDepth}`;\n}\n\n/* eslint-disable no-param-reassign, prefer-rest-params, no-restricted-syntax */\nexport const assign = Object.assign ||/* istanbul ignore next */ function assign(target) {\n if (target == null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n target = Object(target);\n for (let index = 1, len = arguments.length; index < len; index++) {\n const source = Object(arguments[index]);\n if (source != null) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n};\n\nexport function getDataView(data) {\n if (data instanceof ArrayBuffer) {\n return new DataView(data);\n } else if (ArrayBuffer.isView(data)) {\n const { buffer, byteOffset, byteLength } = data;\n return new DataView(buffer, byteOffset, byteLength);\n }\n throw new TypeError('Invalid input data');\n}\n\n// Memoize if WeakMap if supported, otherwise passthrough\nexport const maybeMemoize = (() => {\n if (typeof WeakMap === 'function') {\n return function memoize(fn) {\n const cache = new WeakMap();\n return function memoized(key) {\n if (!cache.has(key)) {\n cache.set(key, fn(key));\n }\n return cache.get(key);\n };\n };\n }\n /* istanbul ignore next */\n return function passthrough(fn) {\n return fn;\n };\n})();\n","/* eslint-disable no-param-reassign */\nimport { systemLittleEndian, align, assign, alignof } from './utils';\n\nfunction createNumberType(kind, size, littleEndian = systemLittleEndian) {\n return Object.freeze({\n tag: 'Number',\n kind,\n byteLength: size,\n byteAlignment: size,\n littleEndian,\n });\n}\n\nexport const boolean = Object.freeze({ tag: 'Boolean', byteLength: 1, byteAlignment: 1 });\nexport const bool = boolean;\n\nexport const int8 = createNumberType('Int8', 1);\nexport const uint8 = createNumberType('Uint8', 1);\n\nexport const int16 = createNumberType('Int16', 2);\nexport const int16le = createNumberType('Int16', 2, true);\nexport const int16be = createNumberType('Int16', 2, false);\n\nexport const uint16 = createNumberType('Uint16', 2);\nexport const uint16le = createNumberType('Uint16', 2, true);\nexport const uint16be = createNumberType('Uint16', 2, false);\n\nexport const int32 = createNumberType('Int32', 4);\nexport const int32le = createNumberType('Int32', 4, true);\nexport const int32be = createNumberType('Int32', 4, false);\n\nexport const uint32 = createNumberType('Uint32', 4);\nexport const uint32le = createNumberType('Uint32', 4, true);\nexport const uint32be = createNumberType('Uint32', 4, false);\n\nexport const float32 = createNumberType('Float32', 4);\nexport const float32le = createNumberType('Float32', 4, true);\nexport const float32be = createNumberType('Float32', 4, false);\n\nexport const float64 = createNumberType('Float64', 8);\nexport const float64le = createNumberType('Float64', 8, true);\nexport const float64be = createNumberType('Float64', 8, false);\n\n/**\n * Create a string type.\n */\nexport function string(maxLength, encoding = 'utf8') {\n if (maxLength === undefined) {\n throw new TypeError('You must specify a max length for the string!');\n }\n\n return Object.freeze({\n tag: 'String',\n byteLength: maxLength,\n byteAlignment: 1,\n encoding,\n });\n}\n\n/**\n * Create an array type.\n */\nexport function array(element, length, { pack } = {}) {\n if (element === undefined) {\n throw new TypeError('You must specify the array element type!');\n }\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the array!');\n }\n\n return Object.freeze({\n tag: 'Array',\n byteLength: length * element.byteLength,\n byteAlignment: pack || element.byteAlignment,\n length,\n element,\n });\n}\n\nfunction offsetHelper(tag, elements, inject, pack = 0) {\n let byteOffset = 0;\n let maxByteAlignment = 0;\n\n const members = Object.freeze(elements.map(element => {\n const { byteLength, byteAlignment } = element;\n\n byteOffset = align(byteOffset, pack || byteAlignment);\n\n const result = { byteOffset, element };\n\n if (inject !== undefined) {\n assign(result, inject(element));\n }\n\n byteOffset += byteLength;\n maxByteAlignment = Math.max(maxByteAlignment, byteAlignment);\n\n return Object.freeze(result);\n }));\n\n return Object.freeze({\n tag,\n byteLength: byteOffset,\n byteAlignment: pack || maxByteAlignment,\n members,\n });\n}\n\n/**\n * Create a tuple type.\n */\nexport function tuple(...elements) {\n return offsetHelper('Tuple', elements);\n}\n\nfunction injectName({ name }) {\n return { name };\n}\n\n/**\n * Create a struct type.\n */\nexport function struct(members, { reorder = false, pack = 0 } = {}) {\n if (members === undefined) {\n throw new TypeError('You must specify the struct members!');\n }\n\n pack = Number(pack);\n const memberNames = Object.keys(members);\n\n if (reorder) {\n memberNames.sort((a, b) => alignof(members[a]) - alignof(members[b]));\n }\n\n const sortedMembers = memberNames.map(name => assign({ name }, members[name]));\n\n return offsetHelper('Struct', sortedMembers, injectName, pack);\n}\n\n/**\n * Create a bitfield type.\n */\nexport function bitfield(members, element = uint32) {\n if (members === undefined) {\n throw new TypeError('You must specify the bitfield members!');\n }\n\n const memberNames = Object.keys(members);\n const totalBits = memberNames.reduce((sum, name) => sum + members[name], 0);\n\n if (totalBits > 8 * element.byteLength) {\n throw new RangeError('Sum of bitfield widths is too large for storage element');\n }\n\n return Object.freeze({\n tag: 'Bitfield',\n byteLength: element.byteLength,\n byteAlignment: element.byteAlignment,\n members: Object.freeze(memberNames.map(name => Object.freeze({ name, bits: members[name] }))),\n element,\n });\n}\n\nexport function buffer(length) {\n if (length === undefined || typeof length !== 'number') {\n throw new TypeError('You must specify a length of the buffer!');\n }\n\n return Object.freeze({\n tag: 'Buffer',\n byteLength: length,\n byteAlignment: 1,\n });\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const readerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = dataView.get${kind}(${byteOffsetVar}, ${littleEndian});`;\n },\n\n Boolean(_, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `${resultVar} = Boolean(dataView.getUint8(${byteOffsetVar}));`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const arrayVar = createVariable('array', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n var ${arrayVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n var ${indexVar} = ${arrayVar}.indexOf(0);\n if (${indexVar} >= 0) {\n ${arrayVar} = ${arrayVar}.subarray(0, ${indexVar});\n }\n ${(() => {\n if (typeof Buffer === 'function') {\n return `${resultVar} = new Buffer(${arrayVar}).toString(${JSON.stringify(encoding)});`;\n }\n\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return `${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});`;\n }\n\n /* istanbul ignore next */\n return `${resultVar} = String.fromCharCode.apply(String, ${arrayVar});`;\n })()}\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${length});\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerResultVar} = ${resultVar}[${indexVar}];\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${indexVar}] = ${innerResultVar};\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = new Array(${members.length});\n }\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerResultVar} = ${resultVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${i}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyStruct = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyStruct};\n }\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerResultVar} = ${resultVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar};\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerResultVar = createVariable('result', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const emptyBitfield = `{ ${members.map(({ name }) => `${JSON.stringify(name)}: undefined`).join(', ')} }`;\n\n return `\n if (${resultVar} === void 0) {\n ${resultVar} = ${emptyBitfield};\n }\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerResultVar};\n ${readerVisitor[element.tag](element, innerStackDepth)}\n ${members.map(({ name, bits }) => `\n ${resultVar}[${JSON.stringify(name)}] = ${innerResultVar} & ${createMask(bits)};\n ${innerResultVar} >>>= ${bits};\n `).join('\\n')}\n `;\n },\n\n Buffer({ byteLength }, stackDepth) {\n const resultVar = createVariable('result', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n if (${resultVar} === void 0 ||\n ${resultVar}.buffer !== dataView.buffer ||\n ${resultVar}.byteLength !== ${byteOffsetVar} ||\n ${resultVar}.byteOffset !== ${byteLength}) {\n ${resultVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});\n }\n `;\n },\n});\n\nexport function createReader(type) {\n const resultVar = createVariable('result');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, resultVar, `\n \"use strict\";\n ${readerVisitor[type.tag](type, 0)}\n return ${resultVar};\n `);\n}\n","/* eslint-disable max-len, no-new-func */\nimport { strideof, createMask, createVariable } from '../utils';\n\nexport const writerVisitor = Object.freeze({\n Number({ littleEndian, kind }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.set${kind}(${byteOffsetVar}, ${dataVar}, ${littleEndian});`;\n },\n\n Boolean(_, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `dataView.setUint8(${byteOffsetVar}, Number(${dataVar}));`;\n },\n\n String({ byteLength, encoding }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const lengthVar = createVariable('length', stackDepth);\n\n if (typeof Buffer === 'function') {\n return `\n new Buffer(${dataVar}, ${JSON.stringify(encoding)}).copy(new Buffer(dataView.buffer, dataView.byteOffset, dataView.byteLength), ${byteOffsetVar});\n `;\n }\n\n /* istanbul ignore next */\n if (typeof TextEncoder === 'function') {\n return `\n new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength).set(new TextDecoder(${JSON.stringify(encoding)}).encode(${dataVar}));\n `;\n }\n\n /* istanbul ignore next */\n return `\n ${dataVar} = new String(${dataVar});\n for (var ${indexVar} = 0, ${lengthVar} = ${dataVar}.length; ${indexVar} < ${lengthVar}; ++${indexVar}) {\n dataView.setUint8(${byteOffsetVar} + ${indexVar}, ${dataVar}.charCodeAt(${indexVar}));\n }\n `;\n },\n\n Array({ byteAlignment, length, element, pack }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const indexVar = createVariable('i', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n const stride = strideof(element, byteAlignment);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n for (var ${indexVar} = 0; ${indexVar} < ${length}; ++${indexVar}) {\n var ${innerDataVar} = ${dataVar}[${indexVar}];\n ${writerVisitor[element.tag](element, innerStackDepth)}\n ${innerByteOffsetVar} += ${stride};\n }\n `;\n },\n\n Tuple({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ element, byteOffset }, i) => `\n var ${innerDataVar} = ${dataVar}[${i}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Struct({ members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n ${members.map(({ name, element, byteOffset }) => `\n var ${innerDataVar} = ${dataVar}[${JSON.stringify(name)}];\n var ${innerByteOffsetVar} = ${byteOffsetVar} + ${byteOffset};\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `).join('\\n')}\n `;\n },\n\n Bitfield({ element, members }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n const innerStackDepth = stackDepth + 1;\n const innerDataVar = createVariable('data', innerStackDepth);\n const innerByteOffsetVar = createVariable('byteOffset', innerStackDepth);\n\n return `\n var ${innerByteOffsetVar} = ${byteOffsetVar};\n var ${innerDataVar} = 0;\n ${members.slice().reverse().map(({ name, bits }) => `\n ${innerDataVar} <<= ${bits};\n ${innerDataVar} |= ${dataVar}[${JSON.stringify(name)}] & ${createMask(bits)};\n `).join('\\n')}\n ${writerVisitor[element.tag](element, innerStackDepth)}\n `;\n },\n\n Buffer({ byteLength }, stackDepth) {\n const dataVar = createVariable('data', stackDepth);\n const byteOffsetVar = createVariable('byteOffset', stackDepth);\n\n return `\n if (${dataVar}.buffer !== dataView.buffer ||\n ${dataVar}.byteLength !== ${byteOffsetVar} ||\n ${dataVar}.byteOffset !== ${byteLength}) {\n new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength}).set(${dataVar});\n }\n `;\n },\n});\n\nexport function createWriter(type) {\n const dataVar = createVariable('data');\n const byteOffsetVar = createVariable('byteOffset');\n\n return new Function('dataView', byteOffsetVar, dataVar, `\n \"use strict\";\n ${writerVisitor[type.tag](type, 0)}\n `);\n}\n","import { createReader } from './reader';\nimport { createWriter } from './writer';\nimport { sizeof, strideof, getDataView, createMask } from '../utils';\n\nconst SUPPORTS_PROXY = typeof Proxy === 'function';\n\nfunction createArrayProxy(length, { get, set, useProxy = SUPPORTS_PROXY } = {}) {\n const array = new Array(length);\n\n // Lazily compute properties if proxy is available\n if (useProxy) {\n return new Proxy(array, {\n has(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n return (index >= 0) && (index < length);\n }\n return key in target;\n },\n\n get(target, key) {\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n if ((index >= 0) && (index < length)) {\n let cache;\n if (Reflect.has(target, key)) {\n cache = target[key];\n } else {\n cache = get(index);\n if (typeof cache === 'object') {\n /* eslint-disable no-param-reassign */\n target[key] = cache;\n /* eslint-enable */\n }\n }\n return cache;\n }\n }\n return target[key];\n },\n\n set(target, key, value) {\n // Check that key is either a number or a numeric string\n if (typeof key !== 'symbol' && !isNaN(key)) {\n const index = parseInt(key, 10);\n // Check bounds\n if ((index >= 0) && (index < length)) {\n return set(index, value) || true;\n }\n }\n // Don't allow any other properties to be changed\n return false;\n },\n });\n }\n\n // Eagerly compute properties using Object.defineProperty\n for (let i = 0; i < length; ++i) {\n let cache;\n Object.defineProperty(array, i, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(i);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, i),\n });\n }\n\n return Object.freeze(array);\n}\n\nfunction createObjectProxy(keys, { get, set } = {}) {\n const object = {};\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let cache;\n Object.defineProperty(object, key, {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = get(key);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set: set.bind(undefined, key),\n });\n }\n\n return Object.freeze(object);\n}\n\nexport const viewVisitor = Object.freeze({\n Number({ littleEndian, kind }, dataView, byteOffset) {\n return dataView[`get${kind}`](byteOffset, littleEndian);\n },\n\n Boolean(_, dataView, byteOffset) {\n return Boolean(dataView.getUint8(byteOffset));\n },\n\n String({ byteLength, encoding }, dataView, byteOffset) {\n let array = new Uint8Array(dataView.buffer, byteOffset, byteLength);\n\n const index = array.indexOf(0);\n if (index >= 0) {\n array = array.subarray(0, index);\n }\n\n if (typeof Buffer === 'function') {\n return new Buffer(array).toString(encoding);\n }\n\n /* eslint-disable no-undef */\n /* istanbul ignore next */\n if (typeof TextDecoder === 'function') {\n return new TextDecoder(encoding).decode(array);\n }\n /* eslint-enable no-undef */\n\n /* eslint-disable prefer-spread */\n /* istanbul ignore next */\n return String.fromCharCode.apply(String, array);\n /* eslint-enable prefer-spread */\n },\n\n Array({ length, element }, dataView, byteOffset, useProxy = length > 20) {\n const elementProxyHandler = viewVisitor[element.tag];\n const elementWriter = createWriter(element);\n const byteStride = strideof(element);\n\n return createArrayProxy(length, {\n useProxy,\n get(i) {\n const elementByteOffset = byteOffset + (byteStride * i);\n return elementProxyHandler(element, dataView, elementByteOffset, useProxy);\n },\n set(i, value) {\n const elementByteOffset = byteOffset + (byteStride * i);\n elementWriter(dataView, elementByteOffset, value);\n },\n });\n },\n\n Tuple({ members }, dataView, byteOffset, useProxy) {\n const handlers = members.map(member => ({\n element: member.element,\n proxyHandler: viewVisitor[member.element.tag],\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n }));\n\n return createArrayProxy(members.length, {\n useProxy: false,\n get(i) {\n const { element, proxyHandler, totalByteOffset } = handlers[i];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(i, value) {\n const { writer, totalByteOffset } = handlers[i];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Struct({ members }, dataView, byteOffset, useProxy) {\n const names = members.map(member => member.name);\n const membersByName = members.reduce((obj, member) => {\n /* eslint-disable no-param-reassign */\n obj[member.name] = {\n element: member.element,\n writer: createWriter(member.element),\n totalByteOffset: byteOffset + member.byteOffset,\n proxyHandler: viewVisitor[member.element.tag],\n };\n /* eslint-enable */\n return obj;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { element, proxyHandler, totalByteOffset } = membersByName[name];\n return proxyHandler(element, dataView, totalByteOffset, useProxy);\n },\n set(name, value) {\n const { writer, totalByteOffset } = membersByName[name];\n writer(dataView, totalByteOffset, value);\n },\n });\n },\n\n Bitfield({ element, members }, dataView, byteOffset) {\n const reader = createReader(element);\n const writer = createWriter(element);\n\n const names = members.map(member => member.name);\n\n let currentBitOffset = 0;\n const infoByName = members.reduce((info, { name, bits }) => {\n const bitOffset = currentBitOffset;\n const mask = createMask(bits);\n const clearMask = ~(mask << bitOffset);\n /* eslint-disable no-param-reassign */\n info[name] = { bitOffset, mask, clearMask };\n /* eslint-enable */\n currentBitOffset += bits;\n return info;\n }, Object.create(null));\n\n return createObjectProxy(names, {\n get(name) {\n const { bitOffset, mask } = infoByName[name];\n const elementValue = reader(dataView, byteOffset);\n return (elementValue >>> bitOffset) & mask;\n },\n set(name, value) {\n const { bitOffset, clearMask, mask } = infoByName[name];\n let elementValue = reader(dataView, byteOffset);\n elementValue &= clearMask;\n elementValue |= (value & mask) << bitOffset;\n writer(dataView, byteOffset, elementValue);\n },\n });\n },\n\n Buffer({ byteLength }, dataView, byteOffset) {\n return new Uint8Array(dataView.buffer, byteOffset, byteLength);\n },\n});\n\nexport function createView(type, buffer = new ArrayBuffer(sizeof(type)), useProxy) {\n const dataView = getDataView(buffer);\n\n const viewHandler = viewVisitor[type.tag];\n const writer = createWriter(type);\n\n const view = {\n buffer: dataView.buffer,\n byteOffset: dataView.byteOffset,\n byteLength: dataView.byteLength,\n };\n\n let cache;\n Object.defineProperty(view, 'value', {\n enumerable: true,\n configurable: false,\n get() {\n if (cache) {\n return cache;\n }\n const result = viewHandler(type, dataView, 0, useProxy);\n if (typeof result === 'object') {\n cache = result;\n }\n return result;\n },\n set(value) {\n writer(dataView, 0, value);\n },\n });\n\n return Object.seal(view);\n}\n","/* eslint-disable no-shadow */\nimport { getDataView, sizeof, maybeMemoize } from './utils';\nimport { createReader } from './visitors/reader';\nimport { createWriter } from './visitors/writer';\n\nexport { createView } from './visitors/view';\n\n// Since type schemas are immutable, we should always create the same code for the same object\nconst createReaderMemoized = maybeMemoize(createReader);\nconst createWriterMemoized = maybeMemoize(createWriter);\n\n/**\n * Create a decode function for converting a buffer into its JavaScript representation\n */\nexport function createDecoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const reader = createReaderMemoized(type);\n return function decode(buffer, data) {\n if (buffer === undefined) {\n throw new TypeError('You must specify the buffer the decode');\n }\n const dataView = getDataView(buffer);\n return reader(dataView, 0, data);\n };\n}\n\n/**\n * Create an encode function for serializing a JavaScript object or value into a buffer\n */\nexport function createEncoder(type) {\n if (type === undefined) {\n throw new TypeError('You must specify a type to convert with');\n }\n const writer = createWriterMemoized(type);\n return function encode(data, buffer = new ArrayBuffer(sizeof(type))) {\n if (data === undefined) {\n throw new TypeError('You must specify the data to encode');\n }\n const dataView = getDataView(buffer);\n if (sizeof(dataView) < sizeof(type)) {\n throw new RangeError('The provided buffer is too small to store the encoded type');\n }\n writer(dataView, 0, data);\n return buffer;\n };\n}\n\n/**\n * Create a converter object that contains both an encoder and a decoder\n */\nexport function createConverter(type) {\n /* istanbul ignore next */\n const encode = createEncoder(type);\n /* istanbul ignore next */\n const decode = createDecoder(type);\n /* istanbul ignore next */\n return { type, encode, decode };\n}\n\n/**\n * Converting a buffer into its JavaScript representation\n * @deprecated\n */\nexport function decode(type, buffer, data) {\n const decode = createDecoder(type);\n return decode(buffer, data);\n}\n\n/**\n * Serialize a JavaScript object or value into a buffer\n * @deprecated\n */\nexport function encode(type, data, buffer) {\n const encode = createEncoder(type);\n return encode(data, buffer);\n}\n"],"names":[],"mappings":"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"}
{
"name": "structly",
"version": "0.3.0",
"version": "0.3.1",
"license": "MIT",

@@ -5,0 +5,0 @@ "description": "Tool for working with binary data types in JavaScript",

@@ -22,3 +22,3 @@ # structly

Structly works great both in Node (>=4) and most browsers.
It supports numbers, arrays, structs, tuples, bitfields and strings.
It supports numbers, booleans, arrays, structs, tuples, bitfields, strings and buffers.

@@ -112,2 +112,3 @@

export function bitfield(members: { [name: string]: number; }, element?: NumberType): BitfieldType;
export function buffer(length: number): BufferType;

@@ -217,2 +218,5 @@

}
export interface BufferType extends Type {
}
```

@@ -12,2 +12,5 @@ export interface Type {

export interface BooleanType extends Type {
}
export interface ArrayType<T extends Type> extends Type {

@@ -45,2 +48,8 @@ length: number;

export interface BufferType extends Type {
}
export const boolean: BooleanType;
export const bool: BooleanType;
export const int8: NumberType;

@@ -78,1 +87,2 @@ export const uint8: NumberType;

export function bitfield(members: { [name: string]: number; }, element?: NumberType): BitfieldType;
export function buffer(length: number): BufferType;

@@ -14,2 +14,5 @@ /* eslint-disable no-param-reassign */

export const boolean = Object.freeze({ tag: 'Boolean', byteLength: 1, byteAlignment: 1 });
export const bool = boolean;
export const int8 = createNumberType('Int8', 1);

@@ -161,1 +164,13 @@ export const uint8 = createNumberType('Uint8', 1);

}
export function buffer(length) {
if (length === undefined || typeof length !== 'number') {
throw new TypeError('You must specify a length of the buffer!');
}
return Object.freeze({
tag: 'Buffer',
byteLength: length,
byteAlignment: 1,
});
}

@@ -12,2 +12,9 @@ /* eslint-disable max-len, no-new-func */

Boolean(_, stackDepth) {
const resultVar = createVariable('result', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `${resultVar} = Boolean(dataView.getUint8(${byteOffsetVar}));`;
},
String({ byteLength, encoding }, stackDepth) {

@@ -126,2 +133,16 @@ const resultVar = createVariable('result', stackDepth);

},
Buffer({ byteLength }, stackDepth) {
const resultVar = createVariable('result', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `
if (${resultVar} === void 0 ||
${resultVar}.buffer !== dataView.buffer ||
${resultVar}.byteLength !== ${byteOffsetVar} ||
${resultVar}.byteOffset !== ${byteLength}) {
${resultVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});
}
`;
},
});

@@ -128,0 +149,0 @@

import { createReader } from './reader';
import { createWriter } from './writer';
import { sizeof, strideof, getDataView, assign, createMask } from '../utils';
import { sizeof, strideof, getDataView, createMask } from '../utils';

@@ -111,2 +111,31 @@ const SUPPORTS_PROXY = typeof Proxy === 'function';

Boolean(_, dataView, byteOffset) {
return Boolean(dataView.getUint8(byteOffset));
},
String({ byteLength, encoding }, dataView, byteOffset) {
let array = new Uint8Array(dataView.buffer, byteOffset, byteLength);
const index = array.indexOf(0);
if (index >= 0) {
array = array.subarray(0, index);
}
if (typeof Buffer === 'function') {
return new Buffer(array).toString(encoding);
}
/* eslint-disable no-undef */
/* istanbul ignore next */
if (typeof TextDecoder === 'function') {
return new TextDecoder(encoding).decode(array);
}
/* eslint-enable no-undef */
/* eslint-disable prefer-spread */
/* istanbul ignore next */
return String.fromCharCode.apply(String, array);
/* eslint-enable prefer-spread */
},
Array({ length, element }, dataView, byteOffset, useProxy = length > 20) {

@@ -155,7 +184,8 @@ const elementProxyHandler = viewVisitor[element.tag];

/* eslint-disable no-param-reassign */
obj[member.name] = assign({}, member, {
obj[member.name] = {
element: member.element,
writer: createWriter(member.element),
totalByteOffset: byteOffset + member.byteOffset,
proxyHandler: viewVisitor[member.element.tag],
});
};
/* eslint-enable */

@@ -210,2 +240,6 @@ return obj;

},
Buffer({ byteLength }, dataView, byteOffset) {
return new Uint8Array(dataView.buffer, byteOffset, byteLength);
},
});

@@ -212,0 +246,0 @@

@@ -12,2 +12,9 @@ /* eslint-disable max-len, no-new-func */

Boolean(_, stackDepth) {
const dataVar = createVariable('data', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `dataView.setUint8(${byteOffsetVar}, Number(${dataVar}));`;
},
String({ byteLength, encoding }, stackDepth) {

@@ -109,2 +116,15 @@ const dataVar = createVariable('data', stackDepth);

},
Buffer({ byteLength }, stackDepth) {
const dataVar = createVariable('data', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `
if (${dataVar}.buffer !== dataView.buffer ||
${dataVar}.byteLength !== ${byteOffsetVar} ||
${dataVar}.byteOffset !== ${byteLength}) {
new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength}).set(${dataVar});
}
`;
},
});

@@ -111,0 +131,0 @@