UNPKG

@vendure/cli

Version:

A modern, headless ecommerce framework

125 lines 5.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateMigrationOperation = generateMigrationOperation; exports.runMigrationsOperation = runMigrationsOperation; exports.revertMigrationOperation = revertMigrationOperation; const prompts_1 = require("@clack/prompts"); const core_1 = require("@vendure/core"); const path_1 = __importDefault(require("path")); const project_validation_1 = require("../../shared/project-validation"); const shared_prompts_1 = require("../../shared/shared-prompts"); const vendure_config_ref_1 = require("../../shared/vendure-config-ref"); const load_vendure_config_file_1 = require("./load-vendure-config-file"); async function generateMigrationOperation(options = {}) { try { (0, project_validation_1.validateVendureProjectDirectory)(); const { project, tsConfigPath } = await (0, shared_prompts_1.analyzeProject)({ cancelledMessage: '' }); const vendureConfig = new vendure_config_ref_1.VendureConfigRef(project); prompts_1.log.info('Using VendureConfig from ' + vendureConfig.getPathRelativeToProjectRoot()); const name = options.name; if (!name) { return { success: false, message: 'Migration name is required', }; } if (!/^[a-zA-Z][a-zA-Z-_0-9]+$/.test(name)) { return { success: false, message: 'The migration name must contain only letters, numbers, underscores and dashes', }; } const config = await (0, load_vendure_config_file_1.loadVendureConfigFile)(vendureConfig, tsConfigPath); const migrationsDirs = getMigrationsDir(vendureConfig, config); const migrationDir = options.outputDir || migrationsDirs[0]; prompts_1.log.info('Generating migration...'); const migrationName = await (0, core_1.generateMigration)(config, { name, outputDir: migrationDir }); const report = typeof migrationName === 'string' ? `New migration generated: ${migrationName}` : 'No changes in database schema were found, so no migration was generated'; return { success: true, message: report, migrationName: typeof migrationName === 'string' ? migrationName : undefined, }; } catch (error) { return { success: false, message: error.message || 'Failed to generate migration', }; } } async function runMigrationsOperation() { try { (0, project_validation_1.validateVendureProjectDirectory)(); const { project } = await (0, shared_prompts_1.analyzeProject)({ cancelledMessage: '' }); const vendureConfig = new vendure_config_ref_1.VendureConfigRef(project); prompts_1.log.info('Using VendureConfig from ' + vendureConfig.getPathRelativeToProjectRoot()); const config = await (0, load_vendure_config_file_1.loadVendureConfigFile)(vendureConfig); prompts_1.log.info('Running migrations...'); const migrationsRan = await (0, core_1.runMigrations)(config); const report = migrationsRan.length ? `Successfully ran ${migrationsRan.length} migrations` : 'No pending migrations found'; return { success: true, message: report, migrationsRan, }; } catch (error) { return { success: false, message: error.message || 'Failed to run migrations', }; } } async function revertMigrationOperation() { try { (0, project_validation_1.validateVendureProjectDirectory)(); const { project } = await (0, shared_prompts_1.analyzeProject)({ cancelledMessage: '' }); const vendureConfig = new vendure_config_ref_1.VendureConfigRef(project); prompts_1.log.info('Using VendureConfig from ' + vendureConfig.getPathRelativeToProjectRoot()); const config = await (0, load_vendure_config_file_1.loadVendureConfigFile)(vendureConfig); prompts_1.log.info('Reverting last migration...'); await (0, core_1.revertLastMigration)(config); return { success: true, message: 'Successfully reverted last migration', }; } catch (error) { return { success: false, message: error.message || 'Failed to revert migration', }; } } function getMigrationsDir(vendureConfigRef, config) { const options = []; if (Array.isArray(config.dbConnectionOptions.migrations) && config.dbConnectionOptions.migrations.length) { const firstEntry = config.dbConnectionOptions.migrations[0]; if (typeof firstEntry === 'string') { options.push(path_1.default.dirname(firstEntry)); } } const migrationFile = vendureConfigRef.sourceFile .getProject() .getSourceFiles() .find(sf => { return sf .getClasses() .find(c => c.getImplements().find(i => i.getText() === 'MigrationInterface')); }); if (migrationFile) { options.push(migrationFile.getDirectory().getPath()); } options.push(path_1.default.join(vendureConfigRef.sourceFile.getDirectory().getPath(), '../migrations')); return options.map(p => path_1.default.normalize(p)); } //# sourceMappingURL=migration-operations.js.map