UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

127 lines 5.63 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = executeMigrations; exports.createUmzugInstance = createUmzugInstance; const umzug_1 = require("umzug"); const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk"); const environment = __importStar(require("../../Tools/Environment")); const index_1 = require("./Lib/index"); let logger; let totalMigrationsToRun = 0; let executedMigrations = 0; async function executeMigrations(pathToMigrations) { logger = new processcube_engine_sdk_1.Logger('migrations'); const databaseConfig = environment.getConfig().database; const aDayInMs = 86400000; const sequelizeInstanceConfig = { ...databaseConfig, }; if (databaseConfig.dialect === 'mssql') { sequelizeInstanceConfig.dialectOptions = { ...databaseConfig?.dialectOptions, options: { ...databaseConfig?.dialectOptions?.options, requestTimeout: aDayInMs, }, }; } const sequelizeInstance = await getDatabaseConnection(sequelizeInstanceConfig); const umzugInstance = await createUmzugInstance(sequelizeInstance, pathToMigrations); logger.info(`Running ${totalMigrationsToRun} pending migrations`); await umzugInstance.up(); logger.info(`Successfully executed ${executedMigrations} migrations`); umzugInstance.clearListeners('migrating'); umzugInstance.clearListeners('migrated'); await (0, index_1.destroySequelizeInstance)(); } // NOTE: customMigrationPath is only used internally by the integrationtests. async function createUmzugInstance(sequelize, customMigrationPath) { const migrationLocation = customMigrationPath ? `${customMigrationPath}/v*/*.js` : `Migrations/v*/*.js`; const umzug = new umzug_1.Umzug({ storage: new umzug_1.SequelizeStorage({ sequelize: sequelize, timestamps: true }), migrations: { glob: [migrationLocation, { cwd: __dirname }], resolve: (params) => { const getModule = () => import(`file:///${params.path.replace(/\\/g, '/')}`); const migrationArgs = { queryInterface: sequelize.getQueryInterface(), sequelizeOptions: sequelize.options, logger: logger, }; return { name: params.name, up: async () => (await getModule()).up(migrationArgs), down: async () => (await getModule()).down(migrationArgs), }; }, }, logger: { info: (message) => { // "migrating" and "migrated" are logged through event listeners, because its more precise. if (message.event !== 'migrating' && message.event !== 'migrated') { logger.info(`${message.event} - ${message.name}`, message); } }, debug: (message) => { logger.debug(`${message.event} - ${message.name}`, message); }, warn: (message) => { logger.warn(JSON.stringify(message, null, 2)); }, error: (message) => { logger.error(JSON.stringify(message, null, 2)); }, }, }); umzug.on('migrating', (eventData) => { // NOTE: umzug.executed() includes migrations that were executed in the past, so a manual counter is more accurate for our purpose. executedMigrations++; logger.info(`Starting Migration (${executedMigrations}/${totalMigrationsToRun}) ${eventData.name}`); }); umzug.on('migrated', (eventData) => { logger.info(`Finished Migration ${eventData.name}`); }); totalMigrationsToRun = (await umzug.pending()).length; return umzug; } async function getDatabaseConnection(sequelizeInstanceConfig) { const databaseExists = await (0, index_1.checkIfDatabaseExists)(sequelizeInstanceConfig); if (!databaseExists) { await (0, index_1.createDatabase)(sequelizeInstanceConfig, sequelizeInstanceConfig.database); } return (0, index_1.getSequelizeInstanceWithoutModels)(sequelizeInstanceConfig); } //# sourceMappingURL=Migrator.js.map