orientx
Version:
An OrientDB development tools
80 lines (60 loc) • 1.96 kB
JavaScript
const pMap = require('p-map');
const plur = require('plur');
const pascalCase = require('pascal-case');
const {
Alert,
colors,
} = require('../utils');
module.exports = exports = async (db, schema, title, filename) => {
if (!schema) {
return;
}
// Get database info
const dbClassList = await getDbClassList(db, schema);
const dbClassNames = dbClassList.reduce((acc, i) => {
acc[i.name] = true;
return acc;
}, {});
// Create classes
await pMap(Object.keys(schema), async classKey => {
const classSchema = schema[classKey];
const className = classSchema.name || classKey;
if (dbClassNames[className]) {
Alert.warn(colors.warn.bold(`[${pascalCase(plur(title, 1))}Ignored] `) + colors.warn(`"${db.name}/CLASS:${className}" already exists`) + colors.hint(`\n at ${filename}`));
return undefined;
}
return db.class.create(
className,
null, // Set superClass later
classSchema.cluster,
classSchema.abstract
);
}, { concurrency: 4 });
Alert.success(`Creating "${db.name}" ${plur(title, 10)}${colors.hint(`\n at ${filename}`)}`);
};
const getDbClassList = exports.getDbClassList = async (db, classSchema, refresh = false) => {
const classList = await db.class.list(refresh);
if (classSchema) {
return classList.filter(i => !!classSchema[i.name]);
}
return classList;
};
exports.superClass = async (db, schema, title, filename) => {
if (!schema) {
return;
}
const result = await pMap(Object.keys(schema), async classKey => {
const classSchema = schema[classKey];
if (!classSchema.superClass) {
return undefined;
}
const className = classSchema.name || classKey;
return db.class.update({
name: className,
superClass: classSchema.superClass,
});
});
if (result.length && result[0]) {
Alert.success(`Setting "${db.name}" ${plur(title, 10)}${colors.hint(`\n at ${filename}`)}`);
}
};