@metaplex-foundation/umi-serializers
Version:
A comprehensive set of serializers for the Umi framework
1 lines • 4.82 kB
Source Map (JSON)
{"version":3,"file":"bitArray.cjs","sources":["../../src/bitArray.ts"],"sourcesContent":["/* eslint-disable no-bitwise */\nimport {\n BaseSerializerOptions,\n NotEnoughBytesError,\n Serializer,\n} from '@metaplex-foundation/umi-serializers-core';\n\n/**\n * Defines the options for bitArray serializers.\n * @category Serializers\n */\nexport type BitArraySerializerOptions = BaseSerializerOptions & {\n /**\n * Whether to read the bits in reverse order.\n * @defaultValue `false`\n */\n backward?: boolean;\n};\n\n/**\n * An array of boolean serializer that\n * converts booleans to bits and vice versa.\n *\n * @param size - The amount of bytes to use for the bit array.\n * @param options - A set of options for the serializer.\n * @category Serializers\n */\nexport const bitArray = (\n size: number,\n options: BitArraySerializerOptions | boolean = {}\n): Serializer<boolean[]> => {\n const parsedOptions: BitArraySerializerOptions =\n typeof options === 'boolean' ? { backward: options } : options;\n const backward = parsedOptions.backward ?? false;\n const backwardSuffix = backward ? '; backward' : '';\n return {\n description:\n parsedOptions.description ?? `bitArray(${size}${backwardSuffix})`,\n fixedSize: size,\n maxSize: size,\n serialize(value: boolean[]) {\n const bytes: number[] = [];\n\n for (let i = 0; i < size; i += 1) {\n let byte = 0;\n for (let j = 0; j < 8; j += 1) {\n const feature = Number(value[i * 8 + j] ?? 0);\n byte |= feature << (backward ? j : 7 - j);\n }\n if (backward) {\n bytes.unshift(byte);\n } else {\n bytes.push(byte);\n }\n }\n\n return new Uint8Array(bytes);\n },\n deserialize(bytes, offset = 0) {\n const booleans: boolean[] = [];\n let slice = bytes.slice(offset, offset + size);\n slice = backward ? slice.reverse() : slice;\n if (slice.length !== size) {\n throw new NotEnoughBytesError('bitArray', size, slice.length);\n }\n\n slice.forEach((byte) => {\n for (let i = 0; i < 8; i += 1) {\n if (backward) {\n booleans.push(Boolean(byte & 1));\n byte >>= 1;\n } else {\n booleans.push(Boolean(byte & 0b1000_0000));\n byte <<= 1;\n }\n }\n });\n\n return [booleans, offset + size];\n },\n };\n};\n"],"names":["bitArray","size","options","parsedOptions","backward","backwardSuffix","description","fixedSize","maxSize","serialize","value","bytes","i","byte","j","feature","Number","unshift","push","Uint8Array","deserialize","offset","booleans","slice","reverse","length","NotEnoughBytesError","forEach","Boolean"],"mappings":"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"}