typeId property

  1. @override
int typeId
override

Called for type registration

Implementation

@override
int get typeId {
  late final int id;

  // initialize typesNode
  final typesNode =
      graph._getNode(_hiveAdapterKey, orAdd: true, notify: false)!;

  // if `typeId` was supplied, use it
  if (_typeId != null) {
    id = _typeId!;
  } else {
    // otherwise auto-calculate (and persist)

    // _adapter_hive:key: {
    //   '_adapter_hive:posts': ['_adapter_hive:1'],
    //   '_adapter_hive:comments': ['_adapter_hive:2'],
    //   '_adapter_hive:houses': ['_adapter_hive:3'],
    // }

    final edge = typesNode[internalType.namespaceWith(_hiveAdapterNs)];

    if (edge != null && edge.isNotEmpty) {
      // first is of format: _adapter_hive:1
      return int.parse(edge.first.denamespace());
    }

    // get namespaced indices
    id = typesNode.values
            // denamespace and parse single
            .map((e) => int.parse(e.first.denamespace()))
            // find max
            .fold(0, math.max) +
        1;
  }

  graph._addEdge(_hiveAdapterKey, id.toString().namespaceWith(_hiveAdapterNs),
      metadata: internalType.namespaceWith(_hiveAdapterNs), notify: false);

  return id;
}