+9
-3
| # 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 |
+861
-858
@@ -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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"} |
+816
-809
| 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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"} |
+1
-1
| { | ||
| "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", |
+3
-2
@@ -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 = (() => { |
+25
-11
| /* 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 @@ } |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
2682
1.17%221005
-6.46%