bufferfy
Version:
Fast and efficient buffer serialization.
596 lines (564 loc) • 27.3 kB
text/typescript
declare class Context {
offset: number;
}
type CodecType<T extends AbstractCodec<any>> = T extends AbstractCodec<infer S> ? S : never;
declare abstract class AbstractCodec<Value = unknown> {
/**
* Returns true if the provided value is able to be encoded and decoded by this codec.
*
* @param {Value} value - Value of this codec's type.
* @return {boolean}
*
*/
abstract isValid(value: unknown): value is Value;
/**
* Returns the expected byteLength of the buffer if this value was encoded.
*
* @param {Value} value - Value of this codec's type.
* @return {number} byteLength of buffer
*
*/
abstract byteLength(value: Value): number;
/**
* Used internally to recursively encode.
*
* @param {Value} value - Value of this codec's type.
* @param {Uint8Array} buffer - Buffer being written into.
* @param {Context} c - Context for the current encode chain.
* @return {void}
*
*/
abstract _encode(value: Value, buffer: Uint8Array, c: Context): void;
/**
* Encodes a value of this codecs type into a buffer.
*
* @param {Value} value - Value of this codec's type.
* @param {Uint8Array} [target] - A target buffer to write into.
* @param {number} [offset=0] - Offset at which to write into the target.
* @return {Uint8Array} Buffer encoding of value.
*
*/
encode(value: Value, target?: Uint8Array, offset?: number): Uint8Array;
Encoder(): TransformStream<Value, Uint8Array>;
/**
* Used internally to recursively decode
*
* @param {Uint8Array} buffer - The buffer to be decoded.
* @param {Context} c - Context for the current decode chain
* @return {Value} Value decoded from the buffer
*
*/
abstract _decode(buffer: Uint8Array, c: Context): Value;
/**
* Decodes a buffer to a value of this codecs type.
*
* @param {Uint8Array} buffer - The buffer to be decoded.
* @param {number} [offset=0] - Offset at which to read at.
* @return {Value} Value decoded from the buffer
*
*/
decode(source: Uint8Array, offset?: number): Value;
Decoder(): TransformStream<Uint8Array, Value>;
}
interface AnyCodecOptions<Value = any> {
encode?: (value: Value) => Uint8Array;
decode?: (buffer: Uint8Array) => Value;
lengthCodec?: AbstractCodec<number>;
}
declare class AnyCodec<Value = any> extends AbstractCodec<Value> {
private readonly _encodeValue;
private readonly _decodeValue;
readonly lengthCodec: AbstractCodec<number>;
private readonly _bytesCodec;
constructor(options?: AnyCodecOptions<Value>);
isValid(_value: unknown): _value is any;
byteLength(value: Value): number;
_encode(value: Value, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Value;
}
declare class ArrayFixedCodec<Item> extends AbstractCodec<Array<Item>> {
readonly length: number;
readonly itemCodec: AbstractCodec<Item>;
constructor(length: number, itemCodec: AbstractCodec<Item>);
isValid(value: unknown): value is Array<Item>;
byteLength(value: Array<Item>): number;
_encode(value: Array<Item>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Array<Item>;
}
declare class ArrayVariableCodec<Item> extends AbstractCodec<Array<Item>> {
readonly itemCodec: AbstractCodec<Item>;
readonly lengthCodec: AbstractCodec<number>;
constructor(itemCodec: AbstractCodec<Item>, lengthCodec?: AbstractCodec<number>);
isValid(value: unknown): value is Array<Item>;
byteLength(value: Array<Item>): number;
_encode(value: Array<Item>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Array<Item>;
}
type ArrayCodec<Item> = ArrayFixedCodec<Item> | ArrayVariableCodec<Item>;
/**
* Creates a codec for a variable length array.
*
* Serializes to ```[LENGTH?][...ITEMS]```
*
* Length is present only for variable length arrays.
*
* @param {AbstractCodec} itemCodec - The codec for each item in the array.
* @param {AbstractCodec<number>} [lengthCodec="VarInt50()"] - Codec to specify how the length is encoded.
* @return {ArrayCodec} ArrayCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Array/index.ts|Source}
*/
declare function createArrayCodec<Item>(itemCodec: AbstractCodec<Item>, lengthCodec?: AbstractCodec<number>): ArrayVariableCodec<Item>;
/**
* Creates a codec for a fixed length array.
*
* Serializes to ```[LENGTH?][...ITEMS]```
*
* Length is present only for variable length arrays.
*
* @param {AbstractCodec} itemCodec - The codec for each item in the array.
* @param {number} [length] - Sets a fixed length.
* @return {ArrayCodec} ArrayCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Array/index.ts|Source}
*/
declare function createArrayCodec<Item>(itemCodec: AbstractCodec<Item>, length?: number): ArrayFixedCodec<Item>;
declare class BitFieldCodec<Key extends string> extends AbstractCodec<Record<Key, boolean>> {
readonly keys: Array<Key>;
constructor(keys: Array<Key>);
isValid(value: unknown): value is Record<Key, boolean>;
byteLength(_value: Record<Key, boolean>): number;
_encode(value: Record<Key, boolean>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Record<Key, boolean>;
}
declare class BooleanCodec extends AbstractCodec<boolean> {
isValid(value: unknown): value is boolean;
byteLength(_value: boolean): number;
_encode(value: boolean, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): boolean;
}
declare class BytesFixedCodec extends AbstractCodec<Uint8Array> {
private _byteLength;
constructor(byteLength: number);
isValid(value: unknown): value is Uint8Array;
byteLength(_: Uint8Array): number;
_encode(value: Uint8Array, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Uint8Array;
}
declare class BytesVariableCodec extends AbstractCodec<Uint8Array> {
readonly lengthCodec: AbstractCodec<number>;
constructor(lengthCodec?: AbstractCodec<number>);
isValid(value: unknown): value is Uint8Array;
byteLength(value: Uint8Array): number;
_encode(value: Uint8Array, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Uint8Array;
}
type BytesCodec = BytesFixedCodec | BytesVariableCodec;
/**
* Creates a codec for a variable length buffer.
*
* Serializes to ```[LENGTH?][BUFFER]```
*
* Length is present only for variable length buffers.
*
* @param {AbstractCodec<number>} [lengthCodec="VarInt50()"] - Codec to specify how the length is encoded.
* @return {BytesCodec} BytesCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Bytes/index.ts|Source}
*/
declare function createBytesCodec(lengthCodec?: AbstractCodec<number>): BytesVariableCodec;
/**
* Creates a codec for a fixed length buffer.
*
* Serializes to ```[LENGTH?][BUFFER]```
*
* Length is present only for variable length buffers.
*
* @param {number} length - Sets a fixed length.
* @return {BytesCodec} BytesCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Bytes/index.ts|Source}
*/
declare function createBytesCodec(length: number): BytesFixedCodec;
declare class ConstantCodec<const Value> extends AbstractCodec<Value> {
readonly value: Value;
constructor(value: Value);
isValid(value: unknown): value is Value;
byteLength(_value: Value): number;
_encode(_value: Value, _buffer: Uint8Array, _c: Context): void;
_decode(_buffer: Uint8Array, _c: Context): Value;
}
declare const endiannessValues: readonly ["BE", "LE"];
type Endianness = (typeof endiannessValues)[number];
declare const uIntBitValues: readonly [8, 16, 24, 32, 40, 48];
type UIntBits = (typeof uIntBitValues)[number];
type UIntCodec = UInt8Codec | UInt16BECodec | UInt16LECodec | UInt24BECodec | UInt24LECodec | UInt32BECodec | UInt32LECodec | UInt40BECodec | UInt40LECodec | UInt48BECodec | UInt48LECodec;
declare class UInt8Codec extends AbstractCodec<number> {
_bufferMap: Record<number, Buffer>;
constructor();
isValid(value: unknown): value is number;
byteLength(_: number): 1;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt16BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 2;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt16LECodec extends UInt16BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt24BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 3;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt24LECodec extends UInt24BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt32BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 4;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt32LECodec extends UInt32BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt40BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 5;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt40LECodec extends UInt40BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt48BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 6;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UInt48LECodec extends UInt48BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare const floatBitValues: readonly [32, 64];
type FloatBits = (typeof floatBitValues)[number];
type FloatCodec = Float32BECodec | Float32LECodec | Float64BECodec | Float64LECodec;
declare class Float32BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 4;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Float32LECodec extends Float32BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Float64BECodec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(_: number): 8;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Float64LECodec extends Float64BECodec {
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
type IntCodec = Int8Codec | Int16BECodec | Int16LECodec | Int24BECodec | Int24LECodec | Int32BECodec | Int32LECodec | Int40BECodec | Int40LECodec | Int48BECodec | Int48LECodec;
declare class Int8Codec extends UInt8Codec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int16BECodec extends UInt16BECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int16LECodec extends UInt16LECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int24BECodec extends UInt24BECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int24LECodec extends UInt24LECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int32BECodec extends UInt32BECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int32LECodec extends UInt32LECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int40BECodec extends UInt40BECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int40LECodec extends UInt40LECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int48BECodec extends UInt48BECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class Int48LECodec extends UInt48LECodec {
isValid(value: any): value is number;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class UnionCodec<const Codecs extends Array<AbstractCodec<any>>> extends AbstractCodec<CodecType<Codecs[number]>> {
readonly indexCodec: AbstractCodec<number>;
codecs: Codecs;
constructor(codecs: Codecs, indexCodec?: AbstractCodec<number>);
isValid(value: unknown): value is CodecType<Codecs[number]>;
byteLength(value: CodecType<Codecs[number]>): number;
_encode(value: CodecType<Codecs[number]>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): CodecType<Codecs[number]>;
}
/**
* Creates a codec for a fixed object.
*
* Serializes to ```[...[PROPERTY_VALUES]]```
*
* Encodes each property value with the codec associated with that key.
*
* @param {Record<string, AbstractCodec>} properties - Properties of the object.
* @return {ObjectCodec} ObjectCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Object/index.ts|Source}
*/
declare function createObjectCodec<Properties extends Record<string, AbstractCodec>>(properties: Properties): ObjectCodec<Properties>;
type RequiredKeys<T extends Record<string | number, AbstractCodec<any>>> = {
[K in keyof T]: T[K] extends UnionCodec<[AbstractCodec, ConstantCodec<undefined>]> ? undefined : K;
}[keyof T];
type OptionalKeys<T extends Record<string | number, AbstractCodec<any>>> = {
[K in keyof T]: T[K] extends UnionCodec<[AbstractCodec, ConstantCodec<undefined>]> ? K : undefined;
}[keyof T];
type _OutputObject<T extends Record<string | number, AbstractCodec<any>>> = {
[K in Exclude<RequiredKeys<T>, undefined>]: CodecType<T[K]>;
} & {
[K in Exclude<OptionalKeys<T>, undefined>]?: CodecType<T[K]>;
};
type OutputObject<T extends Record<string | number, AbstractCodec<any>>> = {
[K in keyof _OutputObject<T>]: _OutputObject<T>[K];
};
declare class ObjectCodec<Properties extends Record<string, AbstractCodec>> extends AbstractCodec<OutputObject<Properties>> {
readonly properties: Properties;
entries: Array<[keyof Properties, AbstractCodec]>;
constructor(properties: Properties);
isValid(value: unknown): value is OutputObject<Properties>;
byteLength(value: OutputObject<Properties>): number;
_encode(value: OutputObject<Properties>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): OutputObject<Properties>;
}
declare class RecordFixedCodec<Key extends string, Value extends any> extends AbstractCodec<Record<Key, Value>> {
readonly length: number;
readonly keyCodec: AbstractCodec<Key>;
readonly valueCodec: AbstractCodec<Value>;
constructor(length: number, keyCodec: AbstractCodec<Key>, valueCodec: AbstractCodec<Value>);
isValid(value: unknown): value is Record<Key, Value>;
byteLength(value: Record<Key, Value>): number;
_encode(value: Record<Key, Value>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Record<Key, Value>;
}
declare class RecordVariableCodec<Key extends string, Value extends any> extends AbstractCodec<Record<Key, Value>> {
readonly keyCodec: AbstractCodec<Key>;
readonly valueCodec: AbstractCodec<Value>;
readonly lengthCodec: AbstractCodec<number>;
constructor(keyCodec: AbstractCodec<Key>, valueCodec: AbstractCodec<Value>, lengthCodec?: AbstractCodec<number>);
isValid(value: unknown): value is Record<Key, Value>;
byteLength(value: Record<Key, Value>): number;
_encode(value: Record<Key, Value>, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Record<Key, Value>;
}
type RecordCodec<Key extends string, Value> = RecordFixedCodec<Key, Value> | RecordVariableCodec<Key, Value>;
/**
* Creates a codec for a variable size record or map of keys and values.
*
* Serializes to ```[LENGTH][...[[KEY][VALUE]]]```
*
* Length is present only for variable length records.
*
* @param {AbstractCodec<string>} keyCodec - Codec for keys.
* @param {AbstractCodec} valueCodec - Codec for values.
* @param {AbstractCodec<number>} [options.lengthCodec="VarUInt()"] - Codec to specify how the length is encoded.
* @return {RecordCodec} RecordCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Record/index.ts|Source}
*/
declare function createRecordCodec<Key extends string, Value>(keyCodec: AbstractCodec<Key>, valueCodec: AbstractCodec<Value>, lengthCodec?: AbstractCodec<number>): RecordVariableCodec<Key, Value>;
/**
* Creates a codec for a fixed size record or map of keys and values.
*
* Serializes to ```[...[[KEY][VALUE]]]```
*
* Length is present only for variable length records.
*
* @param {AbstractCodec<string>} keyCodec - Codec for keys.
* @param {AbstractCodec} valueCodec - Codec for values.
* @param {number} length - Sets a fixed length.
* @return {RecordCodec} RecordCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/Record/index.ts|Source}
*/
declare function createRecordCodec<Key extends string, Value>(keyCodec: AbstractCodec<Key>, valueCodec: AbstractCodec<Value>, length: number): RecordFixedCodec<Key, Value>;
declare class StringFixedCodec extends AbstractCodec<string> {
readonly encoding: StringEncoding;
private _byteLength;
private _bufferCodec;
constructor(byteLength: number, encoding?: StringEncoding);
isValid(value: unknown): value is string;
byteLength(_value: string): number;
_encode(value: string, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): string;
}
declare class StringVariableCodec extends AbstractCodec<string> {
readonly encoding: StringEncoding;
readonly lengthCodec: AbstractCodec<number>;
private _bufferCodec;
constructor(encoding?: StringEncoding, lengthCodec?: AbstractCodec<number>);
isValid(value: unknown): value is string;
byteLength(value: string): number;
_encode(value: string, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): string;
}
type StringEncoding = "hex" | "base32" | "base58" | "base64" | "base64url" | "utf8";
type StringCodec = StringFixedCodec | StringVariableCodec;
/**
* Creates a codec for a variable length string.
*
* Serializes to ```[LENGTH][STRING]```
*
* Length is present only for variable length strings.
*
* @param {StringEncoding} [encoding="utf8"] - The strings encoding.
* @param {AbstractCodec<number>} [lengthCodec="VarUInt()"] - Codec to specify how the length is encoded.
* @return {StringCodec} StringCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/String/index.ts|Source}
*/
declare function createStringCodec(encoding?: StringEncoding, lengthCodec?: AbstractCodec<number>): StringVariableCodec;
/**
* Creates a codec for a fixed length string.
*
* Serializes to ```[STRING]```
*
* Length is present only for variable length strings.
*
* @param {StringEncoding} [encoding="utf8"] - The strings encoding.
* @param {number} [byteLength] - Sets a fixed byte length.
* @return {StringCodec} StringCodec
*
* {@link https://github.com/visionsofparadise/bufferfy/blob/main/src/Codecs/String/index.ts|Source}
*/
declare function createStringCodec(encoding?: StringEncoding, byteLength?: number): StringFixedCodec;
interface TransformCodecOptions<Source, Target> {
isValid?: (source: unknown) => boolean;
encode: (source: Source) => Target;
decode: (target: Target, buffer: Uint8Array) => Source;
}
declare class TransformCodec<Source, Target> extends AbstractCodec<Source> {
readonly targetCodec: AbstractCodec<Target>;
private readonly _isSourceValid;
private readonly _encodeSource;
private readonly _decodeTarget;
constructor(targetCodec: AbstractCodec<Target>, options: TransformCodecOptions<Source, Target>);
isValid(value: unknown): value is Source;
byteLength(value: Source): number;
_encode(value: Source, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Source;
}
declare class TupleCodec<Tuple extends [...any[]]> extends AbstractCodec<Tuple> {
readonly codecs: [
...{
[Index in keyof Tuple]: AbstractCodec<Tuple[Index]>;
}
];
constructor(codecs: [
...{
[Index in keyof Tuple]: AbstractCodec<Tuple[Index]>;
}
]);
isValid(value: unknown): value is Tuple;
byteLength(value: Tuple): number;
_encode(value: Tuple, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): Tuple;
}
declare class VarInt15Codec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(value: number): 1 | 2;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class VarInt30Codec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(value: number): 1 | 2 | 3 | 4;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare class VarInt60Codec extends AbstractCodec<number> {
isValid(value: unknown): value is number;
byteLength(value: number): 1 | 2 | 3 | 4 | 5 | 6 | 7;
_encode(value: number, buffer: Uint8Array, c: Context): void;
_decode(buffer: Uint8Array, c: Context): number;
}
declare const varIntBitValues: readonly [15, 30, 60];
type VarIntBits = (typeof varIntBitValues)[number];
type VarIntCodec = VarInt15Codec | VarInt30Codec | VarInt60Codec;
type UnionToIntersection<Union> = (Union extends unknown ? (distributedUnion: Union) => void : never) extends (mergedIntersection: infer Intersection) => void ? Intersection & Union : never;
declare namespace Codec {
type Type<Codec extends AbstractCodec<any>> = CodecType<Codec>;
}
declare const Codec: {
Any: <Value = any>(options?: AnyCodecOptions<Value>) => AnyCodec<Value>;
Array: typeof createArrayCodec;
BitField: <Key extends string>(keys: Array<Key>) => BitFieldCodec<Key>;
Boolean: BooleanCodec;
Bytes: typeof createBytesCodec;
Constant: <const Value>(value: Value) => ConstantCodec<Value>;
Enum: <const Value>(enumValues: Array<Value>, indexCodec: AbstractCodec<number>) => UnionCodec<ConstantCodec<Value>[]>;
False: ConstantCodec<false>;
Float: (bits?: FloatBits, endianness?: Endianness) => Float32BECodec | Float64BECodec;
Int: (bits?: UIntBits, endianness?: Endianness) => Int8Codec | Int16BECodec | Int16LECodec | Int24BECodec | Int24LECodec | Int32BECodec | Int32LECodec | Int40BECodec | Int40LECodec | Int48BECodec | Int48LECodec;
Merge: <const ObjectCodecs extends Array<ObjectCodec<any>>>(objectCodecs: ObjectCodecs) => ObjectCodec<UnionToIntersection<ObjectCodecs[number]["properties"]>>;
Null: ConstantCodec<null>;
Nullable: <Value>(codec: AbstractCodec<Value>) => UnionCodec<[AbstractCodec<Value>, ConstantCodec<null>]>;
Object: typeof createObjectCodec;
Omit: <Properties extends Record<string, AbstractCodec>, Key extends keyof Properties>(objectCodec: ObjectCodec<Properties>, keys: Array<Key>) => ObjectCodec<Omit<Properties, Key>>;
Optional: <Value>(codec: AbstractCodec<Value>) => UnionCodec<[AbstractCodec<Value>, ConstantCodec<undefined>]>;
Pick: <Properties extends Record<string, AbstractCodec>, Key extends keyof Properties>(objectCodec: ObjectCodec<Properties>, keys: Array<Key>) => ObjectCodec<Pick<Properties, Key>>;
Record: typeof createRecordCodec;
String: typeof createStringCodec;
Transform: <Source, Target>(targetCodec: AbstractCodec<Target>, options: TransformCodecOptions<Source, Target>) => TransformCodec<Source, Target>;
True: ConstantCodec<true>;
Tuple: <Tuple extends [...any[]]>(codecs: [...{ [Index in keyof Tuple]: AbstractCodec<Tuple[Index]>; }]) => TupleCodec<Tuple>;
UInt: (bits?: UIntBits, endianness?: Endianness) => UInt8Codec | UInt16BECodec | UInt24BECodec | UInt32BECodec | UInt40BECodec | UInt48BECodec;
Undefined: ConstantCodec<undefined>;
Union: <const Codecs extends Array<AbstractCodec<any>>>(codecs: Codecs, indexCodec?: AbstractCodec<number>) => UnionCodec<Codecs>;
VarInt: (bits?: VarIntBits) => VarInt60Codec | VarInt15Codec | VarInt30Codec;
};
export { AbstractCodec, AnyCodec, ArrayCodec, ArrayFixedCodec, ArrayVariableCodec, BitFieldCodec, BooleanCodec, BytesCodec, BytesFixedCodec, BytesVariableCodec, Codec, ConstantCodec, Float32BECodec, Float32LECodec, Float64BECodec, Float64LECodec, FloatCodec, Int16BECodec, Int16LECodec, Int24BECodec, Int24LECodec, Int32BECodec, Int32LECodec, Int40BECodec, Int40LECodec, Int48BECodec, Int48LECodec, Int8Codec, IntCodec, ObjectCodec, RecordCodec, RecordFixedCodec, RecordVariableCodec, StringCodec, StringFixedCodec, StringVariableCodec, TransformCodec, TupleCodec, UInt16BECodec, UInt16LECodec, UInt24BECodec, UInt24LECodec, UInt32BECodec, UInt32LECodec, UInt40BECodec, UInt40LECodec, UInt48BECodec, UInt48LECodec, UInt8Codec, UIntCodec, UnionCodec, VarInt15Codec, VarInt30Codec, VarInt60Codec, VarIntCodec };