@vendure/cli
Version:
A modern, headless ecommerce framework
125 lines • 5.55 kB
JavaScript
;
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