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.2
to
0.3.3
+9
-3
CHANGELOG.md
# Changelog
## 0.3.3
* Fix bug in `buffer` code generation
* Better compatibility with older browsers
* Minor performance improvements
## 0.3.2

@@ -11,4 +17,4 @@

* Introduce `Buffer` type
* Add back `Bool` type
* Introduce `buffer` type
* Add back `bool` type
* Fix missing string handler for views

@@ -26,3 +32,3 @@

* All built-in type schemas are made immutable using `Object.freeze`
* `Uint64` and `Bool` types have been removed
* `uint64` and `bool` types have been removed

@@ -29,0 +35,0 @@ ## 0.1.2

@@ -7,1045 +7,1048 @@ (function (global, factory) {

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

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

@@ -67,3 +67,5 @@ /**

export function getDataView(data) {
if (data instanceof ArrayBuffer) {
if (data instanceof DataView) {
return data;
} else if (data instanceof ArrayBuffer) {
return new DataView(data);

@@ -76,3 +78,2 @@ } else if (ArrayBuffer.isView(data)) {

}
// Memoize if WeakMap if supported, otherwise passthrough

@@ -79,0 +80,0 @@ export const maybeMemoize = (() => {

/* eslint-disable max-len, no-new-func */
import { strideof, createMask, createVariable } from '../utils';
import { uint8 } from '../types';

@@ -14,5 +15,7 @@ export const readerVisitor = Object.freeze({

const resultVar = createVariable('result', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `${resultVar} = Boolean(dataView.getUint8(${byteOffsetVar}));`;
return `
${readerVisitor.Number(uint8, stackDepth)}
${resultVar} = Boolean(${resultVar});
`;
},

@@ -28,9 +31,10 @@

var ${arrayVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});
var ${indexVar} = ${arrayVar}.indexOf(0);
if (${indexVar} >= 0) {
${arrayVar} = ${arrayVar}.subarray(0, ${indexVar});
}
var ${indexVar} = Array.prototype.indexOf.call(${arrayVar}, 0);
${(() => {
if (typeof Buffer === 'function') {
return `${resultVar} = new Buffer(${arrayVar}).toString(${JSON.stringify(encoding)});`;
return `
${resultVar} = new Buffer(${arrayVar}.buffer)
.slice(${byteOffsetVar}, ${byteOffsetVar} + (${indexVar} >= 0 ? ${indexVar} : ${byteLength}))
.toString(${JSON.stringify(encoding)});
`;
}

@@ -40,7 +44,17 @@

if (typeof TextDecoder === 'function') {
return `${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});`;
return `
if (${indexVar} >= 0) {
${arrayVar} = new Uint8Array(${arrayVar}.buffer, ${byteOffsetVar}, ${indexVar});
}
${resultVar} = new TextDecoder(${JSON.stringify(encoding)}).decode(${arrayVar});
`;
}
/* istanbul ignore next */
return `${resultVar} = String.fromCharCode.apply(String, ${arrayVar});`;
return `
if (${indexVar} >= 0) {
${arrayVar} = new Uint8Array(${arrayVar}.buffer, ${byteOffsetVar}, ${indexVar});
}
${resultVar} = String.fromCharCode.apply(String, ${arrayVar});
`;
})()}

@@ -143,4 +157,4 @@ `;

${resultVar}.buffer !== dataView.buffer ||
${resultVar}.byteLength !== ${byteOffsetVar} ||
${resultVar}.byteOffset !== ${byteLength}) {
${resultVar}.byteOffset !== ${byteOffsetVar} ||
${resultVar}.byteLength !== ${byteLength}) {
${resultVar} = new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength});

@@ -147,0 +161,0 @@ }

@@ -118,3 +118,3 @@ import { createReader } from './reader';

const index = array.indexOf(0);
const index = Array.prototype.indexOf.call(array, 0);
if (index >= 0) {

@@ -121,0 +121,0 @@ array = array.subarray(0, index);

/* eslint-disable max-len, no-new-func */
import { strideof, createMask, createVariable } from '../utils';
import { uint8 } from '../types';

@@ -14,5 +15,7 @@ export const writerVisitor = Object.freeze({

const dataVar = createVariable('data', stackDepth);
const byteOffsetVar = createVariable('byteOffset', stackDepth);
return `dataView.setUint8(${byteOffsetVar}, Number(${dataVar}));`;
return `
${dataVar} = Number(${dataVar});
${writerVisitor.Number(uint8, stackDepth)}
`;
},

@@ -123,4 +126,4 @@

if (${dataVar}.buffer !== dataView.buffer ||
${dataVar}.byteLength !== ${byteOffsetVar} ||
${dataVar}.byteOffset !== ${byteLength}) {
${dataVar}.byteOffset !== ${byteOffsetVar} ||
${dataVar}.byteLength !== ${byteLength}) {
new Uint8Array(dataView.buffer, ${byteOffsetVar}, ${byteLength}).set(${dataVar});

@@ -127,0 +130,0 @@ }