Skip to content

Commit d5d9f19

Browse files
authored
Merge pull request #48 from Adslot/async-support
Support async migration functions
2 parents 33ccf22 + 4919c8b commit d5d9f19

3 files changed

Lines changed: 31 additions & 5 deletions

File tree

lib/migrant.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var assert = require('assert'),
22
path = require('path'),
33
fs = require('fs'),
4+
util = require('util'),
45
async = require('async');
56

67
var MetaDecorator = require('./meta/');
@@ -69,12 +70,13 @@ Migrant.prototype.migrateSingle = function(mode, filename, cb) {
6970
var self = this,
7071
migration = require(path.join(this.opts.dir, filename)),
7172
started = Date.now();
73+
const migrateFn = util.types.isAsyncFunction(migration[mode]) ? util.callbackify(migration[mode]) : migration[mode];
7274

7375
this.log(filename, mode);
7476
let msg;
7577
async.series([
7678
function(cbInner) {
77-
migration[mode](function(err, res) {
79+
migrateFn(function(err, res) {
7880
cbInner(err, res)
7981
// to check if the callback set correctly on each file.
8082
// if there is an error it will be written in the log file and will throw an error.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const { setTimeout } = require('timers/promises');
2+
3+
exports.up = async () => {
4+
await setTimeout(10);
5+
return 'eee: up';
6+
};
7+
8+
exports.down = async () => {
9+
await setTimeout(10);
10+
return 'eee: down';
11+
};

test/migrant_test.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@ describe('index', function() {
3535
meta.set(null, noon)
3636
m.list('up', 10, function(err, list) {
3737
if (err) return done(err);
38-
assert.deepEqual(list, ['20141028-aaa.js', '20141030-bbb.js', '20141031-ccc.js', '20150601-ddd.js']);
38+
assert.deepEqual(list, [
39+
'20141028-aaa.js',
40+
'20141030-bbb.js',
41+
'20141031-ccc.js',
42+
'20150601-ddd.js',
43+
'20150701-eee.js',
44+
]);
3945
done()
4046
});
4147
});
@@ -44,7 +50,12 @@ describe('index', function() {
4450
meta.set({migrations: [{filename: '20141028-aaa.js', ts: 11}]}, noon)
4551
m.list('up', 10, function(err, list) {
4652
if (err) return done(err);
47-
assert.deepEqual(list, ['20141030-bbb.js', '20141031-ccc.js','20150601-ddd.js']);
53+
assert.deepEqual(list, [
54+
'20141030-bbb.js',
55+
'20141031-ccc.js',
56+
'20150601-ddd.js',
57+
'20150701-eee.js',
58+
]);
4859
done()
4960
});
5061
});
@@ -138,7 +149,8 @@ describe('index', function() {
138149
assert.deepEqual(res, [
139150
['aaa: up', undefined],
140151
['bbb: up', undefined],
141-
['ccc: up', undefined]
152+
['ccc: up', undefined],
153+
['eee: up', undefined]
142154
]);
143155

144156
m.meta.get(function(err, data) {
@@ -152,7 +164,8 @@ describe('index', function() {
152164
'20150601-ddd.js',
153165
'20141028-aaa.js',
154166
'20141030-bbb.js',
155-
'20141031-ccc.js'
167+
'20141031-ccc.js',
168+
'20150701-eee.js'
156169
])
157170
done()
158171
})

0 commit comments

Comments
 (0)