-
-
Notifications
You must be signed in to change notification settings - Fork 768
/
Copy pathmigrator.ts
54 lines (47 loc) · 1.55 KB
/
migrator.ts
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
import { log } from 'db-migrate-shared';
import { getInstance } from 'db-migrate';
import type { IUnleashConfig } from './lib/types/option';
import { secondsToMilliseconds } from 'date-fns';
log.setLogLevel('error');
async function noDatabaseUrl<T>(fn: () => Promise<T>): Promise<T> {
// unset DATABASE_URL so it doesn't take presedence over the provided db config
const dbUrlEnv = process.env.DATABASE_URL;
delete process.env.DATABASE_URL;
const result = fn();
process.env.DATABASE_URL = dbUrlEnv;
return result;
}
export async function migrateDb(
{ db }: IUnleashConfig,
stopAt?: string,
): Promise<void> {
return noDatabaseUrl(async () => {
const custom = {
...db,
connectionTimeoutMillis: secondsToMilliseconds(10),
};
// disable Intellij/WebStorm from setting verbose CLI argument to db-migrator
process.argv = process.argv.filter((it) => !it.includes('--verbose'));
const dbm = getInstance(true, {
cwd: __dirname,
config: { custom },
env: 'custom',
});
return dbm.up(stopAt);
});
}
// This exists to ease testing
export async function resetDb({ db }: IUnleashConfig): Promise<void> {
return noDatabaseUrl(async () => {
const custom = {
...db,
connectionTimeoutMillis: secondsToMilliseconds(10),
};
const dbm = getInstance(true, {
cwd: __dirname,
config: { custom },
env: 'custom',
});
return dbm.reset();
});
}