npm npm-downloads
code-style-prettier

@solana/codecs

This package contains all types and helpers for encoding and decoding anything to and from a Uint8Array. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK @solana/web3.js@next.

No matter which serialization strategy we use, Codecs abstract away its implementation and offers a simple encode and decode interface. Codecs are also highly composable, allowing us to build complex data structures from simple building blocks.

Here's a quick example that encodes and decodes a simple Person object.

// Use composable codecs to build complex data structures.
type Person = { name: string; age: number };
const getPersonCodec = (): Codec<Person> =>
getStructCodec([
['name', addCodecSizePrefix(getUtf8Codec(), getU32Codec())],
['age', getU32Codec()],
]);

// Use your own codecs to encode and decode data.
const person = { name: 'John', age: 42 };
const personCodec = getPersonCodec();
const encodedPerson: Uint8Array = personCodec.encode(person);
const decodedPerson: Person = personCodec.decode(encodedPerson);

Whilst Codecs can both encode and decode, it is possible to only focus on encoding or decoding data, enabling the unused logic to be tree-shaken. For instance, here’s our previous example using Decoders only to decode a Person type.

const getPersonDecoder = (): Decoder<Person> =>
getStructDecoder([
['name', addDecoderSizePrefix(getUtf8Decoder(), getU32Decoder())],
['age', getU32Decoder()],
]);

The @solana/codecs package is composed of several smaller packages, each with its own set of responsibilities. You can learn more about codecs and how to create your own by reading their respective documentation.

Modules

<internal>

Enumerations

Endian

Interfaces

ReadonlyUint8Array

Type Aliases

ArrayCodecConfig
ArrayLikeCodecSize
BitArrayCodecConfig
BooleanCodecConfig
Codec
Decoder
DiscriminatedUnion
DiscriminatedUnionCodecConfig
Encoder
EnumCodecConfig
FixedSizeCodec
FixedSizeDecoder
FixedSizeEncoder
FixedSizeNumberCodec
FixedSizeNumberDecoder
FixedSizeNumberEncoder
GetDiscriminatedUnionVariant
GetDiscriminatedUnionVariantContent
LiteralUnionCodecConfig
MapCodecConfig
None
NullableCodecConfig
NumberCodec
NumberCodecConfig
NumberDecoder
NumberEncoder
Offset
Option
OptionCodecConfig
OptionOrNullable
SetCodecConfig
Some
UnwrappedOption
VariableSizeCodec
VariableSizeDecoder
VariableSizeEncoder

Functions

addCodecSentinel
addCodecSizePrefix
addDecoderSentinel
addDecoderSizePrefix
addEncoderSentinel
addEncoderSizePrefix
assertByteArrayHasEnoughBytesForCodec
assertByteArrayIsNotEmptyForCodec
assertByteArrayOffsetIsNotOutOfRange
assertIsFixedSize
assertIsVariableSize
assertNumberIsBetweenForCodec
assertValidBaseString
assertValidNumberOfItemsForCodec
combineCodec
containsBytes
createCodec
createDecoder
createEncoder
fixBytes
fixCodecSize
fixDecoderSize
fixEncoderSize
getArrayCodec
getArrayDecoder
getArrayEncoder
getBase10Codec
getBase10Decoder
getBase10Encoder
getBase16Codec
getBase16Decoder
getBase16Encoder
getBase58Codec
getBase58Decoder
getBase58Encoder
getBase64Codec
getBase64Decoder
getBase64Encoder
getBaseXCodec
getBaseXDecoder
getBaseXEncoder
getBaseXResliceCodec
getBaseXResliceDecoder
getBaseXResliceEncoder
getBitArrayCodec
getBitArrayDecoder
getBitArrayEncoder
getBooleanCodec
getBooleanDecoder
getBooleanEncoder
getBytesCodec
getBytesDecoder
getBytesEncoder
getConstantCodec
getConstantDecoder
getConstantEncoder
getDataEnumCodec
getDataEnumDecoder
getDataEnumEncoder
getDiscriminatedUnionCodec
getDiscriminatedUnionDecoder
getDiscriminatedUnionEncoder
getEncodedSize
getEnumCodec
getEnumDecoder
getEnumEncoder
getF32Codec
getF32Decoder
getF32Encoder
getF64Codec
getF64Decoder
getF64Encoder
getHiddenPrefixCodec
getHiddenPrefixDecoder
getHiddenPrefixEncoder
getHiddenSuffixCodec
getHiddenSuffixDecoder
getHiddenSuffixEncoder
getI128Codec
getI128Decoder
getI128Encoder
getI16Codec
getI16Decoder
getI16Encoder
getI32Codec
getI32Decoder
getI32Encoder
getI64Codec
getI64Decoder
getI64Encoder
getI8Codec
getI8Decoder
getI8Encoder
getLiteralUnionCodec
getLiteralUnionDecoder
getLiteralUnionEncoder
getMapCodec
getMapDecoder
getMapEncoder
getNullableCodec
getNullableDecoder
getNullableEncoder
getOptionCodec
getOptionDecoder
getOptionEncoder
getScalarEnumCodec
getScalarEnumDecoder
getScalarEnumEncoder
getSetCodec
getSetDecoder
getSetEncoder
getShortU16Codec
getShortU16Decoder
getShortU16Encoder
getStructCodec
getStructDecoder
getStructEncoder
getTupleCodec
getTupleDecoder
getTupleEncoder
getU128Codec
getU128Decoder
getU128Encoder
getU16Codec
getU16Decoder
getU16Encoder
getU32Codec
getU32Decoder
getU32Encoder
getU64Codec
getU64Decoder
getU64Encoder
getU8Codec
getU8Decoder
getU8Encoder
getUnionCodec
getUnionDecoder
getUnionEncoder
getUnitCodec
getUnitDecoder
getUnitEncoder
getUtf8Codec
getUtf8Decoder
getUtf8Encoder
isFixedSize
isNone
isOption
isSome
isVariableSize
mergeBytes
none
offsetCodec
offsetDecoder
offsetEncoder
padBytes
padLeftCodec
padLeftDecoder
padLeftEncoder
padNullCharacters
padRightCodec
padRightDecoder
padRightEncoder
removeNullCharacters
resizeCodec
resizeDecoder
resizeEncoder
reverseCodec
reverseDecoder
reverseEncoder
some
transformCodec
transformDecoder
transformEncoder
unwrapOption
unwrapOptionRecursively
wrapNullable