> ## 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: VirtualSeriesDefinition<Row, Key, M>

> An external observation family and its temporal interpretation.

[server](https://docs.bijection.com/api/modules/server).VirtualSeriesDefinition

An external observation family and its temporal interpretation. It is a
virtual relation in the schema, with no local storage, admission ledger or
independent version/permission owner. Expressions use the existing exact
int64 relational temporal profile and its executor eligibility checks.

## Type parameters

| Name | Type |
| :- | :- |
| `Row` | extends `Record`\<`string`, `any`> |
| `Key` | extends [`KeyFields`](https://docs.bijection.com/api/modules/server#keyfields)\<`Row`> |
| `M` | extends `Measures`\<`Row`> |

## Hierarchy

* [`VirtualTableDefinition`](https://docs.bijection.com/api/classes/server.VirtualTableDefinition)\<`Row`>

  ↳ **`VirtualSeriesDefinition`**

## Constructors

### constructor

• **new VirtualSeriesDefinition**\<`Row`, `Key`, `M`>(`source`, `contract`, `executor?`)

#### Type parameters

| Name | Type |
| :- | :- |
| `Row` | extends `Record`\<`string`, `any`> |
| `Key` | extends [`KeyFields`](https://docs.bijection.com/api/modules/server#keyfields)\<`Row`> |
| `M` | extends `Measures`\<`Row`> |

#### Parameters

| Name | Type |
| :- | :- |
| `source` | [`Source`](https://docs.bijection.com/api/modules/server#source) |
| `contract` | [`VirtualSeriesContract`](https://docs.bijection.com/api/modules/server#virtualseriescontract)\<`Row`, `Key`, `M`> |
| `executor?` | [`RelationalExecutor`](https://docs.bijection.com/api/modules/server#relationalexecutor) |

#### Overrides

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[constructor](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#constructor)

## Properties

### \[nativeTableType]

• `Readonly` **\[nativeTableType]**: \[[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`]

Type-only projection retained in emitted schema declarations.

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[\[nativeTableType\]](https://docs.bijection.com/api/classes/server.VirtualTableDefinition#\[nativetabletype])

***

### isSource

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

Type-only source ownership, preserved by every builder method.

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[isSource](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#issource)

***

### relations

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

Type-only declared relations, preserved by every builder method.

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[relations](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#relations)

***

### validator

• **validator**: [`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[validator](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#validator)

***

### virtualSeriesDefinition

• `Readonly` **virtualSeriesDefinition**: `true`

***

### temporal

• `Readonly` **temporal**: `Readonly`\<\{ `key`: `Key` ; `observationId`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `string`> ; `time`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> ; `correctionOrder`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> ; `measures`: `M`  }>

***

### virtualTableDefinition

• `Readonly` **virtualTableDefinition**: `true`

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[virtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#virtualtabledefinition)

## Methods

### implements

▸ **implements**\<`I`, `Mappings`, `Writable`>(`contract`, `mapping`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`InterfaceMembership`](https://docs.bijection.com/api/modules/server#interfacemembership)\<`I`> & [`InterfaceWriteMappings`](https://docs.bijection.com/api/modules/server#interfacewritemappings)\<`I`, `Writable`\[`number`] | [`RelationshipWriteKeys`](https://docs.bijection.com/api/modules/server#relationshipwritekeys)\<`Mappings`>> & [`InterfaceNavigationIdentity`](https://docs.bijection.com/api/interfaces/server.InterfaceNavigationIdentity)\<\{ readonly \[Name in string]: Mappings }>

Bind this concrete type to a shared object contract.

#### Type parameters

| Name | Type |
| :- | :- |
| `I` | extends [`ObjectInterface`](https://docs.bijection.com/api/modules/server#objectinterface) |
| `Mappings` | extends `Record`\<`string`, [`InterfaceRelationshipMapping`](https://docs.bijection.com/api/modules/server#interfacerelationshipmapping)> = \{} |
| `Writable` | extends readonly `Object`\[] = readonly \[] |

#### Parameters

| Name | Type |
| :- | :- |
| `contract` | `I` |
| `mapping` | \{ `writable?`: readonly (keyof `NoInfer<I>`\[`"properties"`] \| keyof `NoInfer<I>`\[`"optional"`]\[`"properties"`])\[] ; `properties`: (`row`: `0` extends `1` & `Row` & [`SystemFields`](https://docs.bijection.com/api/modules/server#systemfields) ? `any` : [`RowReference`](https://docs.bijection.com/api/modules/server#rowreference)\<`Row` & [`SystemFields`](https://docs.bijection.com/api/modules/server#systemfields)>) => \{ \[K in string \| number \| symbol]: FieldReference\<NoInfer\<I>\["properties"]\[K]\["type"]> } & [`WhenKeys`](https://docs.bijection.com/api/modules/server#whenkeys)\<keyof `NoInfer<I>`\[`"optional"`]\[`"properties"`], \{ \[K in string \| number \| symbol]?: FieldReference\<NoInfer\<I>\["optional"]\["properties"]\[K]\["type"]> }>  } & keyof `NoInfer<I>`\[`"relationships"`] extends `never` ? keyof `NoInfer<I>`\[`"optional"`]\[`"relationships"`] extends `never` ? \{} : \{ `relationships?`: [`WhenKeys`](https://docs.bijection.com/api/modules/server#whenkeys)\<keyof `NoInfer<I>`\[`"optional"`]\[`"relationships"`], \{ \[K in string \| number \| symbol]?: InterfaceRelationshipMapping\<string> }>  } : \{ `relationships`: \{ \[K in string \| number \| symbol]: InterfaceRelationshipMapping\<string> } & [`WhenKeys`](https://docs.bijection.com/api/modules/server#whenkeys)\<keyof `NoInfer<I>`\[`"optional"`]\[`"relationships"`], \{ \[K in string \| number \| symbol]?: InterfaceRelationshipMapping\<string> }>  } & \{ `relationships?`: `Mappings` ; `writable?`: `Writable`  } |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`InterfaceMembership`](https://docs.bijection.com/api/modules/server#interfacemembership)\<`I`> & [`InterfaceWriteMappings`](https://docs.bijection.com/api/modules/server#interfacewritemappings)\<`I`, `Writable`\[`number`] | [`RelationshipWriteKeys`](https://docs.bijection.com/api/modules/server#relationshipwritekeys)\<`Mappings`>> & [`InterfaceNavigationIdentity`](https://docs.bijection.com/api/interfaces/server.InterfaceNavigationIdentity)\<\{ readonly \[Name in string]: Mappings }>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[implements](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#implements)

***

### resource

▸ **resource**\<`Projection`>(`projection`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & \{ `componentResource`: `Projection`  }

Protect this component table through its installation's resource policy.
Schema assembly derives the read, write and disclosure policy entries.

#### Type parameters

| Name | Type |
| :- | :- |
| `Projection` | extends `Object` |

#### Parameters

| Name | Type |
| :- | :- |
| `projection` | `Projection` |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & \{ `componentResource`: `Projection`  }

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[resource](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#resource)

***

### partitionLimit

▸ **partitionLimit**(`name`, `limit`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Enforce a maximum number of rows per exact index partition at every commit.
Deployment validates existing rows; authorization may reference this name.

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `string` |
| `limit` | `Readonly`\<\{ `index`: `string` ; `fields`: readonly `string`\[] ; `maximum`: `number`  }> |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[partitionLimit](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#partitionlimit)

***

### access

▸ **access**\<`R`, `B`>(`definition`, `...binding`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable) & \{ `[accessTableBinding]`: \{ `resource`: `R` ; `options`: `B`  }  }

Bind a semantic resource to this table's storage. `defineSchema` infers
its table identity and parent index, validates the field bindings, and
installs the model's read, write and disclosure policies.

#### Type parameters

| Name | Type |
| :- | :- |
| `R` | extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource) |
| `B` | extends [`AccessResourceBinding`](https://docs.bijection.com/api/modules/server#accessresourcebinding)\<`Extract`\<keyof `Row`, `string`>, `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`any`, `P`, `string`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? `P` : `never`, `Row`, `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`any`, `any`, `any`, `D`> ? `D` : `never`, `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`any`, `any`, `N`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? `N` : `never`, `false`> |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`any`, `any`, `"root"`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? `never` : `R` |
| `...binding` | `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`string`, `string`, `string`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? \[options: B & Object & \{ \[K in string \| number \| symbol]?: undefined } & (B extends Object ? Object : unknown) & (B extends Object ? Object : unknown) & (B extends Object ? Object : unknown) & Object] : \[options: B & Object & \{ \[K in string \| number \| symbol]?: undefined } & (B extends Object ? Object : unknown) & (B extends Object ? Object : unknown) & (B extends Object ? Object : unknown)] |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable) & \{ `[accessTableBinding]`: \{ `resource`: `R` ; `options`: `B`  }  }

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[access](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#access)

▸ **access**\<`R`>(`definition`, `options`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable) & \{ `[accessTableBinding]`: \{ `resource`: `R` ; `options`: \{}  }  }

Grant one read permission on an explicit list of source-owned fields.
Unlisted fields stay unreadable, including fields a connector adds later.

#### Type parameters

| Name | Type |
| :- | :- |
| `R` | extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource) |

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | `never` |
| `options` | [`SourceReadAccessBinding`](https://docs.bijection.com/api/modules/server#sourcereadaccessbinding)\<`Exclude`\<`Extract`\<keyof `Row`, `string`>, \`\_\$\{string}\`>, `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`any`, `P`, `string`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? `P` : `never`, `DocumentFieldPaths`\<`Row`>> & `R` extends [`AccessResource`](https://docs.bijection.com/api/interfaces/server.AccessResource)\<`string`, `string`, `string`, [`AccessDefinitionInput`](https://docs.bijection.com/api/modules/server#accessdefinitioninput)> ? \{ `parent`: \{ `field`: `DocumentFieldPaths`\<`Row`> ; `index`: `never`  }  } : \{ `parent?`: `undefined`  } |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable) & \{ `[accessTableBinding]`: \{ `resource`: `R` ; `options`: \{}  }  }

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[access](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#access)

▸ **access**(`definition`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable)

#### Parameters

| Name | Type |
| :- | :- |
| `definition` | [`ResourceAuthority`](https://docs.bijection.com/api/modules/server#resourceauthority) |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & [`ProtectedTable`](https://docs.bijection.com/api/modules/server#protectedtable)

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[access](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#access)

***

### input

▸ **input**(`...limits`): [`TableInput`](https://docs.bijection.com/api/modules/server#tableinput)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>>

The operation arguments of this table's documents, each file field an
upload with its limits:
`args: reports.input({ files: { maxSize: "10 MB", maxFiles: 2 } })`.
Select the fields a caller may set with `.pick(...)` or `.omit(...)`:
`args: invoices.input().omit("archived")`.

#### Parameters

| Name | Type |
| :- | :- |
| `...limits` | keyof [`InputLimits`](https://docs.bijection.com/api/modules/server#inputlimits)\<`Row`> extends `never` ? \[limits?: Record\<string, never>] : \[limits: InputLimits\<Row>] |

#### Returns

[`TableInput`](https://docs.bijection.com/api/modules/server#tableinput)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[input](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#input)

***

### writers

▸ **writers**\<`Path`>(`functions`, `options?`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & \{ `isWriterOwned`: `true`  }

Restrict writes to these internal mutations, named by reference or by
`"module:export"` path. Pass the generated path type to check names as
you write them, without importing the modules that depend on this
schema: `.writers<InternalMutationPath>(["orders:apply"])` with
`import type { InternalMutationPath } from "./_generated/writers.js"`.
Deployment refuses a path that names no internal mutation. An optional
program names the installed component that must actually retain and
call that code; ordinary named calls gain no authority. An empty set
forbids all writes. Resource policies still apply. `fields` restricts a
top-level field to some of these writers, checked natively at commit:
`.writers(["orders:apply", "orders:cancel"], \{ fields: \{ status: ["orders:cancel"] \} \})` lets only `orders:cancel` set or change `status`.

#### Type parameters

| Name | Type |
| :- | :- |
| `Path` | extends `string` = `never` |

#### Parameters

| Name | Type |
| :- | :- |
| `functions` | readonly ([`FunctionReference`](https://docs.bijection.com/api/modules/server#functionreference)\<`"mutation"`, `"public"` \| `"internal"`> \| `Path`)\[] |
| `options?` | `Object` |
| `options.program?` | `string` |
| `options.fields?` | `Record`\<`string`, readonly ([`FunctionReference`](https://docs.bijection.com/api/modules/server#functionreference)\<`"mutation"`, `"public"` \| `"internal"`> \| `Path`)\[]> |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> & \{ `isWriterOwned`: `true`  }

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[writers](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#writers)

***

### resourceRequests

▸ **resourceRequests**(`options`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Declare the native access-request writer. Attach the access model's
read and original-basis write rules; ordinary mutations cannot change
this table. Approval inserts the requested grant and schedules expiry
in the decision's transaction.

#### Parameters

| Name | Type |
| :- | :- |
| `options` | `Parameters`\<typeof `declareResourceRequests`>\[`0`] |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[resourceRequests](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#resourcerequests)

***

### retain

▸ **retain**(`options`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Keep derived data in retained custody. A write into this table is not a
release: the engine retains the writing transaction's source read
obligations for every custody container the row is in, and every later
read of a row in that container must satisfy them under current source
policy.

`by` names the containers: `_id` or a top-level string field that begins
a declared index, or several of them (`_id` first), one container per
named field. `keys: "registered"` declares that the containers are
identities this component creates: a row may only enter a container
whose name is the identity of a row inserted into a registered table
keyed by `_id`, or that a transaction which read nothing wrote first.
Reads confined to one container then carry that container alone, and
an unregistered name reveals nothing. The default, `keys: "derived"`,
allows a key taken from protected data, with one container field, and
decides the absence of a key by every write the table ever received.
Removing or rekeying custody requires a migration.

#### Parameters

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

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[retain](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#retain)

***

### erasable

▸ **erasable**(): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Seal every revision of this table's rows under a key that belongs to
that one record, so `ctx.db.erase(id)` reaches every retained copy of its
content: history, write-ahead logs, database backups and its search
index objects. Indexes may cover only top-level `v.id` fields, because
index keys are stored outside the sealed row. Search indexes are allowed:
erasing records rebuilds them without those records and destroys the
key of the index they replace. Vector indexes, maintained aggregates and
retained custody are refused. Declared transitions are sealed with the
row and erased with it; a process history is refused. A table becomes or
stops being erasable only while it is empty.

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[erasable](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#erasable)

***

### transitions

▸ **transitions**\<`Field`>(`field`, `options?`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Record every change of a required top-level string field in the
native `_transitions` history, for every writer: ordinary mutations,
operations, administrative writes and source publication. Each commit
that changes the field records one transition from the committed value
to the final one, even if the transaction changed it several times,
with the commit timestamp, the committing identity or retained program,
and how long the row had been in the state it left.

An optional state graph classifies each change: `initial` states for
inserts, `edges` from each state and `terminal` states no change may
leave. A change the graph does not declare refuses the whole
transaction (`TransitionRefused`) under the default
`undeclared: "refuse"`, or is kept and recorded with `declared: false`
under `undeclared: "record"`, which a source-owned table requires.
Without a graph every present-state change is recorded and none refused; ordinary deletion requires a removable stage. A changed
graph applies to later commits only; each record names the revision it
was checked against.

Read the history with `ctx.db.transitions(table, id, field)`, under the
reader's current access to the row. Records are kept for `retain.days`
(default 730). Rows written before the declaration begin their history
with an `observed` entry whose time is unknown. Views and published
relations cannot declare transitions. On an erasable table each record
is sealed under its own key and erased with its row (at most 1024 per
row), and no process history may be named.

#### Type parameters

| Name | Type |
| :- | :- |
| `Field` | extends [`TransitionFields`](https://docs.bijection.com/api/modules/server#transitionfields)\<`DocumentType`> |

#### Parameters

| Name | Type |
| :- | :- |
| `field` | `Field` |
| `options?` | [`TransitionOptions`](https://docs.bijection.com/api/modules/server#transitionoptions)\<`Extract`\<`Row`\[`Field`], `string`>> |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[transitions](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#transitions)

***

### aggregate

▸ **aggregate**(`name`, `options`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Maintain exact totals of this table per value of one to four top-level
dimensions: a row count and, for each `sum` field (a required
`v.int64()`), an exact sum. A measure may also be a grouping dimension
when totals need equality filters on that measure. The engine updates them in the same commit as
every write to the table and rebuilds them from the rows when the
declaration first appears or its shape changes, so application summaries
grouped by these dimensions -- over the whole table, or restricted by
equality on declared dimensions -- are exact at any size instead of
bounded by one read. A view that only scans this table is answered from
them too, including one with its own `.access()` rule, which is then
asked the same question as this table's.

Calendar totals. `time: { field: "at", unit: "day" }` stores a UTC
bucket instead of each raw instant for that grouping field. Units are
second, minute, hour, day, Monday-based week and calendar month. Compatible
finer buckets answer coarser summaries, including quarter and year, only
when the requested bucket contains complete stored buckets. Closed-open
time ranges must align with the stored
unit; put the time dimension immediately after any equality-pinned
dimensions. Partial boundaries use the bounded ordinary read. Calendar
totals do not provide indexed min/max. Values are milliseconds or exact
UTC strings like `2026-03-02T12:34:56.789Z`; null and missing stay distinct.

Costs. A write adds its change to each group it touches as a new record
and reads none, so concurrent writers of one group do not conflict; the
engine folds a group's records into one shortly after. While the totals
are being built from existing rows, a writer conflicts only with the
build step counting its row and once with the step that completes the
build, and summaries use the bounded read until the build completes. One
answer reads at most 256 matching non-empty groups and 4,096 unfolded
records (`compacting` past that, until the engine catches up); a view's
grouped lookup reads at most 64 before it evaluates the group from its
rows, within the view's limits. An equality filter
on a later dimension is reached by stepping over the distinct values of
the unfiltered dimensions before it, at most 256 of them, so put the
dimensions a scope filters on first. Once folded, records are one per
distinct key, the product of the dimensions' cardinalities at most. A sum
past the int64 range refuses the summaries that serve it (`overflow`)
until the rows fit again; writes are never refused.

Extremes. A group's smallest and largest `sum` value are not stored:
they are read from an ordinary index whose fields are the grouped and
filtered dimensions, in any order, then that field, e.g.
`.index("by_status_amount", ["status", "amount"])` for a summary of
`amount` by `status`. Two single-row reads per group keep them exact
under inserts, updates and deletes; without such an index a summary's
`min`/`max` are null and it names the index that would serve them.

Visibility. A total covers every row. On a table with `.access()` it is
served only with `visibility: "collectionReaders"`, and the rule is then
asked about the whole table (or the rows an equality filter pins) with
the aggregated properties and `target.covers: true`: no row it counts is
presented on its own. Protected maintained totals require the native
access model, which enforces authority over every counted row. A custom
read rule uses bounded row evaluation; declaring collectionReaders does
not authorize its maintained totals. A group of a single row is served
like any other: under a read rule the
answer is fenced at release by the group terms it read, so deleting a
counted row restarts it.

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `name` | `string` | - |
| `options` | `Object` | - |
| `options.by` | `string`\[] | - |
| `options.sum?` | `string`\[] | - |
| `options.decimal?` | `Record`\<`string`, `number`> | Required decimal string fields and their exact fixed scales (0–38). |
| `options.time?` | `Object` | - |
| `options.time.field` | `string` | - |
| `options.time.unit` | `"second"` \| `"minute"` \| `"hour"` \| `"day"` \| `"week"` \| `"month"` | - |
| `options.visibility?` | `"collectionReaders"` | - |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[aggregate](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#aggregate)

***

### link

▸ **link**\<`Fields`, `Names`>(`this`, `endpoints`, `names?`, `options?`): [`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`LinkRelations`](https://docs.bijection.com/api/modules/server#linkrelations)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Fields`, `Names`, `undefined`>>

Declare a binary association on required typed ID fields.
Each bound counts live associations incident on an endpoint. A nonzero
minimum applies to every live row in that endpoint's declared table.
Endpoints are immutable; ending and restoring a pair preserves its retained
identity. Native identity and commit enforcement are required for admission.
One endpoint may name `_storage` when its minimum is zero and the relationship
declares read access and a governing rule. Such attachments require sealed
content and preserve the file's existing source restrictions.

Each endpoint is a required reference of the link table, with the same
navigation defaults as [reference](https://docs.bijection.com/api/classes/server.TableDefinition.md#reference): `as` reaches the
endpoint from a link row, `inverse` (default: this table's name) lists an
endpoint's incident link rows, and `opposite`, when named, lists the
endpoints linked to it. A link between two rows of one table needs
explicit names for both roles. With `symmetric: true`, both roles name
one typed population, with equal incident bounds and shared `inverse` and
`opposite` names. Insertion canonicalizes the pair; reversing a pair does
not create a second association. Self-pairs are allowed and count once.

#### Type parameters

| Name | Type |
| :- | :- |
| `Fields` | extends [`LinkEndpointFields`](https://docs.bijection.com/api/modules/server#linkendpointfields)\<`DocumentType`> |
| `Names` | extends `Partial`\<`Record`\<`Fields`, [`LinkEndpointNames`](https://docs.bijection.com/api/modules/server#linkendpointnames)>> = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `endpoints` | `Record`\<`Fields`, [`Cardinality`](https://docs.bijection.com/api/modules/server#cardinality)> |
| `names?` | `Names` |
| `options?` | `undefined` |

#### Returns

[`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`LinkRelations`](https://docs.bijection.com/api/modules/server#linkrelations)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Fields`, `Names`, `undefined`>>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[link](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#link)

▸ **link**\<`Fields`, `Names`, `Options`>(`this`, `endpoints`, `names`, `options`): [`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`LinkRelations`](https://docs.bijection.com/api/modules/server#linkrelations)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Fields`, `Names`, `Options`>>

#### Type parameters

| Name | Type |
| :- | :- |
| `Fields` | extends [`LinkEndpointFields`](https://docs.bijection.com/api/modules/server#linkendpointfields)\<`DocumentType`> |
| `Names` | extends `Partial`\<`Record`\<`Fields`, [`LinkEndpointNames`](https://docs.bijection.com/api/modules/server#linkendpointnames)>> = \{} |
| `Options` | extends \{ `symmetric`: `true`  } \| `undefined` = `undefined` |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `endpoints` | `Record`\<`Fields`, [`Cardinality`](https://docs.bijection.com/api/modules/server#cardinality)> |
| `names` | `undefined` \| `Names` |
| `options` | `Options` |

#### Returns

[`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`LinkRelations`](https://docs.bijection.com/api/modules/server#linkrelations)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Fields`, `Names`, `Options`>>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[link](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#link)

***

### reference

▸ **reference**\<`Field`, `Options`>(`this`, `field`, `options?`): [`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`ReferenceRelation`](https://docs.bijection.com/api/modules/server#referencerelation)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Field`, `Options`>>

Declare a typed ID, interface reference, or distinct-target array at an object field path.
Concrete object parents may be optional; parent arrays and unions do not expand.
Array members must be distinct typed identities. Every member is validated
at commit; empty and absent optional arrays name no targets. Inverse bounds
count holder rows once per target, through a complete-or-refuse table scan
under the shared relationship work and byte limits. Array navigation orders
by typed identity and supports exact-basis pages, without property ordering
or seek windows. No multi-entry index or retained query support is implied.

The deployment keeps it true at every commit, for every writer: the
field names a live row of its table, deleting a row still referenced is
refused, and the rows naming one target stay within `inverse.count`
(default `[0, "many"]`; `[0, 1]` makes it one-to-one, a positive minimum
requires every target row to be referenced). The field may be optional;
changing it moves the reference, checking both targets.

It also names navigation for `ctx.db.related` and the application: `as`
(default: the field without its `_id` or `Id` suffix) reaches the
target, and `inverse.as` (default: this table's name) lists the rows
naming a target. Names are unique among a table's fields and navigations; a
collision is refused, never resolved by order. An undeclared `v.id`
keeps its plain meaning.

#### Type parameters

| Name | Type |
| :- | :- |
| `Field` | extends `never` |
| `Options` | extends [`ReferenceOptions`](https://docs.bijection.com/api/modules/server#referenceoptions) = \{} |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> |
| `field` | `Field` |
| `options?` | `Options` |

#### Returns

[`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, [`ReferenceRelation`](https://docs.bijection.com/api/modules/server#referencerelation)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, `Field`, `Options`>>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[reference](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#reference)

***

### unchecked

▸ **unchecked**\<`Field`>(`this`, `field`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Keep a top-level typed ID field as a plain ID, deliberately.

A plain `v.id` gains no integrity: it may name a deleted row, any number
of rows may name one target, and it has no navigation. Deploy reports
list every top-level ID of a table in the same schema that is neither a
`.reference(...)`, a link endpoint nor marked here, so marking a field
records the choice and changes nothing else.

#### Type parameters

| Name | Type |
| :- | :- |
| `Field` | extends `never` |

#### Parameters

| Name | Type |
| :- | :- |
| `this` | [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`> |
| `field` | `Field` |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[unchecked](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#unchecked)

***

### require

▸ **require**(`this`, `requirement`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

Strengthen the evidence required for every read of this source table.
Requirements compose with its existing floor; a later declaration cannot
weaken population, consistency or freshness requirements. Native admission
and reads check that the source can establish the requested evidence.

#### Parameters

| Name | Type |
| :- | :- |
| `this` | `never` |
| `requirement` | [`SourceReadRequirement`](https://docs.bijection.com/api/modules/server#sourcereadrequirement) |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[require](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#require)

***

### indexes

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

This API is experimental: it may change or disappear.

Returns indexes defined on this table.
Intended for the advanced use cases of dynamically deciding which index to use for a query.

#### Returns

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

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).\[ indexes]\(server.VirtualTableDefinition.md# indexes)

***

### self

▸ `Protected` **self**(): [`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, \{}>

Work around for [https://github.com/microsoft/TypeScript/issues/57035](https://github.com/microsoft/TypeScript/issues/57035)

#### Returns

[`TableDefinition`](https://docs.bijection.com/api/classes/server.TableDefinition)\<[`Validator`](https://docs.bijection.com/api/modules/values#validator)\<`Row`, `"required"`, `any`>, \{}, \{}, \{}, `false`, \{}>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[self](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#self)

***

### virtualTableBinding

▸ **virtualTableBinding**(): `Object`

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `temporal` | \{ `key`: `Key` ; `observationId`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `string`> ; `time`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> ; `correctionOrder`: [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> ; `measures`: `M` ; `profile`: `string` = "independent\_int64\_observations\_v1" } |
| `temporal.key` | `Key` |
| `temporal.observationId` | [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `string`> |
| `temporal.time` | [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> |
| `temporal.correctionOrder` | [`FieldsOfType`](https://docs.bijection.com/api/modules/server#fieldsoftype)\<`Row`, `bigint`> |
| `temporal.measures` | `M` |
| `temporal.profile` | `string` |
| `key?` | `string`\[] |
| `references?` | `Record`\<`string`, \{ `fields`: `string`\[] ; `to`: `string`  }> |

#### Overrides

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[virtualTableBinding](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#virtualtablebinding)

***

### measure

▸ **measure**\<`Name`>(`name`): [`SeriesRelation`](https://docs.bijection.com/api/classes/server.SeriesRelation)\<[`SeriesRelationType`](https://docs.bijection.com/api/modules/server#seriesrelationtype)\<[`Derive`](https://docs.bijection.com/api/modules/apps#derive)\<[`Joined`](https://docs.bijection.com/api/modules/apps#joined)\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `Omit`\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `"origins"`> & \{ `origins`: \{ `observation`: `never`  }  }, \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  } & \{ `observation`: \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }  }, `never`, `never`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `string`, `never`, `"group"`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `never`>, [`KeyValue`](https://docs.bijection.com/api/modules/server#keyvalue)\<`Row`, `Key`>>

Build a resolved sample relation over all keys, for population reductions.

#### Type parameters

| Name | Type |
| :- | :- |
| `Name` | extends keyof `M` & `string` |

#### Parameters

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

#### Returns

[`SeriesRelation`](https://docs.bijection.com/api/classes/server.SeriesRelation)\<[`SeriesRelationType`](https://docs.bijection.com/api/modules/server#seriesrelationtype)\<[`Derive`](https://docs.bijection.com/api/modules/apps#derive)\<[`Joined`](https://docs.bijection.com/api/modules/apps#joined)\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `Omit`\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `"origins"`> & \{ `origins`: \{ `observation`: `never`  }  }, \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  } & \{ `observation`: \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }  }, `never`, `never`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `string`, `never`, `"group"`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `never`>, [`KeyValue`](https://docs.bijection.com/api/modules/server#keyvalue)\<`Row`, `Key`>>

***

### for

▸ **for**(`key`): `Readonly`\<\{ `measure`: \<Name>(`name`: `Name`) => [`SeriesRelation`](https://docs.bijection.com/api/classes/server.SeriesRelation)\<[`SeriesRelationType`](https://docs.bijection.com/api/modules/server#seriesrelationtype)\<[`Derive`](https://docs.bijection.com/api/modules/apps#derive)\<[`Joined`](https://docs.bijection.com/api/modules/apps#joined)\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `Omit`\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `"origins"`> & \{ `origins`: \{ `observation`: `never`  }  }, \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  } & \{ `observation`: \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }  }, `never`, `never`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `string`, `never`, `"group"`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `never`>, [`KeyValue`](https://docs.bijection.com/api/modules/server#keyvalue)\<`Row`, `Key`>>  }>

Select one typed key without changing the source's identity or lifetime.

#### Parameters

| Name | Type |
| :- | :- |
| `key` | [`KeyValue`](https://docs.bijection.com/api/modules/server#keyvalue)\<`Row`, `Key`> |

#### Returns

`Readonly`\<\{ `measure`: \<Name>(`name`: `Name`) => [`SeriesRelation`](https://docs.bijection.com/api/classes/server.SeriesRelation)\<[`SeriesRelationType`](https://docs.bijection.com/api/modules/server#seriesrelationtype)\<[`Derive`](https://docs.bijection.com/api/modules/apps#derive)\<[`Joined`](https://docs.bijection.com/api/modules/apps#joined)\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `Omit`\<[`Rel`](https://docs.bijection.com/api/modules/apps#rel)\<\{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }, `"group"`, `string`, `string`, `string`, `never`, `false`>, `"origins"`> & \{ `origins`: \{ `observation`: `never`  }  }, \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_order`: `any`  } & \{ `observation`: \{ `__observation_id?`: `any` = row.\_\_observation\_id; `__observation_time?`: `any` = row.\_\_observation\_time; `__observation_order?`: `any` = row.\_\_observation\_order; `copies`: `bigint`  }  }, `never`, `never`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `string`, `never`, `"group"`>, \{ `time?`: `any` = row\.observation.\_\_observation\_time; `order?`: `any` = row\.observation.\_\_observation\_order; `value?`: `any`  }, `never`>, [`KeyValue`](https://docs.bijection.com/api/modules/server#keyvalue)\<`Row`, `Key`>>  }>

***

### index

▸ **index**(`_name`, `..._configuration`): `never`

Remote rows have no local storage on which to build an index.

#### Parameters

| Name | Type |
| :- | :- |
| `_name` | `never` |
| `..._configuration` | `never`\[] |

#### Returns

`never`

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[index](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#index)

***

### searchIndex

▸ **searchIndex**(`_name`, `..._configuration`): `never`

Define a search index on this table.

To learn about search indexes, see [Search](https://docs.bijection.com/search/text-search.md).

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `_name` | `never` | The name of the index. |
| `..._configuration` | `never`\[] | The search index configuration object. |

#### Returns

`never`

A [TableDefinition](https://docs.bijection.com/api/classes/server.TableDefinition.md) with this search index included.

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[searchIndex](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#searchindex)

***

### vectorIndex

▸ **vectorIndex**(`_name`, `..._configuration`): `never`

Define a vector index on this table.

To learn about vector indexes, see [Vector Search](https://docs.bijection.com/search/vector-search.md).

#### Parameters

| Name | Type | Description |
| :- | :- | :- |
| `_name` | `never` | The name of the index. |
| `..._configuration` | `never`\[] | The vector index configuration object. |

#### Returns

`never`

A [TableDefinition](https://docs.bijection.com/api/classes/server.TableDefinition.md) with this vector index included.

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[vectorIndex](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#vectorindex)

***

### spatialIndex

▸ **spatialIndex**(`_name`, `..._configuration`): `never`

Index geometry without adding a field to its documents. Each index
generation derives its own private keys; changing the declaration uses
ordinary backfill and activation, without rewriting documents.

#### Parameters

| Name | Type |
| :- | :- |
| `_name` | `never` |
| `..._configuration` | `never`\[] |

#### Returns

`never`

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[spatialIndex](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#spatialindex)

***

### staged

▸ **staged**(`_schema`): `never`

The provider's boundary schema is not a staged local document schema.

#### Parameters

| Name | Type |
| :- | :- |
| `_schema` | `never` |

#### Returns

`never`

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[staged](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#staged)

***

### export

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

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `fileFields` | (`null` \| `string`)\[]\[] |
| `callFields` | `undefined` \| `Record`\<`string`, \{ `integration`: \{ `module`: `string` ; `export`: `string`  } ; `command`: `string`  }> |
| `discovery?` | `string` |
| `indexes` | \{ `indexDescriptor`: `string` ; `fields`: `string`\[]  }\[] |
| `stagedDbIndexes` | `Index`\[] |
| `searchIndexes` | `SearchIndex`\[] |
| `stagedSearchIndexes` | `SearchIndex`\[] |
| `vectorIndexes` | `VectorIndex`\[] |
| `stagedVectorIndexes` | `VectorIndex`\[] |
| `documentType` | [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) |
| `stagedDocumentType` | `undefined` \| [`ValidatorJSON`](https://docs.bijection.com/api/modules/values#validatorjson) |
| `access?` | `SerializedReadAccess` |
| `governingRule?` | `SerializedGoverningRule` |
| `source?` | [`SourceBinding`](https://docs.bijection.com/api/modules/connectors#sourcebinding) |
| `sourceRequirement?` | [`SourceRequirements`](https://docs.bijection.com/api/modules/server#sourcerequirements) |
| `link?` | [`LinkDefinition`](https://docs.bijection.com/api/modules/server#linkdefinition) |
| `references?` | `Record`\<`string`, [`SerializedReference`](https://docs.bijection.com/api/modules/server#serializedreference)> |
| `unchecked?` | `string`\[] |
| `retain?` | `SerializedRetainedCustody` |
| `resourceRequests?` | `SerializedResourceRequests` |
| `writers?` | \{ `functions`: `string`\[] ; `program?`: `string`  } |
| `writers.functions` | `string`\[] |
| `writers.program?` | `string` |
| `partitionLimits?` | `Record`\<`string`, `Readonly`\<\{ `index`: `string` ; `fields`: readonly `string`\[] ; `maximum`: `number`  }>> |
| `aggregates?` | `Record`\<`string`, `SerializedAggregate`> |
| `erasable?` | `true` |
| `owner?` | `SerializedTableOwner` |
| `transitions?` | `Record`\<`string`, `SerializedTransitions`> |
| `virtualTable` | \{ `key?`: `string`\[] ; `references?`: `Record`\<`string`, \{ `fields`: `string`\[] ; `to`: `string`  }>  } |
| `virtualTable.key?` | `string`\[] |
| `virtualTable.references?` | `Record`\<`string`, \{ `fields`: `string`\[] ; `to`: `string`  }> |

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[export](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#export)

***

### key

▸ **key**(`...fields`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Parameters

| Name | Type |
| :- | :- |
| `...fields` | keyof `Row` & `string`\[] |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[key](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#key)

***

### navigation

▸ **navigation**(`name`, `reference`): [`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `string` |
| `reference` | [`VirtualNavigation`](https://docs.bijection.com/api/modules/server#virtualnavigation)\<keyof `Row` & `string`> |

#### Returns

[`VirtualSeriesDefinition`](https://docs.bijection.com/api/classes/server.VirtualSeriesDefinition)\<`Row`, `Key`, `M`>

#### Inherited from

[VirtualTableDefinition](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md).[navigation](https://docs.bijection.com/api/classes/server.VirtualTableDefinition.md#navigation)


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