diff --git a/bin/migrate b/bin/migrate index 11d2490..e366686 100755 --- a/bin/migrate +++ b/bin/migrate @@ -2,9 +2,10 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const pkg = require('../package.json') +const program = new Command() program .version(pkg.version) .command('init', 'Initalize the migrations tool in a project') diff --git a/bin/migrate-create b/bin/migrate-create index f9e5db2..4c9406e 100755 --- a/bin/migrate-create +++ b/bin/migrate-create @@ -2,13 +2,14 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const path = require('path') const dotenv = require('dotenv') const log = require('../lib/log') const registerCompiler = require('../lib/register-compiler') const pkg = require('../package.json') +const program = new Command() program .version(pkg.version) .option('-c, --chdir [dir]', 'Change the working directory', process.cwd()) @@ -24,47 +25,48 @@ program .action(create) .parse(process.argv) -if (program.extention) { - console.log('create', '"--extention" argument is deprecated. Use "--extension" instead') -} - -// Setup environment -if (program.env) { - const e = dotenv.config({ - path: typeof program.env === 'string' ? program.env : '.env' - }) - if (e && e.error instanceof Error) { - throw e.error - } -} - // eslint-disable-next-line no-var var _name function create (name) { + const opts = program.opts() + + if (opts.extention) { + console.log('create', '"--extention" argument is deprecated. Use "--extension" instead') + } + + // Setup environment + if (opts.env) { + const e = dotenv.config({ + path: typeof opts.env === 'string' ? opts.env : '.env' + }) + if (e && e.error instanceof Error) { + throw e.error + } + } // Name provided? _name = name // Change the working dir - process.chdir(program.chdir) + process.chdir(opts.chdir) // Load compiler - if (program.compiler) { - registerCompiler(program.compiler) + if (opts.compiler) { + registerCompiler(opts.compiler) } // Load the template generator let gen try { - gen = require(program.generator) + gen = require(opts.generator) } catch (e) { - gen = require(path.resolve(program.generator)) + gen = require(path.resolve(opts.generator)) } gen({ name, - dateFormat: program.dateFormat, - templateFile: program.templateFile, - migrationsDirectory: program.migrationsDir, - extension: program.extension || path.extname(program.templateFile) + dateFormat: opts.dateFormat, + templateFile: opts.templateFile, + migrationsDirectory: opts.migrationsDir, + extension: opts.extension || path.extname(opts.templateFile) }, function (err, p) { if (err) { log.error('Template generation error', err.message) diff --git a/bin/migrate-down b/bin/migrate-down index b64bbd4..c0cd4fe 100755 --- a/bin/migrate-down +++ b/bin/migrate-down @@ -2,7 +2,7 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const path = require('path') const minimatch = require('minimatch') const dotenv = require('dotenv') @@ -12,6 +12,7 @@ const log = require('../lib/log') const registerCompiler = require('../lib/register-compiler') const pkg = require('../package.json') +const program = new Command() program .version(pkg.version) .usage('[options] ') @@ -24,14 +25,15 @@ program .option('--env [name]', 'Use dotenv to load an environment file') .option('-F, --force', 'Force through the command, ignoring warnings') .parse(process.argv) +const opts = program.opts() // Change the working dir -process.chdir(program.chdir) +process.chdir(opts.chdir) // Setup environment -if (program.env) { +if (opts.env) { const e = dotenv.config({ - path: typeof program.env === 'string' ? program.env : '.env' + path: typeof opts.env === 'string' ? opts.env : '.env' }) if (e && e.error instanceof Error) { throw e.error @@ -39,23 +41,23 @@ if (program.env) { } // Load compiler -if (program.compiler) { - registerCompiler(program.compiler) +if (opts.compiler) { + registerCompiler(opts.compiler) } // Setup store -if (program.store[0] === '.') program.store = path.join(process.cwd(), program.store) +if (opts.store[0] === '.') opts.store = path.join(process.cwd(), opts.store) -const StoreImport = require(program.store) +const StoreImport = require(opts.store) const Store = StoreImport.default || StoreImport -const store = new Store(program.stateFile) +const store = new Store(opts.stateFile) // Load in migrations migrate.load({ stateStore: store, - migrationsDirectory: program.migrationsDir, - filterFunction: minimatch.filter(program.matches), - ignoreMissing: program.force + migrationsDirectory: opts.migrationsDir, + filterFunction: minimatch.filter(opts.matches), + ignoreMissing: opts.force }, function (err, set) { if (err) { log.error('error', err) diff --git a/bin/migrate-init b/bin/migrate-init index 6d6bfcb..e1a551d 100755 --- a/bin/migrate-init +++ b/bin/migrate-init @@ -2,7 +2,7 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const mkdirp = require('mkdirp') const dotenv = require('dotenv') const path = require('path') @@ -10,6 +10,7 @@ const log = require('../lib/log') const pkg = require('../package.json') const registerCompiler = require('../lib/register-compiler') +const program = new Command() program .version(pkg.version) .option('-f, --state-file ', 'Set path to state file', '.migrate') @@ -19,14 +20,15 @@ program .option('-c, --chdir [dir]', 'Change the working directory', process.cwd()) .option('--env [name]', 'Use dotenv to load an environment file') .parse(process.argv) +const opts = program.opts() // Change the working dir -process.chdir(program.chdir) +process.chdir(opts.chdir) // Setup environment -if (program.env) { +if (opts.env) { const e = dotenv.config({ - path: typeof program.env === 'string' ? program.env : '.env' + path: typeof opts.env === 'string' ? opts.env : '.env' }) if (e && e.error instanceof Error) { throw e.error @@ -34,19 +36,19 @@ if (program.env) { } // Load compiler -if (program.compiler) { - registerCompiler(program.compiler) +if (opts.compiler) { + registerCompiler(opts.compiler) } // Setup store -if (program.store[0] === '.') program.store = path.join(process.cwd(), program.store) +if (opts.store[0] === '.') opts.store = path.join(process.cwd(), opts.store) -const StoreImport = require(program.store) +const StoreImport = require(opts.store) const Store = StoreImport.default || StoreImport -const store = new Store(program.stateFile) +const store = new Store(opts.stateFile) // Create migrations dir path -const p = path.resolve(process.cwd(), program.migrationsDir) +const p = path.resolve(process.cwd(), opts.migrationsDir) log('migrations dir', p) mkdirp.sync(p) diff --git a/bin/migrate-list b/bin/migrate-list index d25b3b1..52421a2 100755 --- a/bin/migrate-list +++ b/bin/migrate-list @@ -2,7 +2,7 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const path = require('path') const dateFormat = require('dateformat') const minimatch = require('minimatch') @@ -12,6 +12,7 @@ const log = require('../lib/log') const registerCompiler = require('../lib/register-compiler') const pkg = require('../package.json') +const program = new Command() program .version(pkg.version) .usage('[options] ') @@ -24,20 +25,21 @@ program .option('--compiler ', 'Use the given module to compile files') .option('--env [name]', 'Use dotenv to load an environment file') .parse(process.argv) +const opts = program.opts() // Check clean flag, exit if NODE_ENV === 'production' and force not specified -if (program.clean && process.env.NODE_ENV === 'production' && !program.force) { +if (opts.clean && process.env.NODE_ENV === 'production' && !opts.force) { log.error('error', 'Cowardly refusing to clean while node environment set to production, use --force to continue.') process.exit(1) } // Change the working dir -process.chdir(program.chdir) +process.chdir(opts.chdir) // Setup environment -if (program.env) { +if (opts.env) { const e = dotenv.config({ - path: typeof program.env === 'string' ? program.env : '.env' + path: typeof opts.env === 'string' ? opts.env : '.env' }) if (e && e.error instanceof Error) { throw e.error @@ -45,22 +47,22 @@ if (program.env) { } // Load compiler -if (program.compiler) { - registerCompiler(program.compiler) +if (opts.compiler) { + registerCompiler(opts.compiler) } // Setup store -if (program.store[0] === '.') program.store = path.join(process.cwd(), program.store) +if (opts.store[0] === '.') opts.store = path.join(process.cwd(), opts.store) -const StoreImport = require(program.store) +const StoreImport = require(opts.store) const Store = StoreImport.default || StoreImport -const store = new Store(program.stateFile) +const store = new Store(opts.stateFile) // Load in migrations migrate.load({ stateStore: store, - migrationsDirectory: program.migrationsDir, - filterFunction: minimatch.filter(program.matches) + migrationsDirectory: opts.migrationsDir, + filterFunction: minimatch.filter(opts.matches) }, function (err, set) { if (err) { log.error('error', err) @@ -72,7 +74,7 @@ migrate.load({ } set.migrations.forEach(function (migration) { - log(migration.title + (migration.timestamp ? ' [' + dateFormat(migration.timestamp, program.dateFormat) + ']' : ' [not run]'), migration.description || '') + log(migration.title + (migration.timestamp ? ' [' + dateFormat(migration.timestamp, opts.dateFormat) + ']' : ' [not run]'), migration.description || '') }) process.exit(0) diff --git a/bin/migrate-up b/bin/migrate-up index 34549ed..fc29f08 100755 --- a/bin/migrate-up +++ b/bin/migrate-up @@ -2,7 +2,7 @@ // vim: set ft=javascript: 'use strict' -const program = require('commander') +const { Command } = require('commander') const path = require('path') const minimatch = require('minimatch') const dotenv = require('dotenv') @@ -12,6 +12,7 @@ const log = require('../lib/log') const registerCompiler = require('../lib/register-compiler') const pkg = require('../package.json') +const program = new Command() program .version(pkg.version) .usage('[options] ') @@ -26,14 +27,14 @@ program .option('--compiler ', 'Use the given module to compile files') .option('--env [name]', 'Use dotenv to load an environment file') .parse(process.argv) +const opts = program.opts() // Change the working dir -process.chdir(program.chdir) - +process.chdir(opts.chdir) // Setup environment -if (program.env) { +if (opts.env) { const e = dotenv.config({ - path: typeof program.env === 'string' ? program.env : '.env' + path: typeof opts.env === 'string' ? opts.env : '.env' }) if (e && e.error instanceof Error) { throw e.error @@ -41,31 +42,31 @@ if (program.env) { } // Check clean flag, exit if NODE_ENV === 'production' and force not specified -if (program.clean && process.env.NODE_ENV === 'production' && !program.force) { +if (opts.clean && process.env.NODE_ENV === 'production' && !opts.force) { log.error('error', 'Cowardly refusing to clean while node environment set to production, use --force to continue.') process.exit(1) } // Check init flag, exit if NODE_ENV === 'production' and force not specified -if (program.init && process.env.NODE_ENV === 'production' && !program.force) { +if (opts.init && process.env.NODE_ENV === 'production' && !opts.force) { log.error('error', 'Cowardly refusing to init while node environment set to production, use --force to continue.') process.exit(1) } // Load compiler -if (program.compiler) { - registerCompiler(program.compiler) +if (opts.compiler) { + registerCompiler(opts.compiler) } // Setup store -if (program.store[0] === '.') program.store = path.join(process.cwd(), program.store) +if (opts.store[0] === '.') opts.store = path.join(process.cwd(), opts.store) -const StoreImport = require(program.store) +const StoreImport = require(opts.store) const Store = StoreImport.default || StoreImport -const store = new Store(program.stateFile) +const store = new Store(opts.stateFile) // Call store init -if (program.init && typeof store.init === 'function') { +if (opts.init && typeof store.init === 'function') { store.init(function (err) { if (err) return log.error(err) loadAndGo() @@ -78,9 +79,9 @@ if (program.init && typeof store.init === 'function') { function loadAndGo () { migrate.load({ stateStore: store, - migrationsDirectory: program.migrationsDir, - filterFunction: minimatch.filter(program.matches), - ignoreMissing: program.force + migrationsDirectory: opts.migrationsDir, + filterFunction: minimatch.filter(opts.matches), + ignoreMissing: opts.force }, function (err, set) { if (err) { log.error('error', err) @@ -96,7 +97,7 @@ function loadAndGo () { }) // Run - ;(program.clean ? cleanUp : up)(set, function (err) { + ;(opts.clean ? cleanUp : up)(set, function (err) { if (err) { log.error('error', err) process.exit(1) diff --git a/examples/cli/migrations/db.js b/examples/cli/migrations/db.js index 159c435..ebf7671 100644 --- a/examples/cli/migrations/db.js +++ b/examples/cli/migrations/db.js @@ -1,6 +1,6 @@ // bad example, but you get the point ;) -// $ npm install redis +// $ npm install redis@3.0.0 // $ redis-server const redis = require('redis') diff --git a/package.json b/package.json index 6c2d2cd..cd540b0 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "mocha": "^10.2.0", + "redis": "^3.0.0", "rimraf": "^5.0.1", "standard": "^17.0.0" }, @@ -34,7 +35,7 @@ "license": "MIT", "dependencies": { "chalk": "^4.1.2", - "commander": "^2.20.3", + "commander": "^12.1.0", "dateformat": "^4.6.3", "dotenv": "^16.0.0", "inherits": "^2.0.3",