{"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;;;;"}