"Resolves" a builder from the 3 ways it can be input: 1. A clean instance 2. A data object that can be used to construct the builder 3. A function that takes a builder and returns a builder e.g. 
builder => builder.setFoo('bar')| Name | Constraints | Optional | Default | Description | 
|---|---|---|---|---|
| Builder | JSONEncodable<any> | No | The builder type | |
| BuilderData | Record<PropertyKey, any> | No | The data object that can be used to construct the builder | 
| Name | Type | Optional | Description | 
|---|---|---|---|
| builder | Builder | BuilderData | ((builder: Builder) => Builder) | No | The user input, as described in the function description | 
| Constructor | new (data?: BuilderData) => Builder | No | The constructor of the builder |