UNPKG

@metaplex-foundation/umi-serializers

Version:

A comprehensive set of serializers for the Umi framework

1 lines 4.85 kB
{"version":3,"file":"set.mjs","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,GAAG,EAAE,CAAA;EAClC,OAAO;AACLC,IAAAA,WAAW,EACTH,OAAO,CAACG,WAAW,IAClB,CAAMJ,IAAAA,EAAAA,IAAI,CAACI,WAAY,CAAIC,EAAAA,EAAAA,kBAAkB,CAACH,IAAI,CAAE,CAAE,CAAA,CAAA;IACzDI,SAAS,EAAEC,mBAAmB,CAACL,IAAI,EAAE,CAACF,IAAI,CAACM,SAAS,CAAC,CAAC;IACtDE,OAAO,EAAED,mBAAmB,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,yBAAyB,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,UAAU,CAAC,CAACC,aAAa,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,eAAe,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;;;;"}