UNPKG

2.11 kBPlain TextView Raw
1#!/usr/bin/env node
2// vim: set ft=javascript:
3'use strict'
4
5var program = require('commander')
6var path = require('path')
7var minimatch = require('minimatch')
8var dotenv = require('dotenv')
9var migrate = require('../')
10var runMigrations = require('../lib/migrate')
11var log = require('../lib/log')
12var registerCompiler = require('../lib/register-compiler')
13var pkg = require('../package.json')
14
15program
16 .version(pkg.version)
17 .usage('[options] <name>')
18 .option('-c, --chdir <dir>', 'Change the working directory', process.cwd())
19 .option('-f, --state-file <path>', 'Set path to state file', '.migrate')
20 .option('-s, --store <store>', 'Set the migrations store', path.join(__dirname, '..', 'lib', 'file-store'))
21 .option('--migrations-dir <dir>', 'Change the migrations directory name', 'migrations')
22 .option('--matches <glob>', 'A glob pattern to filter migration files', '*')
23 .option('--compiler <ext:module>', 'Use the given module to compile files')
24 .option('--env [name]', 'Use dotenv to load an environment file')
25 .parse(process.argv)
26
27// Change the working dir
28process.chdir(program.chdir)
29
30// Setup environment
31if (program.env) {
32 var e = dotenv.config({
33 path: typeof program.env === 'string' ? program.env : '.env'
34 })
35 if (e && e.error instanceof Error) {
36 throw e.error
37 }
38}
39
40// Load compiler
41if (program.compiler) {
42 registerCompiler(program.compiler)
43}
44
45// Setup store
46if (program.store[0] === '.') program.store = path.join(process.cwd(), program.store)
47
48var Store = require(program.store)
49var store = new Store(program.stateFile)
50
51// Load in migrations
52migrate.load({
53 stateStore: store,
54 migrationsDirectory: program.migrationsDir,
55 filterFunction: minimatch.filter(program.matches)
56}, function (err, set) {
57 if (err) {
58 log.error('error', err)
59 process.exit(1)
60 }
61
62 set.on('migration', function (migration, direction) {
63 log(direction, migration.title)
64 })
65
66 runMigrations(set, 'down', program.args[0], function (err) {
67 if (err) {
68 log('error', err)
69 process.exit(1)
70 }
71
72 log('migration', 'complete')
73 process.exit(0)
74 })
75})