UNPKG

@golemio/db-migrate

Version:

Database migration framework for node.js

86 lines (67 loc) 2.06 kB
module.exports.version = require('./package.json').version; var fs = require('fs'); var path = require('path'); var log = require('db-migrate-shared').log; exports.dataType = require('db-migrate-shared').dataType; function loadPluginList (options) { try { fs.accessSync(path.join(options.cwd, 'package.json'), fs.constants.R_OK); } catch (err) { throw new Error( 'There was no package.json found in the current working dir!', options.cwd ); } try { var plugins = JSON.parse( fs.readFileSync(path.join(options.cwd, 'package.json'), 'utf-8') ); } catch (err) { throw new Error('Error parsing package.json', err); } var targets = []; plugins = Object.assign( plugins.dependencies || {}, plugins.devDependencies || {} ); for (var plugin in plugins) { if (plugin.startsWith('db-migrate-plugin')) targets.push(plugin); } return targets; } function loadPlugins (options) { var plugins = loadPluginList(options); var i = 0; var length = plugins.length; var hooks = {}; for (; i < length; ++i) { var plugin = require(path.join(options.cwd, 'node_modules', plugins[i])); if (!plugin.hooks || !plugin.loadPlugin) { continue; } // name is now derived from package name plugin.name = plugins[i]; plugin.hooks.forEach(function (hook) { hooks[hook] = hooks[hook] || []; hooks[hook].push(plugin); }); } return hooks; } module.exports.getInstance = function (isModule, options = {}, callback) { delete require.cache[require.resolve('./api.js')]; delete require.cache[require.resolve('yargs')]; var Mod = require('./api.js'); var plugins = {}; options.cwd = options.cwd || process.cwd(); try { if (!options || !options.noPlugins) plugins = loadPlugins(options); } catch (ex) { log.verbose('No plugin could be loaded!'); log.verbose(ex); } if (options && options.plugins) { plugins = Object.assign(plugins, options.plugins); } return new Mod(plugins, isModule, options, callback); };