UNPKG

mikro-orm-interactive-generator

Version:

MikroORM + knexJS interactive migration generator

150 lines (128 loc) 4.72 kB
import {FieldFactor} from "../builder/migration/factor/field.factor"; import * as inquirer from "inquirer"; import {DBEngineTypes} from "../type/db-engine.type"; export class CreateMigrationDefinitionQuestionFlow { async execute(types: DBEngineTypes) : Promise<{tableName: string, fields: FieldFactor[]}> { const fields : FieldFactor[] = [] const tableName = await inquirer.prompt([{ message: 'Table name', type: 'input', name: 'table_name' }]) while (true) { let autoincrement = null const fieldType = await inquirer.prompt([{ message: 'Field type', type: 'autocomplete', name: 'field_type', source: (answers : any, input : string) => { if(!input || input === '') { return types.types } const suggestedTypes = types.types.filter(type => { return type.startsWith(input) }) return [input, ...suggestedTypes] } }]) if(fieldType['field_type'].includes(types.autoincrementKey)) { autoincrement = await inquirer.prompt([{ message: 'Is autoincrement?', type: 'list', name: 'is_autoincrement', choices: [{ name: 'yes', value: true, key: 'Yes' },{ name: 'no', value: false, key: 'No' }] }]) } const fieldName = await inquirer.prompt([{ message: 'Field name', type: 'input', name: 'field_name' }]) const defaultFieldValue = await inquirer.prompt([{ message: 'Default value for field', type: 'input', name: 'field_default_value' }]) const isUnique = await inquirer.prompt([{ message: 'Is unique?', type: 'list', name: 'is_unique', choices: [{ name: 'yes', value: true, key: 'Yes' },{ name: 'no', value: false, key: 'No' }] }]) const isNotNullable = await inquirer.prompt([{ message: 'Is nullable?', type: 'list', name: 'is_nullable', choices: [{ name: 'yes', value: true, key: 'Yes' },{ name: 'no', value: false, key: 'No' }] }]) const isPrimaryKey = await inquirer.prompt([{ message: 'Is primary key?', type: 'list', name: 'is_primary_key', choices: [{ name: 'yes', value: true, key: 'Yes' },{ name: 'no', value: false, key: 'No' }] }]) fields.push({ defaultValue: defaultFieldValue ? defaultFieldValue[Object.keys(defaultFieldValue)[0]] : null, type: fieldType[Object.keys(fieldType)[0]], name: fieldName[Object.keys(fieldName)[0]], primary: isPrimaryKey[Object.keys(isPrimaryKey)[0]], isUnique: isUnique[Object.keys(isUnique)[0]], autoincrement: autoincrement ? fieldType[Object.keys(autoincrement)[0]] : null, isNotNullable: isNotNullable[Object.keys(isNotNullable)[0]], }) const isActionFinished = await inquirer.prompt([{ message: 'Add another field?', type: 'list', name: 'is_action_finished', choices: [{ name: 'yes', value: true, key: 'Yes' },{ name: 'no', value: false, key: 'No' }] }]) if(!isActionFinished['is_action_finished']) { break; } } return { tableName: tableName['table_name'], fields: fields } } }