diff --git a/index.js b/index.js index 2427eda7..da3a42a1 100755 --- a/index.js +++ b/index.js @@ -1,89 +1,5 @@ #!/usr/bin/env node -require('./src/ImageSequencer'); -sequencer = ImageSequencer({ ui: true }); -var fs = require('fs'); -var program = require('commander'); -var utils = require('./src/CliUtils'); +var cli = require('./src/cli'); -var saveSequence = require('./src/cli/saveSequence.js'); -var installModule = require('./src/cli/installModule.js'); -var sequencerSteps = require('./src/cli/sequencerSteps.js'); - -function exit(message) { - console.error(message); - process.exit(1); -} - -program - .version('0.1.0') - .option('-i, --image [PATH/URL]', 'Input image URL') - .option('-s, --step [step-name]', 'Name of the step to be added.') - .option('-o, --output [PATH]', 'Directory where output will be stored.') - .option('-b, --basic', 'Basic mode outputs only final image') - .option('-c, --config [Object]', 'Options for the step') - .option('--save-sequence [string]', 'Name space separated with Stringified sequence') - .option('--install-module [string]', 'Module name space seaprated npm package name') - .parse(process.argv); - -if (program.saveSequence) saveSequence(program, sequencer); - -else if (program.installModule) installModule(program, sequencer); - -else { - // Parse step into an array to allow for multiple steps. - if (!program.step) exit('No steps passed'); - program.step = program.step.split(' '); - - // User must input an image. - if (!program.image) exit('Can\'t read file.'); - - // User must input an image. - fs.access(program.image, function(err) { - if (err) exit('Can\'t read file.'); - }); - - // User must input a step. If steps exist, check that every step is a valid step. - if (!program.step || !(utils.validateSteps(program.step, sequencer))) - exit('Please ensure all steps are valid.'); - - // If there's no user defined output directory, select a default directory. - program.output = program.output || './output/'; - - // Set sequencer to log module outputs, if any. - sequencer.setUI({ - onComplete: function(step) { - // Get information of outputs. - step.info = sequencer.modulesInfo(step.name); - - for (var output in step.info.outputs) { - console.log('[' + program.step + ']: ' + output + ' = ' + step[output]); - } - }, - notify: function(msg) { - console.log('\x1b[36m%s\x1b[0m', '🌟 ' + msg); - } - }); - - // Finally, if everything is alright, load the image, add the steps and run the sequencer. - sequencer.loadImages(program.image, function() { - console.warn( - '\x1b[33m%s\x1b[0m', - 'Please wait \n output directory generated will be empty until the execution is complete' - ); - - //Generate the Output Directory - var outputFilename = program.output.split('/').slice(-1)[0]; - if (outputFilename.includes('.')) { - // user did give an output filename we have to remove it from dir - program.output = program.output.split('/').slice(0, -1).join('/'); - } - else { - outputFilename = null; - } - - sequencerSteps(program, sequencer, outputFilename); - - }); - -} +cli(process.argv); \ No newline at end of file diff --git a/src/cli/index.js b/src/cli/index.js new file mode 100644 index 00000000..918eb119 --- /dev/null +++ b/src/cli/index.js @@ -0,0 +1,98 @@ +require('../ImageSequencer'); +sequencer = ImageSequencer({ ui: true }); +var fs = require('fs'); +var program = require('commander'); +var utils = require('../CliUtils'); + +var saveSequence = require('./saveSequence.js'); +var installModule = require('./installModule.js'); +var sequencerSteps = require('./sequencerSteps.js'); + +function exit(message) { + console.error(message); + process.exit(1); +} + +function executeSteps(program) { + // Set sequencer to log module outputs, if any. + sequencer.setUI({ + onComplete: function (step) { + // Get information of outputs. + step.info = sequencer.modulesInfo(step.name); + + for (var output in step.info.outputs) { + console.log('[' + program.step + ']: ' + output + ' = ' + step[output]); + } + }, + notify: function (msg) { + console.log('\x1b[36m%s\x1b[0m', '🌟 ' + msg); + }, + }); + + // Finally, if everything is alright, load the image, add the steps and run the sequencer. + sequencer.loadImages(program.image, function () { + console.warn( + '\x1b[33m%s\x1b[0m', + 'Please wait \n output directory generated will be empty until the execution is complete' + ); + + //Generate the Output Directory + var outputFilename = program.output.split('/').slice(-1)[0]; + if (outputFilename.includes('.')) { + // user did give an output filename we have to remove it from dir + program.output = program.output.split('/').slice(0, -1).join('/'); + } else { + outputFilename = null; + } + + sequencerSteps(program, sequencer, outputFilename); + }); +} + +function parseSteps(program) { + // Parse step into an array to allow for multiple steps. + if (!program.step) exit('No steps passed'); + program.step = program.step.split(' '); + + // User must input an image. + if (!program.image) exit('Can\'t read file.'); + + // User must input an image. + fs.access(program.image, function (err) { + if (err) exit('Can\'t read file.'); + }); + + // User must input a step. If steps exist, check that every step is a valid step. + if (!program.step || !utils.validateSteps(program.step, sequencer)) + exit('Please ensure all steps are valid.'); + + // If there's no user defined output directory, select a default directory. + program.output = program.output || './output/'; + + executeSteps(program); +} + +function cli(args) { + program + .version('0.1.0') + .option('-i, --image [PATH/URL]', 'Input image URL') + .option('-s, --step [step-name]', 'Name of the step to be added.') + .option('-o, --output [PATH]', 'Directory where output will be stored.') + .option('-b, --basic', 'Basic mode outputs only final image') + .option('-c, --config [Object]', 'Options for the step') + .option( + '--save-sequence [string]', + 'Name space separated with Stringified sequence' + ) + .option( + '--install-module [string]', + 'Module name space seaprated npm package name' + ) + .parse(args); + + if (program.saveSequence) saveSequence(program, sequencer); + else if (program.installModule) installModule(program, sequencer); + else parseSteps(program); +} + +module.exports = cli; diff --git a/test/cli/saveSequence.js b/test/cli/saveSequence.js index 57cb2d7d..8dd5e531 100755 --- a/test/cli/saveSequence.js +++ b/test/cli/saveSequence.js @@ -1,38 +1,22 @@ -require('../../src/ImageSequencer'); -sequencer = ImageSequencer({ ui: true }); -const saveSequence = require('../../src/cli/saveSequence.js'); const test = require('tape'); -const { Command } = require('commander'); - +const cli = require('../../src/cli'); test('testing save sequence function', function (t) { try { - let program = new Command(); - program - .option('--save-sequence [string]', 'Name space separated with Stringified sequence'); - - program.parse(['node', 'test', '--save-sequence', '"invert brightness"']); - - if (program.saveSequence) - saveSequence(program, sequencer); + cli([ + 'node', 'test', + '--save-sequence', + '"invert-colormap invert(),colormap()"', + ]); t.true(1, 'creation success'); - } catch (error) { t.true(!error, 'creation fail'); } try { - let program = new Command(); - program - .option('--save-sequence [string]', 'Name space separated with Stringified sequence'); - - program.parse(['node', 'test', '--save-sequence']); - - if (program.saveSequence) - saveSequence(program, sequencer); + cli(['node', 'test', '--save-sequence']); t.true(0, 'creation success'); - } catch (error) { t.true(1, 'creation fail'); } t.end(); -}); \ No newline at end of file +});