UNPKG

@chainsafe/lodestar-config

Version:

Chain configuration required for lodestar

63 lines 2.1 kB
import { fromHexString, toHexString } from "@chainsafe/ssz"; import { chainConfigTypes } from "./types.js"; const MAX_UINT64_JSON = "18446744073709551615"; export function chainConfigToJson(config) { const json = {}; for (const key of Object.keys(config)) { json[key] = serializeSpecValue(config[key], chainConfigTypes[key]); } return json; } export function chainConfigFromJson(json) { const config = {}; for (const key of Object.keys(json)) { config[key] = deserializeSpecValue(json[key], chainConfigTypes[key]); } return config; } export function serializeSpecValue(value, typeName) { switch (typeName) { case "number": if (typeof value !== "number") { throw Error(`Invalid value ${value} expected number`); } if (value === Infinity) { return MAX_UINT64_JSON; } return value.toString(10); case "bigint": if (typeof value !== "bigint") { throw Error(`Invalid value ${value} expected bigint`); } return value.toString(10); case "bytes": if (!(value instanceof Uint8Array)) { throw Error(`Invalid value ${value} expected Uint8Array`); } return toHexString(value); case "string": if (typeof value !== "string") { throw Error(`Invalid value ${value} expected string`); } return value; } } export function deserializeSpecValue(valueStr, typeName) { if (typeof valueStr !== "string") { throw Error(`Invalid value ${valueStr} expected string`); } switch (typeName) { case "number": if (valueStr === MAX_UINT64_JSON) { return Infinity; } return parseInt(valueStr, 10); case "bigint": return BigInt(valueStr); case "bytes": return fromHexString(valueStr); case "string": return valueStr; } } //# sourceMappingURL=json.js.map