(
variant: Variant,
originalSchema: Schema<Version, Tables>,
override: {
tables: $Tables;
relations?: RM;
}
)
| 862 | * 4. when replacing tables, its original relations will be removed. |
| 863 | */ |
| 864 | export function variantSchema< |
| 865 | Variant extends string, |
| 866 | Version extends string, |
| 867 | Tables extends Record<string, AnyTable>, |
| 868 | $Tables extends Record<string, AnyTable>, |
| 869 | RM extends RelationsMap<OverrideTables<Tables, $Tables>>, |
| 870 | >( |
| 871 | variant: Variant, |
| 872 | originalSchema: Schema<Version, Tables>, |
| 873 | override: { |
| 874 | tables: $Tables; |
| 875 | relations?: RM; |
| 876 | } |
| 877 | ): Schema< |
| 878 | `${Version}-${Variant}`, |
| 879 | CreateSchemaTables<OverrideTables<Tables, $Tables>, RM> |
| 880 | > { |
| 881 | const cloned = originalSchema.clone(); |
| 882 | const tables = cloned.tables as Record<string, AnyTable>; |
| 883 | |
| 884 | for (const [k, v] of Object.entries(override.tables)) { |
| 885 | if (v == null) continue; |
| 886 | tables[k] = v; |
| 887 | } |
| 888 | |
| 889 | if (override.relations) |
| 890 | setRelations(tables as OverrideTables<Tables, $Tables>, override.relations); |
| 891 | |
| 892 | // TODO: support custom `up` and `down` for variant schema |
| 893 | // TODO: support disabling relations |
| 894 | return schema({ |
| 895 | version: `${originalSchema.version}-${variant}`, |
| 896 | tables: tables as OverrideTables<Tables, $Tables>, |
| 897 | relations: override.relations, |
| 898 | }); |
| 899 | } |
| 900 | |
| 901 | function nameVariants( |
| 902 | rawName: string, |
no test coverage detected