{"version":3,"file":"js-binary-schema-parser-814ef804.js","sources":["../../../node_modules/js-binary-schema-parser/src/index.js","../../../node_modules/js-binary-schema-parser/src/parsers/uint8.js","../../../node_modules/js-binary-schema-parser/src/schemas/gif.js"],"sourcesContent":["export const parse = (stream, schema, result = {}, parent = result) => {\r\n if (Array.isArray(schema)) {\r\n schema.forEach(partSchema => parse(stream, partSchema, result, parent))\r\n } else if (typeof schema === 'function') {\r\n schema(stream, result, parent, parse)\r\n } else {\r\n const key = Object.keys(schema)[0]\r\n if (Array.isArray(schema[key])) {\r\n parent[key] = {}\r\n parse(stream, schema[key], result, parent[key])\r\n } else {\r\n parent[key] = schema[key](stream, result, parent, parse)\r\n }\r\n }\r\n return result\r\n}\r\n\r\nexport const conditional = (schema, conditionFunc) => (\r\n stream,\r\n result,\r\n parent,\r\n parse\r\n) => {\r\n if (conditionFunc(stream, result, parent)) {\r\n parse(stream, schema, result, parent)\r\n }\r\n}\r\n\r\nexport const loop = (schema, continueFunc) => (\r\n stream,\r\n result,\r\n parent,\r\n parse\r\n) => {\r\n const arr = []\r\n let lastStreamPos = stream.pos;\r\n while (continueFunc(stream, result, parent)) {\r\n const newParent = {}\r\n parse(stream, schema, result, newParent)\r\n // cases when whole file is parsed but no termination is there and stream position is not getting updated as well\r\n // it falls into infinite recursion, null check to avoid the same\r\n if(stream.pos === lastStreamPos) {\r\n break\r\n }\r\n lastStreamPos = stream.pos\r\n arr.push(newParent)\r\n }\r\n return arr\r\n}\r\n","// Default stream and parsers for Uint8TypedArray data type\r\n\r\nexport const buildStream = uint8Data => ({\r\n data: uint8Data,\r\n pos: 0\r\n})\r\n\r\nexport const readByte = () => stream => {\r\n return stream.data[stream.pos++]\r\n}\r\n\r\nexport const peekByte = (offset = 0) => stream => {\r\n return stream.data[stream.pos + offset]\r\n}\r\n\r\nexport const readBytes = length => stream => {\r\n return stream.data.subarray(stream.pos, (stream.pos += length))\r\n}\r\n\r\nexport const peekBytes = length => stream => {\r\n return stream.data.subarray(stream.pos, stream.pos + length)\r\n}\r\n\r\nexport const readString = length => stream => {\r\n return Array.from(readBytes(length)(stream))\r\n .map(value => String.fromCharCode(value))\r\n .join('')\r\n}\r\n\r\nexport const readUnsigned = littleEndian => stream => {\r\n const bytes = readBytes(2)(stream)\r\n return littleEndian ? (bytes[1] << 8) + bytes[0] : (bytes[0] << 8) + bytes[1]\r\n}\r\n\r\nexport const readArray = (byteSize, totalOrFunc) => (\r\n stream,\r\n result,\r\n parent\r\n) => {\r\n const total =\r\n typeof totalOrFunc === 'function'\r\n ? totalOrFunc(stream, result, parent)\r\n : totalOrFunc\r\n\r\n const parser = readBytes(byteSize)\r\n const arr = new Array(total)\r\n for (var i = 0; i < total; i++) {\r\n arr[i] = parser(stream)\r\n }\r\n return arr\r\n}\r\n\r\nconst subBitsTotal = (bits, startIndex, length) => {\r\n var result = 0\r\n for (var i = 0; i < length; i++) {\r\n result += bits[startIndex + i] && 2 ** (length - i - 1)\r\n }\r\n return result\r\n}\r\n\r\nexport const readBits = schema => stream => {\r\n const byte = readByte()(stream)\r\n // convert the byte to bit array\r\n const bits = new Array(8)\r\n for (var i = 0; i < 8; i++) {\r\n bits[7 - i] = !!(byte & (1 << i))\r\n }\r\n // convert the bit array to values based on the schema\r\n return Object.keys(schema).reduce((res, key) => {\r\n const def = schema[key]\r\n if (def.length) {\r\n res[key] = subBitsTotal(bits, def.index, def.length)\r\n } else {\r\n res[key] = bits[def.index]\r\n }\r\n return res\r\n }, {})\r\n}\r\n","import { conditional, loop } from '../'\r\nimport {\r\n readByte,\r\n peekByte,\r\n readBytes,\r\n peekBytes,\r\n readString,\r\n readUnsigned,\r\n readArray,\r\n readBits,\r\n} from '../parsers/uint8'\r\n\r\n// a set of 0x00 terminated subblocks\r\nvar subBlocksSchema = {\r\n blocks: (stream) => {\r\n const terminator = 0x00\r\n const chunks = []\r\n const streamSize = stream.data.length\r\n var total = 0\r\n for (\r\n var size = readByte()(stream);\r\n size !== terminator;\r\n size = readByte()(stream)\r\n ) {\r\n // size becomes undefined for some case when file is corrupted and terminator is not proper \r\n // null check to avoid recursion\r\n if(!size) break;\r\n // catch corrupted files with no terminator\r\n if (stream.pos + size >= streamSize) {\r\n const availableSize = streamSize - stream.pos\r\n chunks.push(readBytes(availableSize)(stream))\r\n total += availableSize\r\n break\r\n }\r\n chunks.push(readBytes(size)(stream))\r\n total += size\r\n }\r\n const result = new Uint8Array(total)\r\n var offset = 0\r\n for (var i = 0; i < chunks.length; i++) {\r\n result.set(chunks[i], offset)\r\n offset += chunks[i].length\r\n }\r\n return result\r\n },\r\n}\r\n\r\n// global control extension\r\nconst gceSchema = conditional(\r\n {\r\n gce: [\r\n { codes: readBytes(2) },\r\n { byteSize: readByte() },\r\n {\r\n extras: readBits({\r\n future: { index: 0, length: 3 },\r\n disposal: { index: 3, length: 3 },\r\n userInput: { index: 6 },\r\n transparentColorGiven: { index: 7 },\r\n }),\r\n },\r\n { delay: readUnsigned(true) },\r\n { transparentColorIndex: readByte() },\r\n { terminator: readByte() },\r\n ],\r\n },\r\n (stream) => {\r\n var codes = peekBytes(2)(stream)\r\n return codes[0] === 0x21 && codes[1] === 0xf9\r\n }\r\n)\r\n\r\n// image pipeline block\r\nconst imageSchema = conditional(\r\n {\r\n image: [\r\n { code: readByte() },\r\n {\r\n descriptor: [\r\n { left: readUnsigned(true) },\r\n { top: readUnsigned(true) },\r\n { width: readUnsigned(true) },\r\n { height: readUnsigned(true) },\r\n {\r\n lct: readBits({\r\n exists: { index: 0 },\r\n interlaced: { index: 1 },\r\n sort: { index: 2 },\r\n future: { index: 3, length: 2 },\r\n size: { index: 5, length: 3 },\r\n }),\r\n },\r\n ],\r\n },\r\n conditional(\r\n {\r\n lct: readArray(3, (stream, result, parent) => {\r\n return Math.pow(2, parent.descriptor.lct.size + 1)\r\n }),\r\n },\r\n (stream, result, parent) => {\r\n return parent.descriptor.lct.exists\r\n }\r\n ),\r\n { data: [{ minCodeSize: readByte() }, subBlocksSchema] },\r\n ],\r\n },\r\n (stream) => {\r\n return peekByte()(stream) === 0x2c\r\n }\r\n)\r\n\r\n// plain text block\r\nconst textSchema = conditional(\r\n {\r\n text: [\r\n { codes: readBytes(2) },\r\n { blockSize: readByte() },\r\n {\r\n preData: (stream, result, parent) =>\r\n readBytes(parent.text.blockSize)(stream),\r\n },\r\n subBlocksSchema,\r\n ],\r\n },\r\n (stream) => {\r\n var codes = peekBytes(2)(stream)\r\n return codes[0] === 0x21 && codes[1] === 0x01\r\n }\r\n)\r\n\r\n// application block\r\nconst applicationSchema = conditional(\r\n {\r\n application: [\r\n { codes: readBytes(2) },\r\n { blockSize: readByte() },\r\n { id: (stream, result, parent) => readString(parent.blockSize)(stream) },\r\n subBlocksSchema,\r\n ],\r\n },\r\n (stream) => {\r\n var codes = peekBytes(2)(stream)\r\n return codes[0] === 0x21 && codes[1] === 0xff\r\n }\r\n)\r\n\r\n// comment block\r\nconst commentSchema = conditional(\r\n {\r\n comment: [{ codes: readBytes(2) }, subBlocksSchema],\r\n },\r\n (stream) => {\r\n var codes = peekBytes(2)(stream)\r\n return codes[0] === 0x21 && codes[1] === 0xfe\r\n }\r\n)\r\n\r\nconst schema = [\r\n { header: [{ signature: readString(3) }, { version: readString(3) }] },\r\n {\r\n lsd: [\r\n { width: readUnsigned(true) },\r\n { height: readUnsigned(true) },\r\n {\r\n gct: readBits({\r\n exists: { index: 0 },\r\n resolution: { index: 1, length: 3 },\r\n sort: { index: 4 },\r\n size: { index: 5, length: 3 },\r\n }),\r\n },\r\n { backgroundColorIndex: readByte() },\r\n { pixelAspectRatio: readByte() },\r\n ],\r\n },\r\n conditional(\r\n {\r\n gct: readArray(3, (stream, result) =>\r\n Math.pow(2, result.lsd.gct.size + 1)\r\n ),\r\n },\r\n (stream, result) => result.lsd.gct.exists\r\n ),\r\n // content frames\r\n {\r\n frames: loop(\r\n [gceSchema, applicationSchema, commentSchema, imageSchema, textSchema],\r\n (stream) => {\r\n var nextCode = peekByte()(stream)\r\n // rather than check for a terminator, we should check for the existence\r\n // of an ext or image block to avoid infinite loops\r\n //var terminator = 0x3B;\r\n //return nextCode !== terminator;\r\n return nextCode === 0x21 || nextCode === 0x2c\r\n }\r\n ),\r\n },\r\n]\r\n\r\nexport default schema\r\n"],"names":["parse","stream","schema","result","parent","Array","isArray","forEach","partSchema","key","Object","keys","conditional","conditionFunc","buildStream","uint8Data","data","pos","peekByte","offset","readBytes","subarray","length","peekBytes","readString","from","map","value","String","fromCharCode","join","readUnsigned","bytes","littleEndian","readArray","byteSize","totalOrFunc","total","parser","arr","i","readBits","byte","readByte","bits","reduce","res","def","startIndex","subBitsTotal","index","subBlocksSchema","blocks","chunks","streamSize","size","availableSize","push","Uint8Array","set","gceSchema","gce","codes","extras","future","disposal","userInput","transparentColorGiven","delay","transparentColorIndex","terminator","imageSchema","image","code","descriptor","left","top","width","height","lct","exists","interlaced","sort","Math","pow","minCodeSize","textSchema","text","blockSize","preData","applicationSchema","application","id","commentSchema","comment","header","signature","version","lsd","gct","resolution","backgroundColorIndex","pixelAspectRatio","frames","continueFunc","nextCode","lastStreamPos","newParent"],"mappings":"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","x_google_ignoreList":[0,1,2]}