@metaplex-foundation/umi-serializers
Version:
A comprehensive set of serializers for the Umi framework
1 lines • 4.79 kB
Source Map (JSON)
{"version":3,"file":"array.mjs","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,GAAG,EAAE,CAAA;EAClC,OAAO;AACLC,IAAAA,WAAW,EACTH,OAAO,CAACG,WAAW,IAClB,CAAQJ,MAAAA,EAAAA,IAAI,CAACI,WAAY,CAAIC,EAAAA,EAAAA,kBAAkB,CAACH,IAAI,CAAE,CAAE,CAAA,CAAA;IAC3DI,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,EAAGC,KAAU,IAAK;MACzB,IAAI,OAAOR,IAAI,KAAK,QAAQ,IAAIQ,KAAK,CAACC,MAAM,KAAKT,IAAI,EAAE;QACrD,MAAM,IAAIU,yBAAyB,CAAC,OAAO,EAAEV,IAAI,EAAEQ,KAAK,CAACC,MAAM,CAAC,CAAA;AAClE,OAAA;MACA,OAAOE,UAAU,CAAC,CAChBC,aAAa,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,eAAe,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;;;;"}