@ckb-cobuild/moleculeAn opinionated molecule library which defines schema in code.
TypedArray: Can I Use?DataView: Can I Use?BigInt: Can I Use?@ckb-lumos/codecThe 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