Skip to main content

EntityOptions

EntityOptions

Options relating to the internal handling of entities.

Signature
interface EntityOptions {
entityIdStrategy?: EntityIdStrategy<any>;
entityDuplicators?: Array<EntityDuplicator<any>>;
moneyStrategy?: MoneyStrategy;
channelCacheTtl?: number;
zoneCacheTtl?: number;
taxRateCacheTtl?: number;
metadataModifiers?: EntityMetadataModifier[];
}

entityIdStrategy

property
v1.3.0
default:
<a href='/reference/typescript-api/configuration/entity-id-strategy#autoincrementidstrategy'>AutoIncrementIdStrategy</a>

Defines the strategy used for both storing the primary keys of entities in the database, and the encoding & decoding of those ids when exposing entities via the API. The default uses a simple auto-increment integer strategy.

caution

Note: changing from an integer-based strategy to a uuid-based strategy on an existing Vendure database will lead to problems with broken foreign-key references. To change primary key types like this, you'll need to start with a fresh database.

entityDuplicators

property
v2.2.0
Array<EntityDuplicator<any>>
default:
defaultEntityDuplicators

An array of EntityDuplicator instances which are used to duplicate entities when using the duplicateEntity mutation.

moneyStrategy

property
v2.0.0
default:
<a href='/reference/typescript-api/money/default-money-strategy#defaultmoneystrategy'>DefaultMoneyStrategy</a>

Defines the strategy used to store and round monetary values.

channelCacheTtl

property
v1.3.0
number
default:
30000

Channels get cached in-memory as they are accessed very frequently. This setting determines how long the cache lives (in ms) until it is considered stale and refreshed. For multi-instance deployments (e.g. serverless, load-balanced), a smaller value here will prevent data inconsistencies between instances.

zoneCacheTtl

property
v1.3.0
number
default:
30000

Zones get cached in-memory as they are accessed very frequently. This setting determines how long the cache lives (in ms) until it is considered stale and refreshed. For multi-instance deployments (e.g. serverless, load-balanced), a smaller value here will prevent data inconsistencies between instances.

taxRateCacheTtl

property
v1.9.0
number
default:
30000

TaxRates get cached in-memory as they are accessed very frequently. This setting determines how long the cache lives (in ms) until it is considered stale and refreshed. For multi-instance deployments (e.g. serverless, load-balanced), a smaller value here will prevent data inconsistencies between instances.

metadataModifiers

property
v1.6.0
default:
[]

Allows the metadata of the built-in TypeORM entities to be manipulated. This allows you to do things like altering data types, adding indices etc. This is an advanced feature which should be used with some caution as it will result in DB schema changes. For examples see EntityMetadataModifier.

EntityMetadataModifier

A function which allows TypeORM entity metadata to be manipulated prior to the DB schema being generated during bootstrap.

caution

Certain DB schema modifications will result in auto-generated migrations which will lead to data loss. For instance, changing the data type of a column will drop the column & data and then re-create it. To avoid loss of important data, always check and modify your migration scripts as needed.

Example

import { Index } from 'typeorm';
import { EntityMetadataModifier, ProductVariant } from '@vendure/core';

// Adds a unique index to the ProductVariant.sku column
export const addSkuUniqueIndex: EntityMetadataModifier = metadata => {
const instance = new ProductVariant();
Index({ unique: true })(instance, 'sku');
};

Example

import { Column } from 'typeorm';
import { EntityMetadataModifier, ProductTranslation } from '@vendure/core';

// Use the "mediumtext" datatype for the Product's description rather than
// the default "text" type.
export const makeProductDescriptionMediumText: EntityMetadataModifier = metadata => {
const descriptionColumnIndex = metadata.columns.findIndex(
col => col.propertyName === 'description' && col.target === ProductTranslation,
);
if (-1 < descriptionColumnIndex) {
// First we need to remove the existing column definition
// from the metadata.
metadata.columns.splice(descriptionColumnIndex, 1);
// Then we add a new column definition with our custom
// data type "mediumtext"
// DANGER: this particular modification will generate a DB migration
// which will result in data loss of existing descriptions. Make sure
// to manually check & modify your migration scripts.
const instance = new ProductTranslation();
Column({ type: 'mediumtext' })(instance, 'description');
}
};
Signature
type EntityMetadataModifier = (metadata: MetadataArgsStorage) => void | Promise<void>