@ckb-cobuild/molecule
An opinionated molecule library which defines schema in code.
TypedArray
: Can I Use?DataView
: Can I Use?BigInt
: Can I Use?@ckb-lumos/codec
The differences between @ckb-cobuild/molecule
and @ckb-lumos/codec
:
pack
function, this library is strict and provides parse
, safeParse
, around
to do conversions.parse
and safeParse
..mol
file.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.
import { mol } from "@ckb-cobuild/molecule";
const ByteCoerce = mol.byte.beforeParse((input: any) => Number(input));
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),
});
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",
]);
}
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);",
]);
Generated using TypeDoc