npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I鈥檝e always been into building performant and accessible sites, but lately I鈥檝e been taking it extremely seriously. So much so that I鈥檝e been building a tool to help me optimize and monitor the sites that I build to make sure that I鈥檓 making an attempt to offer the best experience to those who visit them. If you鈥檙e into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 馃憢, I鈥檓 Ryan Hefner聽 and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you鈥檙e interested in other things I鈥檓 working on, follow me on Twitter or check out the open source projects I鈥檝e been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon鈥搃sh.

Open Software & Tools

This site wouldn鈥檛 be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 馃檹

漏 2024 鈥撀燩kg Stats / Ryan Hefner

cmd-args-parser

v3.0.4

Published

Command line arguments parser like Angular CLI 馃槂

Downloads

31

Readme

CMD ARGS PARSER

Cmd args parser es una librer铆a para parsear los argumentos de un comando con una API sencilla, pero robusta con la capacidad de reconocer argumentos y flags que al igual que los argumentos, tambien seran extensibles.

Motivaci贸n

Este proyecto surgio a partir de una necesidad de una librer铆a que me permitiera procesar los argumentos que ingresaba a traves de la linea de comandos y mi constante motivacion por tratar de emular el comportamiento de algunas de las librer铆as mas famosas del area.

cmd-args-parser nos permitira obtener los argumentos que ingresamos en la linea de comandos y procesarlos para que puedan ser utilizados de forma estructurada, ademas de ser facilmente extendible y muy similar al CLI de Angular ya que honestamente he construido esta aplicacion en base a esta libreria, pero algo mas minimalista y con una API mas sencilla.

Instalacion

La instalacion es muy sencilla, solo debe instalar como cualquier otra dependencia de npm y luego debera importar la libreria en su proyecto, al no contar con dependencias de terceros, la instalaci贸n sera muy rapida.

# usando npm
npm install cmd-args-parser
# usando yarn
yarn add cmd-args-parser

Uso

Para hacer familiar el uso de la libreria usare un ejemplo basado en el CLI de Angular.

Vainilla JS

import Parser from 'cmd-args-parser'

const directives = [
  {
    name: 'new',
    alias: 'n',
    input: true,
    flags: ['routing', 'styles$'],
  },
  {
    name: 'generate',
    alias: 'g',
    children: [
      {
        name: 'component',
        alias: 'c',
        input: true,
        flags: ['inline'],
      },
    ],
  },
]
const result = Parser(directives)
console.log(result)

Uso con TypeScript

import Parser, { Directive } from 'cmd-args-parser'


const directives: Directive[] = [
  {
    name: 'new',
    alias: 'n',
    input: true,
    flags: ['routing', 'styles$'],
  },
  {
    name: 'generate',
    alias: 'g',
    children: [
      {
        name: 'component',
        alias: 'c',
        input: true,
        flags: ['inline'],
      },
    ],
  },
]

interface Args {
  new?: {
    value: string
    flags: {
      routing: boolean
      styles: boolean
    }
  }
  generate?: {
    component?: {
      value: string
      flags: {
        inline: boolean
      }
    }
  }
}

const result = Parser<Args>(directives)
console.log(result.new.value)

uso desde la terminal

$ node index.js new myApp --routing --styles scss
# salida esperada:
{ new:{ value: 'myApp', flags: { routing:true, styles: 'scss' } } }

Uso fuera de la terminal

// Uso del context
const customContext = 'new myApp --routing --styles'

const result = Parser(directives, customContext)

API

Directive

| Argumento | Description | Tipo | | ------------------ | --------------------------------- | --------------------- | | name | Nombre del argumento | string | | alias | Alias del argumento | string | | input | Si el argumento espera un input | boolean | | children | Nuevo arreglo de Directive[] | Directive[] | | flags | Lista de atributos personalizados | string[] |

name

Name es el nombre de la propiedad que se usara para obtener el valor del argumento y nombre de la propiedad que se usara para obtener el resto de los atributos.

| Recomendaciones | Ejemplo | | --------------------------------------- | ---------------------- | | Minusculas y sin guiones de preferencia | { name: 'generate' } |

alias

Alias es el identificador mas corto que se usara para obtener el valor del argumento de igual manera que el nombre, pero con una diferencia que el alias no debe ser una palabra completa, sino una palabra corta. Eje: g c my-component => g:generate, c:component, my-component:value

| Recomendaciones | Ejemplo | | ---------------------------------------------------------------------- | ---------------- | | Minusculas y sin guiones de preferencia, se recomienda de 1 a 3 letras | { alias: 'g' } |

input

Propiedade que verifica si el argumeto espera una entrada de datos.

Los espacios no estan soportados ya que se consideran una nueva instruccion.

| Recomendaciones | Ejemplo | | ------------------------------------------------------ | ----------------- | | Si no recibe valores puede omitir agregar la propiedad | { input: true } |

children

Arreglo de Directive[] que contiene las propiedades de los argumentos que se esperan.

| Recomendaciones | Ejemplo | | ------------------------------------------------------ | --------------------- | | Mismas recomendaciones con cada una de las propiedades | { children: [...] } |

flags

Esta propiedad es un poco peculiar ya que si agregamos el simbolo $ al final de una propiedad, esta sera considerada como un flag con valor, esto quiere decir que ademas de verificar que este exista, tambien podra recibir un valor.

En caso de no tener el sufijo $ se considerara una propiedad que solo verificara si existe o no y solo recibira un valor booleano.

| Recomeendaciones | Ejemplo | Tipo | | --------------------------------------- | -------------------------- | ------------- | | Minusculas y sin guiones de preferencia | { flags: [ 'inline' ] } | Regular | | Minusculas y sin guiones de preferencia | { flags: [ 'styles$' ] } | Con propiedad |

Parser

| Argumento | Description | Tipo | | --------------------------- | ---------------------------------------------- | --------------------- | | directives | Nuevo arreglo de Directive[] | Directive[] | | context | Cadena de texto, por default es process.argv | string |

Limitaciones

  • El nivel maximo de anidaci贸n de las directivas es de 2锔忊儯.

    • Se espera que en versiones posteriores se implemente una mejora.
  • No se permite el uso de espacios en ninguna de las propiedades.
  • El simbolo $ es de uso reservado para flags.
  • El uso de los alias debe ser unicos, decir, no se puede combinar un alias con un name.
    • Ejemplo: g componentgenerate c
    • La forma correcta es g c o generate component