{"version":3,"file":"array.cjs","sources":["../../src/array.ts"],"sourcesContent":["import {\n  BaseSerializerOptions,\n  Serializer,\n  mergeBytes,\n} from '@metaplex-foundation/umi-serializers-core';\nimport { u32 } from '@metaplex-foundation/umi-serializers-numbers';\nimport { ArrayLikeSerializerSize } from './arrayLikeSerializerSize';\nimport { InvalidNumberOfItemsError } from './errors';\nimport {\n  getResolvedSize,\n  getSizeDescription,\n  getSizeFromChildren,\n  getSizePrefix,\n} from './utils';\n\n/**\n * Defines the options for array serializers.\n * @category Serializers\n */\nexport type ArraySerializerOptions = BaseSerializerOptions & {\n  /**\n   * The size of the array.\n   * @defaultValue `u32()`\n   */\n  size?: ArrayLikeSerializerSize;\n};\n\n/**\n * Creates a serializer for an array of items.\n *\n * @param item - The serializer to use for the array's items.\n * @param options - A set of options for the serializer.\n * @category Serializers\n */\nexport function array<T, U extends T = T>(\n  item: Serializer<T, U>,\n  options: ArraySerializerOptions = {}\n): Serializer<T[], U[]> {\n  const size = options.size ?? u32();\n  return {\n    description:\n      options.description ??\n      `array(${item.description}; ${getSizeDescription(size)})`,\n    fixedSize: getSizeFromChildren(size, [item.fixedSize]),\n    maxSize: getSizeFromChildren(size, [item.maxSize]),\n    serialize: (value: T[]) => {\n      if (typeof size === 'number' && value.length !== size) {\n        throw new InvalidNumberOfItemsError('array', size, value.length);\n      }\n      return mergeBytes([\n        getSizePrefix(size, value.length),\n        ...value.map((v) => item.serialize(v)),\n      ]);\n    },\n    deserialize: (bytes: Uint8Array, offset = 0) => {\n      const values: U[] = [];\n      if (typeof size === 'object' && bytes.slice(offset).length === 0) {\n        return [values, offset];\n      }\n      if (size === 'remainder') {\n        while (offset < bytes.length) {\n          const [value, newOffset] = item.deserialize(bytes, offset);\n          values.push(value);\n          offset = newOffset;\n        }\n        return [values, offset];\n      }\n      const [resolvedSize, newOffset] = getResolvedSize(size, bytes, offset);\n      offset = newOffset;\n      for (let i = 0; i < resolvedSize; i += 1) {\n        const [value, newOffset] = item.deserialize(bytes, offset);\n        values.push(value);\n        offset = newOffset;\n      }\n      return [values, offset];\n    },\n  };\n}\n"],"names":["array","item","options","size","u32","description","getSizeDescription","fixedSize","getSizeFromChildren","maxSize","serialize","value","length","InvalidNumberOfItemsError","mergeBytes","getSizePrefix","map","v","deserialize","bytes","offset","values","slice","newOffset","push","resolvedSize","getResolvedSize","i"],"mappings":";;;;;;;;;AAeA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,KAAK,CACnBC,IAAsB,EACtBC,OAA+B,GAAG,EAAE,EACd;AACtB,EAAA,MAAMC,IAAI,GAAGD,OAAO,CAACC,IAAI,IAAIC,yBAAG,EAAE,CAAA;EAClC,OAAO;AACLC,IAAAA,WAAW,EACTH,OAAO,CAACG,WAAW,IAClB,CAAQJ,MAAAA,EAAAA,IAAI,CAACI,WAAY,CAAIC,EAAAA,EAAAA,wBAAkB,CAACH,IAAI,CAAE,CAAE,CAAA,CAAA;IAC3DI,SAAS,EAAEC,yBAAmB,CAACL,IAAI,EAAE,CAACF,IAAI,CAACM,SAAS,CAAC,CAAC;IACtDE,OAAO,EAAED,yBAAmB,CAACL,IAAI,EAAE,CAACF,IAAI,CAACQ,OAAO,CAAC,CAAC;IAClDC,SAAS,EAAGC,KAAU,IAAK;MACzB,IAAI,OAAOR,IAAI,KAAK,QAAQ,IAAIQ,KAAK,CAACC,MAAM,KAAKT,IAAI,EAAE;QACrD,MAAM,IAAIU,gCAAyB,CAAC,OAAO,EAAEV,IAAI,EAAEQ,KAAK,CAACC,MAAM,CAAC,CAAA;AAClE,OAAA;MACA,OAAOE,6BAAU,CAAC,CAChBC,mBAAa,CAACZ,IAAI,EAAEQ,KAAK,CAACC,MAAM,CAAC,EACjC,GAAGD,KAAK,CAACK,GAAG,CAAEC,CAAC,IAAKhB,IAAI,CAACS,SAAS,CAACO,CAAC,CAAC,CAAC,CACvC,CAAC,CAAA;KACH;AACDC,IAAAA,WAAW,EAAE,CAACC,KAAiB,EAAEC,MAAM,GAAG,CAAC,KAAK;MAC9C,MAAMC,MAAW,GAAG,EAAE,CAAA;AACtB,MAAA,IAAI,OAAOlB,IAAI,KAAK,QAAQ,IAAIgB,KAAK,CAACG,KAAK,CAACF,MAAM,CAAC,CAACR,MAAM,KAAK,CAAC,EAAE;AAChE,QAAA,OAAO,CAACS,MAAM,EAAED,MAAM,CAAC,CAAA;AACzB,OAAA;MACA,IAAIjB,IAAI,KAAK,WAAW,EAAE;AACxB,QAAA,OAAOiB,MAAM,GAAGD,KAAK,CAACP,MAAM,EAAE;AAC5B,UAAA,MAAM,CAACD,KAAK,EAAEY,SAAS,CAAC,GAAGtB,IAAI,CAACiB,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC1DC,UAAAA,MAAM,CAACG,IAAI,CAACb,KAAK,CAAC,CAAA;AAClBS,UAAAA,MAAM,GAAGG,SAAS,CAAA;AACpB,SAAA;AACA,QAAA,OAAO,CAACF,MAAM,EAAED,MAAM,CAAC,CAAA;AACzB,OAAA;AACA,MAAA,MAAM,CAACK,YAAY,EAAEF,SAAS,CAAC,GAAGG,qBAAe,CAACvB,IAAI,EAAEgB,KAAK,EAAEC,MAAM,CAAC,CAAA;AACtEA,MAAAA,MAAM,GAAGG,SAAS,CAAA;AAClB,MAAA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,EAAEE,CAAC,IAAI,CAAC,EAAE;AACxC,QAAA,MAAM,CAAChB,KAAK,EAAEY,SAAS,CAAC,GAAGtB,IAAI,CAACiB,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC1DC,QAAAA,MAAM,CAACG,IAAI,CAACb,KAAK,CAAC,CAAA;AAClBS,QAAAA,MAAM,GAAGG,SAAS,CAAA;AACpB,OAAA;AACA,MAAA,OAAO,CAACF,MAAM,EAAED,MAAM,CAAC,CAAA;AACzB,KAAA;GACD,CAAA;AACH;;;;"}