@vendure/core
Version:
A modern, headless ecommerce framework
56 lines (55 loc) • 2.3 kB
TypeScript
import { MetadataArgsStorage } from 'typeorm/metadata-args/MetadataArgsStorage';
/**
* @description
* 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
* ```ts
* 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
* ```ts
* 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');
* }
* };
* ```
*
* @docsCategory configuration
* @docsPage EntityOptions
* @since 1.6.0
*/
export type EntityMetadataModifier = (metadata: MetadataArgsStorage) => void | Promise<void>;