@metaplex-foundation/umi-serializers
Version:
A comprehensive set of serializers for the Umi framework
1 lines • 3.42 kB
Source Map (JSON)
{"version":3,"file":"tuple.cjs","sources":["../../src/tuple.ts"],"sourcesContent":["import {\n WrapInSerializer,\n Serializer,\n mergeBytes,\n BaseSerializerOptions,\n} from '@metaplex-foundation/umi-serializers-core';\nimport { sumSerializerSizes } from './sumSerializerSizes';\nimport { InvalidNumberOfItemsError } from './errors';\n\n/**\n * Defines the options for tuple serializers.\n * @category Serializers\n */\nexport type TupleSerializerOptions = BaseSerializerOptions;\n\n/**\n * Creates a serializer for a tuple-like array.\n *\n * @param items - The serializers to use for each item in the tuple.\n * @param options - A set of options for the serializer.\n * @category Serializers\n */\nexport function tuple<T extends any[], U extends T = T>(\n items: WrapInSerializer<[...T], [...U]>,\n options: TupleSerializerOptions = {}\n): Serializer<T, U> {\n const itemDescriptions = items.map((item) => item.description).join(', ');\n return {\n description: options.description ?? `tuple(${itemDescriptions})`,\n fixedSize: sumSerializerSizes(items.map((item) => item.fixedSize)),\n maxSize: sumSerializerSizes(items.map((item) => item.maxSize)),\n serialize: (value: T) => {\n if (value.length !== items.length) {\n throw new InvalidNumberOfItemsError(\n 'tuple',\n items.length,\n value.length\n );\n }\n return mergeBytes(\n items.map((item, index) => item.serialize(value[index]))\n );\n },\n deserialize: (bytes: Uint8Array, offset = 0) => {\n const values = [] as any as U;\n items.forEach((serializer) => {\n const [newValue, newOffset] = serializer.deserialize(bytes, offset);\n values.push(newValue);\n offset = newOffset;\n });\n return [values, offset];\n },\n };\n}\n"],"names":["tuple","items","options","itemDescriptions","map","item","description","join","fixedSize","sumSerializerSizes","maxSize","serialize","value","length","InvalidNumberOfItemsError","mergeBytes","index","deserialize","bytes","offset","values","forEach","serializer","newValue","newOffset","push"],"mappings":";;;;;;;;AASA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,KAAK,CACnBC,KAAuC,EACvCC,OAA+B,GAAG,EAAE,EAClB;AAClB,EAAA,MAAMC,gBAAgB,GAAGF,KAAK,CAACG,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACC,WAAW,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,CAAA;EACzE,OAAO;AACLD,IAAAA,WAAW,EAAEJ,OAAO,CAACI,WAAW,IAAK,CAAA,MAAA,EAAQH,gBAAiB,CAAE,CAAA,CAAA;AAChEK,IAAAA,SAAS,EAAEC,qCAAkB,CAACR,KAAK,CAACG,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACG,SAAS,CAAC,CAAC;AAClEE,IAAAA,OAAO,EAAED,qCAAkB,CAACR,KAAK,CAACG,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACK,OAAO,CAAC,CAAC;IAC9DC,SAAS,EAAGC,KAAQ,IAAK;AACvB,MAAA,IAAIA,KAAK,CAACC,MAAM,KAAKZ,KAAK,CAACY,MAAM,EAAE;AACjC,QAAA,MAAM,IAAIC,gCAAyB,CACjC,OAAO,EACPb,KAAK,CAACY,MAAM,EACZD,KAAK,CAACC,MAAM,CACb,CAAA;AACH,OAAA;MACA,OAAOE,6BAAU,CACfd,KAAK,CAACG,GAAG,CAAC,CAACC,IAAI,EAAEW,KAAK,KAAKX,IAAI,CAACM,SAAS,CAACC,KAAK,CAACI,KAAK,CAAC,CAAC,CAAC,CACzD,CAAA;KACF;AACDC,IAAAA,WAAW,EAAE,CAACC,KAAiB,EAAEC,MAAM,GAAG,CAAC,KAAK;MAC9C,MAAMC,MAAM,GAAG,EAAc,CAAA;AAC7BnB,MAAAA,KAAK,CAACoB,OAAO,CAAEC,UAAU,IAAK;AAC5B,QAAA,MAAM,CAACC,QAAQ,EAAEC,SAAS,CAAC,GAAGF,UAAU,CAACL,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,CAAA;AACnEC,QAAAA,MAAM,CAACK,IAAI,CAACF,QAAQ,CAAC,CAAA;AACrBJ,QAAAA,MAAM,GAAGK,SAAS,CAAA;AACpB,OAAC,CAAC,CAAA;AACF,MAAA,OAAO,CAACJ,MAAM,EAAED,MAAM,CAAC,CAAA;AACzB,KAAA;GACD,CAAA;AACH;;;;"}