payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
98 lines (97 loc) • 3.29 kB
JavaScript
// @ts-strict-ignore
import payload from '../index.js';
import { prettySyncLoggerDestination } from '../utilities/logger.js';
/**
* The default logger's options did not allow for forcing sync logging
* Using these options, to force both pretty print and sync logging
*/ const prettySyncLogger = {
loggerDestination: prettySyncLoggerDestination,
loggerOptions: {}
};
export const availableCommands = [
'migrate',
'migrate:create',
'migrate:down',
'migrate:refresh',
'migrate:reset',
'migrate:status',
'migrate:fresh'
];
const availableCommandsMsg = `Available commands: ${availableCommands.join(', ')}`;
export const migrate = async ({ config, parsedArgs })=>{
const { _: args, file, forceAcceptWarning: forceAcceptFromProps, help } = parsedArgs;
const formattedArgs = Object.keys(parsedArgs).map((key)=>{
const formattedKey = key.replace(/^[-_]+/, '');
if (!formattedKey) {
return null;
}
return formattedKey.split('-').map((word, index)=>index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1)).join('');
}).filter(Boolean);
const forceAcceptWarning = forceAcceptFromProps || formattedArgs.includes('forceAcceptWarning');
const skipEmpty = formattedArgs.includes('skipEmpty');
if (help) {
// eslint-disable-next-line no-console
console.log(`\n\n${availableCommandsMsg}\n`) // Avoid having to init payload to get the logger
;
process.exit(0);
}
process.env.PAYLOAD_MIGRATING = 'true';
// Barebones instance to access database adapter
await payload.init({
config,
disableOnInit: true,
...prettySyncLogger
});
const adapter = payload.db;
if (!adapter) {
throw new Error('No database adapter found');
}
if (!args.length) {
payload.logger.error({
msg: `No migration command provided. ${availableCommandsMsg}`
});
process.exit(1);
}
switch(args[0]){
case 'migrate':
await adapter.migrate();
break;
case 'migrate:create':
try {
await adapter.createMigration({
file,
forceAcceptWarning,
migrationName: args[1],
payload,
skipEmpty
});
} catch (err) {
throw new Error(`Error creating migration: ${err.message}`);
}
break;
case 'migrate:down':
await adapter.migrateDown();
break;
case 'migrate:fresh':
await adapter.migrateFresh({
forceAcceptWarning
});
break;
case 'migrate:refresh':
await adapter.migrateRefresh();
break;
case 'migrate:reset':
await adapter.migrateReset();
break;
case 'migrate:status':
await adapter.migrateStatus();
break;
default:
payload.logger.error({
msg: `Unknown migration command: ${args[0]}. ${availableCommandsMsg}`
});
process.exit(1);
}
payload.logger.info('Done.');
};
//# sourceMappingURL=migrate.js.map