New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

node-symfony-console

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-symfony-console

Symfony Console Component ported to Node

latest
Source
npmnpm
Version
0.0.8
Version published
Maintainers
1
Created
Source

Node Symfony Console

This is a straight port of Symfony's Console Component v5.1. Augmented with the spinner functionality largely inspired by alecrabbit/php-console-spinner

Although fully functional, this is very much WIP.

Usage

Eventually we will write ported documentation. For now follow Console Component v5.1 documentation and translate the examples to JS.

 // Most used classes are accessible as direct imports
const {
 Terminal,
 Application,
 SingleCommandApplication,
 Command,
 Question,
 ConfirmationQuestion,
 ChoiceQuestion,
 ProgressBar,
 ProgressIndicator,
 Table,
 TableStyle,
 Output,
 Input,
 InputArgument,
 InputOption,
 Spinner,
 SpinnerFrames} = require('node-symfony-console');
// All of the underlying classes can be accessed throught the console export. Follow the
// original PhP namespace class paths.

const { console }    = require('node-symfony-console');

// PHP Class \Symfony\Component\Console\Helper\HelperSet
const HelperSet      = console.helper.HelperSet;     

// PHP Class \Symfony\Component\Console\Tester\CommandTester
const CommmandTester = console.tester.CommandTester; 

Hello World Example

Create a command

const { Command, InputArgument, ConfirmationQuestion } = require('node-symfony-console');

class GreetCommand extends Command {
  static get defaultName() {
    return 'foo:helloworld';
  }

  configure() {
    this
      // the short description shown while running "node bin/console list"
      .setDescription(`Print hello world`)
      // the full command description shown when running the command with
      // the "--help" option
      .setHelp('Print hello world, pass argument')
      .addArgument('name', InputArgument.REQUIRED, 'Who do you want to greet?')
      .addArgument('last_name', InputArgument.OPTIONAL, 'Your last name?');
  }

  async execute(input, output) {
  
      // Do something asynchronous like an API call or 
      // asking a question
      const q = new ConfirmationQuestion('<info>Are you leaving</info> (y/n): ');
      const leaving = await this.getHelper('question').ask( input, output, q);
      
      let greet = `${leaving?'Good Bye':'Hi'} ${input.getArgument('name')}`;
      const lastName = input.getArgument('last_name');
      
      if (lastName) {
        greet = `${greet} ${lastName}`;
      }
  
      output.writeln(`${greet}!`);
      return 1;
    }
}

module.exports = GreetCommand;

Create a application and include the command. This can be any file IE: bin/console.js

const {Application} = require('node-symfony-console');
const GreetCommand = require('./GreetCommand');

const application = new Application();
application.add(new GreetCommand());
application.run();

Run the command:

$ node bin/console.js
Console Tool

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help            Displays help for a command
  list            Lists commands
 foo
  foo:helloworld  Print hello world

$ node bin/console.js foo:helloworld Jeroen
Are you leaving (y/n): n
Hi jeroen!

$ node bin/console.js foo:helloworld Jeroen "de Lau"
Are you leaving (y/n): y
Good Bye Jeroen de Lau!

Known omissions and limitations

Porting changes:

  • Interfaces have been removed
  • Abstract classes have been converted to regular classes
  • PhP associative arrays do not always translate well to JS {} or []
  • Itterable support is spotty, WIP
  • Node requires not separate multibyte support for most situations, in general these functions were stripped
  • Terminal Capability detection was quite specific to PhP, tested on Mac, on other terminals millage may vary
  • Exception classes have been renamed to Error
  • Not all Exceptions types have been ported, instead using generic throw Error
  • Verbosity constants can be found in Output const {Output} = require('node-symfony-console')

Omissions: Following have not (yet) been ported

Contributing

Contributions are welcome! Most of the tests have been written in JS.

Resources

Credits

This library is converted from Symfony's Console Component: Find sources and license at https://github.com/symfony/component

This library uses code from the spinner library Find sources and license at https://github.com/alecrabbit/php-console-spinner

Keywords

console

FAQs

Package last updated on 29 May 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts