stackpress
Version:
Incept is a content management framework.
38 lines (37 loc) • 1.38 kB
JavaScript
import Revisions from '../client/Revisions.js';
import { sequence } from '../sql/helpers.js';
export default async function install(server, database, cli) {
const config = server.config('client') || {};
const client = server.plugin('client') || {};
const models = Object.values(client.model);
const queries = [];
const order = sequence(models.map(model => model.config));
for (const model of order) {
queries.push(database.dialect.drop(model.snake));
}
for (const model of order.reverse()) {
const exists = models.find(map => map.config.name === model.name);
if (exists) {
const create = exists.schema;
create.engine = database;
queries.push(...create.query());
}
}
if (config.revisions) {
const revisions = new Revisions(config.revisions, server.loader);
if (revisions.size() === 0) {
revisions.insert(client.config);
}
}
if (queries.length) {
cli?.verbose && cli.control.system('Installing...');
await database.transaction(async (connection) => {
for (const query of queries) {
cli?.verbose && cli.control.info(query.query);
await connection.query(query);
}
});
cli?.verbose && cli.control.success('Installation Complete.');
}
}
;