> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Class: ViewDefinition<Expr, Indexes>

> Not exported: an exported type refers to it.

[browser](/api/modules/browser).ViewDefinition

Not exported: an exported type refers to it.

## Type parameters

| Name | Type |
| :- | :- |
| `Expr` | `Expr` |
| `Indexes` | extends [`GenericTableIndexes`](/api/modules/browser#generictableindexes) = \{} |

## Hierarchy

* [`TableDefinition`](/api/classes/browser.TableDefinition)\<`ReturnType`\<typeof `v.any`>, `Indexes`>

  ↳ **`ViewDefinition`**

## Constructors

### constructor

• **new ViewDefinition**\<`Expr`, `Indexes`>(`expression`, `limits`)

#### Type parameters

| Name | Type |
| :- | :- |
| `Expr` | `Expr` |
| `Indexes` | extends [`GenericTableIndexes`](/api/modules/browser#generictableindexes) = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `expression` | [`RelationalQuery`](/api/classes/browser.RelationalQuery)\<`Expr`> |
| `limits` | [`ViewLimits`](/api/modules/browser#viewlimits) |

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[constructor](/api/classes/browser.TableDefinition#constructor)

## Properties

### isSource

• `Readonly` **isSource**: `false`

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[isSource](/api/classes/browser.TableDefinition#issource)

***

### relations

• `Readonly` **relations**: `Object`

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[relations](/api/classes/browser.TableDefinition#relations)

***

### validator

• **validator**: [`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[validator](/api/classes/browser.TableDefinition#validator)

***

### viewFrom

• `Readonly` **viewFrom**: `string`

***

### viewExpression

• `Readonly` **viewExpression**: `Expr`

***

### viewDefinition

• `Readonly` **viewDefinition**: [`ViewDeclaration`](/api/modules/browser#viewdeclaration)

***

### schemaTableNames

• `Private` `Readonly` **schemaTableNames**: `Set`\<`string`>

## Methods

### access

▸ **access**(`definition`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`ReadAccess`](/api/modules/browser#readaccess) |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[access](/api/classes/browser.TableDefinition#access)

▸ **access**(`definition`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`Members`](/api/modules/browser#members) |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[access](/api/classes/browser.TableDefinition#access)

▸ **access**\<`R`, `B`>(`definition`, `...binding`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`> & [`AccessTableBinding`](/api/modules/browser#accesstablebinding)\<`R`, `B`>

#### Type parameters

| Name | Type |
| :- | :- |
| `R` | extends [`AccessResource`](/api/interfaces/browser.AccessResource)\<`undefined` \| `string`, `string`, `string`, [`ResourceAccessModelDefinition`](/api/modules/browser#resourceaccessmodeldefinition), `R`> |
| `B` | extends `object` = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | `R` |
| `...binding` | `R` extends [`AccessResource`](/api/interfaces/browser.AccessResource)\<`string`, `string`, `string`, [`ResourceAccessModelDefinition`](/api/modules/browser#resourceaccessmodeldefinition)> ? \[options: AccessResourceBinding\<string, R extends AccessResource\<any, P, string, ResourceAccessModelDefinition> ? P : never> & B & Object & Object] : \[options?: AccessResourceBinding\<string, R extends AccessResource\<any, P, string, ResourceAccessModelDefinition> ? P : never> & B & Object] |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`> & [`AccessTableBinding`](/api/modules/browser#accesstablebinding)\<`R`, `B`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[access](/api/classes/browser.TableDefinition#access)

***

### input

▸ **input**(`...limits`): [`TableInput`](/api/modules/browser#tableinput)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>>

#### Parameters

| Name | Type |
| :- | :- |
| `...limits` | \[limits: InputLimits\<any>] |

#### Returns

[`TableInput`](/api/modules/browser#tableinput)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[input](/api/classes/browser.TableDefinition#input)

***

### resourceRequests

▸ **resourceRequests**(`options`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `options` | `Object` |
| `options.grants` | `string` |
| `options.expire` | [`FunctionReference`](/api/modules/browser#functionreference)\<`"mutation"`, `"internal"`, \{ `id`: [`Id`](/api/modules/browser#id)\<`string`>  }> |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[resourceRequests](/api/classes/browser.TableDefinition#resourcerequests)

***

### retain

▸ **retain**(`options`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `options` | `Object` |
| `options.by` | `string` \| `string`\[] |
| `options.keys?` | `"registered"` \| `"derived"` |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[retain](/api/classes/browser.TableDefinition#retain)

***

### erasable

▸ **erasable**(): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[erasable](/api/classes/browser.TableDefinition#erasable)

***

### aggregate

▸ **aggregate**(`name`, `options`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `string` |
| `options` | `Object` |
| `options.by` | `string`\[] |
| `options.sum?` | `string`\[] |
| `options.decimal?` | `Record`\<`string`, `number`> |
| `options.time?` | `Object` |
| `options.time.field` | `string` |
| `options.time.unit` | `"minute"` \| `"hour"` \| `"day"` \| `"week"` \| `"month"` \| `"second"` |
| `options.visibility?` | `"collectionReaders"` |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[aggregate](/api/classes/browser.TableDefinition#aggregate)

***

### govern

▸ **govern**(`this`, `definition`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `definition` | [`GoverningDefinition`](/api/modules/browser#governingdefinition)\<\{} & \{ `_id`: [`Id`](/api/modules/browser#id)\<`string`>  }> |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[govern](/api/classes/browser.TableDefinition#govern)

***

### link

▸ **link**\<`Fields`, `Names`>(`this`, `endpoints`, `names?`): [`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, [`LinkRelations`](/api/modules/browser#linkrelations)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Fields`, `Names`>>

#### Type parameters

| Name | Type |
| :- | :- |
| `Fields` | extends `never` |
| `Names` | extends `Partial`\<`Record`\<`Fields`, [`LinkEndpointNames`](/api/modules/browser#linkendpointnames)>> = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `endpoints` | `Record`\<`Fields`, [`Cardinality`](/api/modules/browser#cardinality)> |
| `names?` | `Names` |

#### Returns

[`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, [`LinkRelations`](/api/modules/browser#linkrelations)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Fields`, `Names`>>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[link](/api/classes/browser.TableDefinition#link)

***

### reference

▸ **reference**\<`Field`, `Options`>(`this`, `field`, `options?`): [`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, [`ReferenceRelation`](/api/modules/browser#referencerelation)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Field`, `Options`>>

#### Type parameters

| Name | Type |
| :- | :- |
| `Field` | extends `never` |
| `Options` | extends [`ReferenceOptions`](/api/modules/browser#referenceoptions) = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `field` | `Field` |
| `options?` | `Options` |

#### Returns

[`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, [`ReferenceRelation`](/api/modules/browser#referencerelation)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Field`, `Options`>>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[reference](/api/classes/browser.TableDefinition#reference)

***

### source

▸ **source**\<`S`>(`this`, `handle`): [`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `true`, \{}>

#### Type parameters

| Name | Type |
| :- | :- |
| `S` | extends `Record`\<`string`, [`GenericValidator`](/api/modules/browser#genericvalidator)> |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `handle` | [`SourceHandle`](/api/modules/browser#sourcehandle)\<`S`> & \[`any`] extends \[[`Expand`](/api/modules/browser#expand)\<\{ \[Property in string \| number \| symbol]?: Exclude\<Infer\<S\[Property]>, undefined> } & \{ \[Property in string \| number \| symbol]: Infer\<S\[Property]> }>] ? \[[`Expand`](/api/modules/browser#expand)\<\{ \[Property in string \| number \| symbol]?: Exclude\<Infer\<S\[Property]>, undefined> } & \{ \[Property in string \| number \| symbol]: Infer\<S\[Property]> }>] extends \[`any`] ? `unknown` : `never` : `never` |

#### Returns

[`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `true`, \{}>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[source](/api/classes/browser.TableDefinition#source)

***

### isLocalRetained

▸ \*\* isLocalRetained\*\*(): `boolean`

#### Returns

`boolean`

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).\[ isLocalRetained]\(browser.TableDefinition.md# islocalretained)

***

### isLocal

▸ \*\* isLocal\*\*(): `boolean`

#### Returns

`boolean`

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).\[ isLocal]\(browser.TableDefinition.md# islocal)

***

### indexes

▸ \*\* indexes\*\*(): \{ `indexDescriptor`: `string` ; `fields`: `string`\[]  }\[]

#### Returns

\{ `indexDescriptor`: `string` ; `fields`: `string`\[]  }\[]

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).\[ indexes]\(browser.TableDefinition.md# indexes)

***

### self

▸ `Protected` **self**(): [`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, \{}>

#### Returns

[`TableDefinition`](/api/classes/browser.TableDefinition)\<[`VAny`](/api/classes/browser.VAny)\<`any`, `"required"`, `string`>, `Indexes`, \{}, \{}, `false`, \{}>

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[self](/api/classes/browser.TableDefinition#self)

***

### \[accessStorage]

▸ **\[accessStorage]**(): `Object`

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `indexes` | `Index`\[] |
| `erasable` | `boolean` |

#### Inherited from

[TableDefinition](/api/classes/browser.TableDefinition).[\[accessStorage\]](/api/classes/browser.TableDefinition#\[accessstorage])

***

### \_registerSchemaTableName

▸ **\_registerSchemaTableName**(`name`): `void`

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `string` |

#### Returns

`void`

***

### \_operationTableName

▸ **\_operationTableName**(): `string`

#### Returns

`string`

***

### index

▸ **index**\<`IndexName`, `FirstFieldPath`, `RestFieldPaths`>(`name`, `config`): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, [`Expand`](/api/modules/browser#expand)\<`Indexes` & `Record`\<`IndexName`, \[`FirstFieldPath`, ...RestFieldPaths\[], `"_creationTime"`]>>>

#### Type parameters

| Name | Type |
| :- | :- |
| `IndexName` | extends `string` |
| `FirstFieldPath` | extends `string` |
| `RestFieldPaths` | extends `string`\[] |

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `IndexName` |
| `config` | \{ `fields`: \[`FirstFieldPath`, ...RestFieldPaths\[]] ; `staged?`: `false`  } \| \[`FirstFieldPath`, ...RestFieldPaths\[]] |

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, [`Expand`](/api/modules/browser#expand)\<`Indexes` & `Record`\<`IndexName`, \[`FirstFieldPath`, ...RestFieldPaths\[], `"_creationTime"`]>>>

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[index](/api/classes/browser.TableDefinition#index)

▸ **index**\<`IndexName`, `FirstFieldPath`, `RestFieldPaths`>(`name`, `config`): `never`

#### Type parameters

| Name | Type |
| :- | :- |
| `IndexName` | extends `string` |
| `FirstFieldPath` | extends `string` |
| `RestFieldPaths` | extends `string`\[] |

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `IndexName` |
| `config` | `Object` |
| `config.fields` | \[`FirstFieldPath`, ...RestFieldPaths\[]] |
| `config.staged` | `true` |

#### Returns

`never`

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[index](/api/classes/browser.TableDefinition#index)

***

### searchIndex

▸ **searchIndex**(`..._args`): `never`

#### Parameters

| Name | Type |
| :- | :- |
| `..._args` | `unknown`\[] |

#### Returns

`never`

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[searchIndex](/api/classes/browser.TableDefinition#searchindex)

***

### vectorIndex

▸ **vectorIndex**(`..._args`): `never`

#### Parameters

| Name | Type |
| :- | :- |
| `..._args` | `unknown`\[] |

#### Returns

`never`

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[vectorIndex](/api/classes/browser.TableDefinition#vectorindex)

***

### staged

▸ **staged**(`..._args`): `never`

#### Parameters

| Name | Type |
| :- | :- |
| `..._args` | `unknown`\[] |

#### Returns

`never`

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[staged](/api/classes/browser.TableDefinition#staged)

***

### materialize

▸ **materialize**(): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

***

### retire

▸ **retire**(): [`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

#### Returns

[`ViewDefinition`](/api/classes/browser.ViewDefinition)\<`Expr`, `Indexes`>

***

### export

▸ **export**(): `Object`

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `fileFields` | (`null` \| `string`)\[]\[] |
| `discovery?` | `string` |
| `indexes` | \{ `indexDescriptor`: `string` ; `fields`: `string`\[]  }\[] |
| `stagedDbIndexes` | `Index`\[] |
| `searchIndexes` | `SearchIndex`\[] |
| `stagedSearchIndexes` | `SearchIndex`\[] |
| `vectorIndexes` | `VectorIndex`\[] |
| `stagedVectorIndexes` | `VectorIndex`\[] |
| `documentType` | [`ValidatorJSON`](/api/modules/browser#validatorjson) |
| `stagedDocumentType` | `undefined` \| [`ValidatorJSON`](/api/modules/browser#validatorjson) |
| `access?` | `SerializedReadAccess` |
| `governingRule?` | `SerializedGoverningRule` |
| `source?` | [`SourceBinding`](/api/modules/browser#sourcebinding) |
| `link?` | [`LinkDefinition`](/api/modules/browser#linkdefinition) |
| `references?` | `Record`\<`string`, [`SerializedReference`](/api/modules/browser#serializedreference)> |
| `retain?` | `SerializedRetainedCustody` |
| `resourceRequests?` | `SerializedResourceRequests` |
| `aggregates?` | `Record`\<`string`, `SerializedAggregate`> |
| `erasable?` | `true` |
| `view` | [`ViewDeclaration`](/api/modules/browser#viewdeclaration) |

#### Overrides

[TableDefinition](/api/classes/browser.TableDefinition).[export](/api/classes/browser.TableDefinition#export)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.