{"version":3,"file":"set.cjs","sources":["../../src/set.ts"],"sourcesContent":["import {\n  BaseSerializerOptions,\n  mergeBytes,\n  Serializer,\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 `Set` serializers.\n * @category Serializers\n */\nexport type SetSerializerOptions = BaseSerializerOptions & {\n  /**\n   * The size of the set.\n   * @defaultValue `u32()`\n   */\n  size?: ArrayLikeSerializerSize;\n};\n\n/**\n * Creates a serializer for a set.\n *\n * @param item - The serializer to use for the set's items.\n * @param options - A set of options for the serializer.\n * @category Serializers\n */\nexport function set<T, U extends T = T>(\n  item: Serializer<T, U>,\n  options: SetSerializerOptions = {}\n): Serializer<Set<T>, Set<U>> {\n  const size = options.size ?? u32();\n  return {\n    description:\n      options.description ??\n      `set(${item.description}; ${getSizeDescription(size)})`,\n    fixedSize: getSizeFromChildren(size, [item.fixedSize]),\n    maxSize: getSizeFromChildren(size, [item.maxSize]),\n    serialize: (set: Set<T>) => {\n      if (typeof size === 'number' && set.size !== size) {\n        throw new InvalidNumberOfItemsError('set', size, set.size);\n      }\n      const itemBytes = Array.from(set, (value) => item.serialize(value));\n      return mergeBytes([getSizePrefix(size, set.size), ...itemBytes]);\n    },\n    deserialize: (bytes: Uint8Array, offset = 0) => {\n      const set: Set<U> = new Set();\n      if (typeof size === 'object' && bytes.slice(offset).length === 0) {\n        return [set, offset];\n      }\n      if (size === 'remainder') {\n        while (offset < bytes.length) {\n          const [value, newOffset] = item.deserialize(bytes, offset);\n          set.add(value);\n          offset = newOffset;\n        }\n        return [set, 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        set.add(value);\n        offset = newOffset;\n      }\n      return [set, offset];\n    },\n  };\n}\n"],"names":["set","item","options","size","u32","description","getSizeDescription","fixedSize","getSizeFromChildren","maxSize","serialize","InvalidNumberOfItemsError","itemBytes","Array","from","value","mergeBytes","getSizePrefix","deserialize","bytes","offset","Set","slice","length","newOffset","add","resolvedSize","getResolvedSize","i"],"mappings":";;;;;;;;;AAeA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,GAAG,CACjBC,IAAsB,EACtBC,OAA6B,GAAG,EAAE,EACN;AAC5B,EAAA,MAAMC,IAAI,GAAGD,OAAO,CAACC,IAAI,IAAIC,yBAAG,EAAE,CAAA;EAClC,OAAO;AACLC,IAAAA,WAAW,EACTH,OAAO,CAACG,WAAW,IAClB,CAAMJ,IAAAA,EAAAA,IAAI,CAACI,WAAY,CAAIC,EAAAA,EAAAA,wBAAkB,CAACH,IAAI,CAAE,CAAE,CAAA,CAAA;IACzDI,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,EAAGV,GAAW,IAAK;MAC1B,IAAI,OAAOG,IAAI,KAAK,QAAQ,IAAIH,GAAG,CAACG,IAAI,KAAKA,IAAI,EAAE;QACjD,MAAM,IAAIQ,gCAAyB,CAAC,KAAK,EAAER,IAAI,EAAEH,GAAG,CAACG,IAAI,CAAC,CAAA;AAC5D,OAAA;AACA,MAAA,MAAMS,SAAS,GAAGC,KAAK,CAACC,IAAI,CAACd,GAAG,EAAGe,KAAK,IAAKd,IAAI,CAACS,SAAS,CAACK,KAAK,CAAC,CAAC,CAAA;AACnE,MAAA,OAAOC,6BAAU,CAAC,CAACC,mBAAa,CAACd,IAAI,EAAEH,GAAG,CAACG,IAAI,CAAC,EAAE,GAAGS,SAAS,CAAC,CAAC,CAAA;KACjE;AACDM,IAAAA,WAAW,EAAE,CAACC,KAAiB,EAAEC,MAAM,GAAG,CAAC,KAAK;AAC9C,MAAA,MAAMpB,GAAW,GAAG,IAAIqB,GAAG,EAAE,CAAA;AAC7B,MAAA,IAAI,OAAOlB,IAAI,KAAK,QAAQ,IAAIgB,KAAK,CAACG,KAAK,CAACF,MAAM,CAAC,CAACG,MAAM,KAAK,CAAC,EAAE;AAChE,QAAA,OAAO,CAACvB,GAAG,EAAEoB,MAAM,CAAC,CAAA;AACtB,OAAA;MACA,IAAIjB,IAAI,KAAK,WAAW,EAAE;AACxB,QAAA,OAAOiB,MAAM,GAAGD,KAAK,CAACI,MAAM,EAAE;AAC5B,UAAA,MAAM,CAACR,KAAK,EAAES,SAAS,CAAC,GAAGvB,IAAI,CAACiB,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC1DpB,UAAAA,GAAG,CAACyB,GAAG,CAACV,KAAK,CAAC,CAAA;AACdK,UAAAA,MAAM,GAAGI,SAAS,CAAA;AACpB,SAAA;AACA,QAAA,OAAO,CAACxB,GAAG,EAAEoB,MAAM,CAAC,CAAA;AACtB,OAAA;AACA,MAAA,MAAM,CAACM,YAAY,EAAEF,SAAS,CAAC,GAAGG,qBAAe,CAACxB,IAAI,EAAEgB,KAAK,EAAEC,MAAM,CAAC,CAAA;AACtEA,MAAAA,MAAM,GAAGI,SAAS,CAAA;AAClB,MAAA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,EAAEE,CAAC,IAAI,CAAC,EAAE;AACxC,QAAA,MAAM,CAACb,KAAK,EAAES,SAAS,CAAC,GAAGvB,IAAI,CAACiB,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC1DpB,QAAAA,GAAG,CAACyB,GAAG,CAACV,KAAK,CAAC,CAAA;AACdK,QAAAA,MAAM,GAAGI,SAAS,CAAA;AACpB,OAAA;AACA,MAAA,OAAO,CAACxB,GAAG,EAAEoB,MAAM,CAAC,CAAA;AACtB,KAAA;GACD,CAAA;AACH;;;;"}