forked from db-migrate/node-db-migrate
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
70 lines (49 loc) · 1.46 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
var pkginfo = require('pkginfo')(module, 'version'); // jshint ignore:line
var fs = require('fs');
var path = require('path');
exports.dataType = require('db-migrate-shared').dataType;
function loadPluginList() {
var plugins = JSON.parse(fs.readFileSync(
path.join(process.cwd(), 'package.json'),
'utf-8'
)
),
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() {
var plugins = loadPluginList(),
i = 0,
length = plugins.length,
hooks = {};
for(; i < length; ++i) {
var plugin = require(plugins[i]);
if(typeof(plugin.name) !== 'string' || !plugin.hooks || !plugin.loadPlugin)
continue;
plugin.hooks.map(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('optimist')];
var mod = require('./api.js'),
plugins = {};
try {
if(!options || !options.noPlugins)
plugins = loadPlugins();
}
catch(ex) {}
if(options && options.plugins) {
plugins = Object.assign(plugins, options.plugins);
}
return new mod(plugins, isModule, options, callback);
};