# buildHierarchy

> _Since v3.9.0_

Build the flat row list for `rows` from every contributor's sibling-list
transforms, recording each emitted row's ARIA position in `meta`.

Contributors whose `beginHierarchy` returns `false` sit out the rebuild.
With no active contributor the rows pass through unchanged. When every
active contributor's `endHierarchy` returns `false`, no position is kept in `meta`.

This is what `HierarchyPlugin.process()` runs for all attached contributors.
Call it directly to run a contributor without a grid — e.g. as the
`processRows` fallback when no HierarchyPlugin is attached, or in unit tests.

```ts
function buildHierarchy(rows: readonly unknown[], contributors: readonly HierarchyContributor[], meta: WeakMap<object, HierarchyRowMeta>): unknown[]
```

## Parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| `rows` | <code>readonly unknown[]</code> | The root rows. |
| `contributors` | <code>readonly <a href="/grid/plugins/hierarchy/interfaces/hierarchycontributor/">HierarchyContributor</a>[]</code> | Contributors to run, in `processRows` hook order. |
| `meta` | <code>WeakMap&lt;object, <a href="/grid/plugins/hierarchy/interfaces/hierarchyrowmeta/">HierarchyRowMeta</a>&gt;</code> | Receives each emitted row's position. Pass a fresh map per rebuild. |

## Example

```ts
override processRows(rows: readonly unknown[]): unknown[] {
  const hierarchy = this.grid?.getPluginByName('hierarchy');
  return hierarchy ? hierarchy.process(rows, this) : buildHierarchy(rows, [this]);
}
```
