Module @ckb-cobuild/molecule - v1.1.0

@ckb-cobuild/molecule

An opinionated molecule library which defines schema in code.

Browser Compatibility

Compare With @ckb-lumos/codec

The differences between @ckb-cobuild/molecule and @ckb-lumos/codec:

  • Lumos is flexible on the parameter type of the pack function, this library is strict and provides parse, safeParse, around to do conversions.
  • Lumos table codec fields are nullable, this library only allows null for option field.
  • This library supports schema validation via parse and safeParse.
  • This library supports exporting molecule schema to .mol file.

About the Interface

This library prefers better type inferring and checking to sipmle schema definition. There will be many type names repetitions because of the limitation of TypeScript.

Example

Coerce

import { mol } from "@ckb-cobuild/molecule";
const ByteCoerce = mol.byte.beforeParse((input: any) => Number(input));

Use Different JavaScript Value

import { mol } from "@ckb-cobuild/molecule";
const ByteOpt = mol.option("ByteOpt", mol.byte);
const BooleanOpt = ByteOpt.around({
safeParse: (input: boolean | null) => mol.parseSuccess(input),
willPack: (input: boolean | null) =>
input !== null ? (input ? 1 : 0) : null,
didUnpack: (value: number | null) => (value !== null ? value !== 0 : null),
});

Validation

const result = codec.safeParse({/*...*/});
expect(result.success).toBeFalsy();
if (!result.success) {
const messages = result.error.collectMessages();
expect(messages).toEqual([
"//: Struct member parse failed",
"//a: Expected integer from 0 to 255, found undefined",
"//b: Array member parse failed",
"//b/0: Expected object, found null",
"//b/2: Struct member parse failed",
"//b/2/b2: Array member parse failed",
"//b/2/b2/1: Expected integer from 0 to 255, found -1",
]);
}

Export Schema

import { mol } from "@ckb-cobuild/molecule";
const ByteOpt = mol.option("ByteOpt", mol.byte);
const ByteOptOpt = mol.option("ByteOptOpt", ByteOpt);
export(Array.from(ByteOptOpt.exportSchema().values())).toEqual([
"option ByteOpt (byte);",
"option ByteOptOpt (ByteOpt);",
]);

References

Re-exports AnyCodec
Re-exports AnyDynamicSizeCodec
Re-exports AnyFixedSizeCodec
Re-exports ArrayCodec
Re-exports BinaryWriter
Re-exports Byte10
Re-exports Byte20
Re-exports Byte32
Re-exports ByteCodec
Re-exports Bytes
Re-exports Codec
Re-exports CodecError
Re-exports CodecErrorFormatter
Re-exports CodecErrorSource
Re-exports CodecIssue
Re-exports DynamicSizeAroundCodec
Re-exports DynamicSizeCodec
Re-exports DynvecCodec
Re-exports EMPTY_BUFFER
Re-exports FixedSizeAroundCodec
Re-exports FixedSizeCodec
Re-exports FixvecCodec
Re-exports Infer
Re-exports InferParseInput
Re-exports InferUnion
Re-exports InferUnionParseInput
Re-exports Int128
Re-exports Int16
Re-exports Int256
Re-exports Int32
Re-exports Int64
Re-exports JsonValue
Re-exports NumberCodec
Re-exports NumberCodecSpec
Re-exports OptionCodec
Re-exports PARSE_ROOT_PATH
Re-exports SafeParseReturnError
Re-exports SafeParseReturnSuccess
Re-exports SafeParseReturnType
Re-exports StructCodec
Re-exports TableCodec
Re-exports Uint128
Re-exports Uint16
Re-exports Uint256
Re-exports Uint32
Re-exports Uint64
Re-exports Uint8ArrayCodec
Re-exports Uint8ArrayFixvecCodec
Re-exports UnionCodec
Re-exports UnknownCodec
Re-exports array
Re-exports byte
Re-exports byteArray
Re-exports byteFixvec
Re-exports byteVector
Re-exports createBigInt64Codec
Re-exports createBigIntJsonCodec
Re-exports createBigIntNCodec
Re-exports createBigUint64Codec
Re-exports createBigUintNCodec
Re-exports createBigUintNCodecSpec
Re-exports createInt16Codec
Re-exports createInt32Codec
Re-exports createNumberJsonCodec
Re-exports createSafeParse
Re-exports createUint16Codec
Re-exports createUint32Codec
Re-exports createUint8ArrayJsonCodec
Renames and re-exports mol
Re-exports dynvec
Re-exports fixvec
Re-exports formatCodecError
Re-exports isDynamicSizeCodec
Re-exports isFixedSizeCodec
Re-exports makeBigInt
Re-exports option
Re-exports packUintN
Re-exports parseError
Re-exports parseSuccess
Re-exports parseSuccessThen
Re-exports struct
Re-exports table
Re-exports toJson
Re-exports union
Re-exports unpackError
Re-exports unpackUintN
Re-exports vector

Generated using TypeDoc