Function graphJson

  • create a Json graph constructor with default settings

    If you serialize a graph or node using JSON.stringify, this operator can be used to hydrate them back into a MutGraph. This is expecially useful for serializing the graph to do layouts in a separate worker.

    If you serialize a GraphNode the deserialized graph will be the same node that was serialized, but the rest of that node's connected component will be deserialized as well, and still reachable via Graph#nodes. The type information will inherently be lost, and will need to be cast.

    Since serialization doesn't inherently imply deserialization, Json#nodeDatum and Json#linkDatum can be used to provide custom hydration for node and linke data.

    Parameters

    • ...args: readonly never[]

    Returns DefaultJson

    This example shows how to deserialize a graph while losing type information.

    const orig: Graph = ...
    const serialized = JSON.stringify(orig);
    const builder = graphJson();
    const deserialized = builder(JSON.parse(serialized));

    Note, that because no custom hydrators were given, deserialized will have type MutGraph<unknown, unknown> which probably isn't desired.

    This example demonstrates using a simple data hydrator.

    const orig: Graph<number, string> = ...
    const serialized = JSON.stringify(orig);
    const builder = graphJson()
    .nodeDatum(data => data as number)
    .linkDatum(data => data as string);
    const deserialized = builder(JSON.parse(serialized));

    Now deserialized has the same type as the original grah. In real use, you'll probably want to use type guards to guarantee the data was deserialized correctly.