33 lines
1.5 KiB
JavaScript
33 lines
1.5 KiB
JavaScript
import _ from "lodash";
|
|
import { DefaultFields, QueueFields, QueueIndexes, } from "../types";
|
|
const queueFieldNames = new Set(QueueFields.map((f) => f.fieldName));
|
|
const queueIndexNames = new Set(QueueIndexes.map((i) => i.indexName));
|
|
export default function ({ dbSchema }) {
|
|
const finaldbSchema = _.cloneDeep(dbSchema);
|
|
finaldbSchema.tables = finaldbSchema.tables.map((t) => {
|
|
const newTable = _.cloneDeep(t);
|
|
newTable.fields = newTable.fields.filter((f) => !f.fieldName?.match(/^(id|created_at|updated_at)$/));
|
|
newTable.fields.unshift(...DefaultFields);
|
|
if (newTable.queue_table) {
|
|
const reserved = [
|
|
...newTable.fields
|
|
.map((f) => f.fieldName)
|
|
.filter((name) => queueFieldNames.has(name)),
|
|
...(newTable.indexes || [])
|
|
.map((i) => i.indexName)
|
|
.filter((name) => queueIndexNames.has(name)),
|
|
];
|
|
if (reserved.length > 0) {
|
|
throw new Error(`\`${newTable.tableName}\` is a queue table: ${reserved.join(", ")} ${reserved.length > 1 ? "are" : "is"} managed by bun-mariadb and can't be declared in the schema`);
|
|
}
|
|
newTable.fields.push(..._.cloneDeep(QueueFields));
|
|
newTable.indexes = [
|
|
...(newTable.indexes || []),
|
|
..._.cloneDeep(QueueIndexes),
|
|
];
|
|
}
|
|
return newTable;
|
|
});
|
|
return finaldbSchema;
|
|
}
|