UNPKG

@metaplex-foundation/umi-serializers

Version:

A comprehensive set of serializers for the Umi framework

1 lines 5.06 kB
{"version":3,"file":"bytes.cjs","sources":["../../src/bytes.ts"],"sourcesContent":["import {\n BaseSerializerOptions,\n DeserializingEmptyBufferError,\n NotEnoughBytesError,\n Serializer,\n fixSerializer,\n mergeBytes,\n} from '@metaplex-foundation/umi-serializers-core';\nimport { NumberSerializer } from '@metaplex-foundation/umi-serializers-numbers';\nimport { getSizeDescription } from './utils';\n\n/**\n * Defines the options for bytes serializers.\n * @category Serializers\n */\nexport type BytesSerializerOptions = BaseSerializerOptions & {\n /**\n * The size of the buffer. It can be one of the following:\n * - a {@link NumberSerializer} that prefixes the buffer with its size.\n * - a fixed number of bytes.\n * - or `'variable'` to use the rest of the buffer.\n * @defaultValue `'variable'`\n */\n size?: NumberSerializer | number | 'variable';\n};\n\n/**\n * Creates a serializer that passes the buffer as-is.\n *\n * @param options - A set of options for the serializer.\n * @category Serializers\n */\nexport function bytes(\n options: BytesSerializerOptions = {}\n): Serializer<Uint8Array> {\n const size = options.size ?? 'variable';\n const description =\n options.description ?? `bytes(${getSizeDescription(size)})`;\n\n const byteSerializer: Serializer<Uint8Array> = {\n description,\n fixedSize: null,\n maxSize: null,\n serialize: (value: Uint8Array) => new Uint8Array(value),\n deserialize: (bytes: Uint8Array, offset = 0) => {\n const slice = bytes.slice(offset);\n return [slice, offset + slice.length];\n },\n };\n\n if (size === 'variable') {\n return byteSerializer;\n }\n\n if (typeof size === 'number') {\n return fixSerializer(byteSerializer, size, description);\n }\n\n return {\n description,\n fixedSize: null,\n maxSize: null,\n serialize: (value: Uint8Array) => {\n const contentBytes = byteSerializer.serialize(value);\n const lengthBytes = size.serialize(contentBytes.length);\n return mergeBytes([lengthBytes, contentBytes]);\n },\n deserialize: (buffer: Uint8Array, offset = 0) => {\n if (buffer.slice(offset).length === 0) {\n throw new DeserializingEmptyBufferError('bytes');\n }\n const [lengthBigInt, lengthOffset] = size.deserialize(buffer, offset);\n const length = Number(lengthBigInt);\n offset = lengthOffset;\n const contentBuffer = buffer.slice(offset, offset + length);\n if (contentBuffer.length < length) {\n throw new NotEnoughBytesError('bytes', length, contentBuffer.length);\n }\n const [value, contentOffset] = byteSerializer.deserialize(contentBuffer);\n offset += contentOffset;\n return [value, offset];\n },\n };\n}\n"],"names":["bytes","options","size","description","getSizeDescription","byteSerializer","fixedSize","maxSize","serialize","value","Uint8Array","deserialize","offset","slice","length","fixSerializer","contentBytes","lengthBytes","mergeBytes","buffer","DeserializingEmptyBufferError","lengthBigInt","lengthOffset","Number","contentBuffer","NotEnoughBytesError","contentOffset"],"mappings":";;;;;;;AAWA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,KAAK,CACnBC,OAA+B,GAAG,EAAE,EACZ;AACxB,EAAA,MAAMC,IAAI,GAAGD,OAAO,CAACC,IAAI,IAAI,UAAU,CAAA;EACvC,MAAMC,WAAW,GACfF,OAAO,CAACE,WAAW,IAAK,CAAA,MAAA,EAAQC,wBAAkB,CAACF,IAAI,CAAE,CAAE,CAAA,CAAA,CAAA;AAE7D,EAAA,MAAMG,cAAsC,GAAG;IAC7CF,WAAW;AACXG,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,OAAO,EAAE,IAAI;AACbC,IAAAA,SAAS,EAAGC,KAAiB,IAAK,IAAIC,UAAU,CAACD,KAAK,CAAC;AACvDE,IAAAA,WAAW,EAAE,CAACX,KAAiB,EAAEY,MAAM,GAAG,CAAC,KAAK;AAC9C,MAAA,MAAMC,KAAK,GAAGb,KAAK,CAACa,KAAK,CAACD,MAAM,CAAC,CAAA;MACjC,OAAO,CAACC,KAAK,EAAED,MAAM,GAAGC,KAAK,CAACC,MAAM,CAAC,CAAA;AACvC,KAAA;GACD,CAAA;EAED,IAAIZ,IAAI,KAAK,UAAU,EAAE;AACvB,IAAA,OAAOG,cAAc,CAAA;AACvB,GAAA;AAEA,EAAA,IAAI,OAAOH,IAAI,KAAK,QAAQ,EAAE;AAC5B,IAAA,OAAOa,gCAAa,CAACV,cAAc,EAAEH,IAAI,EAAEC,WAAW,CAAC,CAAA;AACzD,GAAA;EAEA,OAAO;IACLA,WAAW;AACXG,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,OAAO,EAAE,IAAI;IACbC,SAAS,EAAGC,KAAiB,IAAK;AAChC,MAAA,MAAMO,YAAY,GAAGX,cAAc,CAACG,SAAS,CAACC,KAAK,CAAC,CAAA;MACpD,MAAMQ,WAAW,GAAGf,IAAI,CAACM,SAAS,CAACQ,YAAY,CAACF,MAAM,CAAC,CAAA;AACvD,MAAA,OAAOI,6BAAU,CAAC,CAACD,WAAW,EAAED,YAAY,CAAC,CAAC,CAAA;KAC/C;AACDL,IAAAA,WAAW,EAAE,CAACQ,MAAkB,EAAEP,MAAM,GAAG,CAAC,KAAK;MAC/C,IAAIO,MAAM,CAACN,KAAK,CAACD,MAAM,CAAC,CAACE,MAAM,KAAK,CAAC,EAAE;AACrC,QAAA,MAAM,IAAIM,gDAA6B,CAAC,OAAO,CAAC,CAAA;AAClD,OAAA;AACA,MAAA,MAAM,CAACC,YAAY,EAAEC,YAAY,CAAC,GAAGpB,IAAI,CAACS,WAAW,CAACQ,MAAM,EAAEP,MAAM,CAAC,CAAA;AACrE,MAAA,MAAME,MAAM,GAAGS,MAAM,CAACF,YAAY,CAAC,CAAA;AACnCT,MAAAA,MAAM,GAAGU,YAAY,CAAA;MACrB,MAAME,aAAa,GAAGL,MAAM,CAACN,KAAK,CAACD,MAAM,EAAEA,MAAM,GAAGE,MAAM,CAAC,CAAA;AAC3D,MAAA,IAAIU,aAAa,CAACV,MAAM,GAAGA,MAAM,EAAE;QACjC,MAAM,IAAIW,sCAAmB,CAAC,OAAO,EAAEX,MAAM,EAAEU,aAAa,CAACV,MAAM,CAAC,CAAA;AACtE,OAAA;MACA,MAAM,CAACL,KAAK,EAAEiB,aAAa,CAAC,GAAGrB,cAAc,CAACM,WAAW,CAACa,aAAa,CAAC,CAAA;AACxEZ,MAAAA,MAAM,IAAIc,aAAa,CAAA;AACvB,MAAA,OAAO,CAACjB,KAAK,EAAEG,MAAM,CAAC,CAAA;AACxB,KAAA;GACD,CAAA;AACH;;;;"}