@medusajs/medusa
Version:
Building blocks for digital commerce
90 lines • 3.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.runMigrationScripts = runMigrationScripts;
const framework_1 = require("@medusajs/framework");
const links_1 = require("@medusajs/framework/links");
const logger_1 = require("@medusajs/framework/logger");
const migrations_1 = require("@medusajs/framework/migrations");
const utils_1 = require("@medusajs/framework/utils");
const path_1 = require("path");
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
const loaders_1 = require("../../loaders");
const utils_2 = require("../utils");
const TERMINAL_SIZE = process.stdout.columns;
/**
* A low-level utility to migrate the migration scripts. This util should
* never exit the process implicitly.
*/
async function runMigrationScripts({ directory, }) {
let onApplicationPrepareShutdown = async () => Promise.resolve();
let onApplicationShutdown = async () => Promise.resolve();
let container_;
let plugins;
try {
container_ = await (0, loaders_1.initializeContainer)(directory);
await (0, utils_2.ensureDbExists)(container_);
const configModule = container_.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
plugins = await (0, utils_1.getResolvedPlugins)(directory, configModule, true);
(0, utils_1.mergePluginModules)(configModule, plugins);
const resources = await loadResources(plugins);
onApplicationPrepareShutdown = resources.onApplicationPrepareShutdown;
onApplicationShutdown = resources.onApplicationShutdown;
const scriptsSourcePaths = [
(0, path_1.join)((0, path_1.dirname)(require.resolve("@medusajs/medusa")), "migration-scripts"),
...plugins.map((plugin) => (0, path_1.join)(plugin.resolve, "migration-scripts")),
];
const migrator = new migrations_1.MigrationScriptsMigrator({ container: container_ });
await migrator.ensureMigrationsTable();
const pendingScripts = await migrator.getPendingMigrations(scriptsSourcePaths);
if (!pendingScripts?.length) {
logger_1.logger.info("No pending migration scripts to execute");
return true;
}
console.log(new Array(TERMINAL_SIZE).join("-"));
logger_1.logger.info("Pending migration scripts to execute");
logger_1.logger.info(`${pendingScripts.join("\n")}`);
console.log(new Array(TERMINAL_SIZE).join("-"));
logger_1.logger.info("Running migration scripts...");
await migrator.run(scriptsSourcePaths);
console.log(new Array(TERMINAL_SIZE).join("-"));
logger_1.logger.info("Migration scripts completed");
return true;
}
finally {
await onApplicationPrepareShutdown();
await onApplicationShutdown();
}
}
async function loadResources(plugins) {
/**
* Clear all module instances to prevent cache from kicking in
*/
modules_sdk_1.MedusaModule.clearInstances();
/**
* Setup
*/
const linksSourcePaths = plugins.map((plugin) => (0, path_1.join)(plugin.resolve, "links"));
await new links_1.LinkLoader(linksSourcePaths).load();
const medusaAppResources = await new framework_1.MedusaAppLoader().load();
const onApplicationPrepareShutdown = medusaAppResources.onApplicationPrepareShutdown;
const onApplicationShutdown = medusaAppResources.onApplicationShutdown;
await medusaAppResources.onApplicationStart();
return {
onApplicationPrepareShutdown,
onApplicationShutdown,
};
}
const main = async function ({ directory, }) {
try {
const migrated = await runMigrationScripts({
directory,
});
process.exit(migrated ? 0 : 1);
}
catch (error) {
logger_1.logger.error(error);
process.exit(1);
}
};
exports.default = main;
//# sourceMappingURL=run-scripts.js.map
;