( options: CreateTableOptions<name, columns, primaryKey>, )
| 716 | * ``` |
| 717 | */ |
| 718 | export function table< |
| 719 | name extends string, |
| 720 | columns extends TableColumnsDefinition, |
| 721 | primaryKey extends |
| 722 | | ColumnNameFromColumns<columns> |
| 723 | | readonly ColumnNameFromColumns<columns>[] |
| 724 | | undefined = undefined, |
| 725 | >( |
| 726 | options: CreateTableOptions<name, columns, primaryKey>, |
| 727 | ): Table<name, columns, NormalizePrimaryKey<columns, primaryKey>> { |
| 728 | let tableName = options.name |
| 729 | let columns = options.columns |
| 730 | |
| 731 | let resolvedPrimaryKey = normalizePrimaryKey(tableName, columns, options.primaryKey) |
| 732 | let timestampConfig = normalizeTimestampConfig(options.timestamps) |
| 733 | let columnDefinitions = resolveTableColumns(tableName, columns) |
| 734 | let table = Object.create(null) as Table<name, columns, NormalizePrimaryKey<columns, primaryKey>> |
| 735 | |
| 736 | Object.defineProperty(table, tableMetadataKey, { |
| 737 | value: Object.freeze({ |
| 738 | name: tableName, |
| 739 | columns, |
| 740 | primaryKey: resolvedPrimaryKey, |
| 741 | timestamps: timestampConfig, |
| 742 | columnDefinitions, |
| 743 | beforeWrite: options.beforeWrite as |
| 744 | | TableBeforeWrite<TableRowFromColumns<columns>> |
| 745 | | undefined, |
| 746 | afterWrite: options.afterWrite as TableAfterWrite<TableRowFromColumns<columns>> | undefined, |
| 747 | beforeDelete: options.beforeDelete as TableBeforeDelete | undefined, |
| 748 | afterDelete: options.afterDelete as TableAfterDelete | undefined, |
| 749 | afterRead: options.afterRead as TableAfterRead<TableRowFromColumns<columns>> | undefined, |
| 750 | validate: options.validate as TableValidate<TableRowFromColumns<columns>> | undefined, |
| 751 | }), |
| 752 | enumerable: false, |
| 753 | writable: false, |
| 754 | configurable: false, |
| 755 | }) |
| 756 | |
| 757 | for (let columnName in columns) { |
| 758 | if (!Object.prototype.hasOwnProperty.call(columns, columnName)) { |
| 759 | continue |
| 760 | } |
| 761 | |
| 762 | let column = createColumnReference(tableName, columnName) |
| 763 | |
| 764 | Object.defineProperty(table, columnName, { |
| 765 | value: column, |
| 766 | enumerable: true, |
| 767 | writable: false, |
| 768 | configurable: false, |
| 769 | }) |
| 770 | } |
| 771 | |
| 772 | return Object.freeze(table) as Table<name, columns, NormalizePrimaryKey<columns, primaryKey>> |
| 773 | } |
| 774 | |
| 775 | function createColumnReference<tableName extends string, columnName extends string>( |
no test coverage detected
searching dependent graphs…