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’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m 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’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve 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–ish.

Open Software & Tools

This site wouldn’t 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 – Pkg Stats / Ryan Hefner

openapi-commander

v3.2.0

Published

Generate a commander.js CLI tool from an OpenAPI definition.

Downloads

14

Readme

OpenAPI Commander

Overview

Generate a Node.js command line tool from an OpenAPI definition using the commander library.

It can be used as a starter for writing command line tools that talk to APIs, or as an alternative to using curl to work with APIs.

Features

  • Generate clean code from your spec.
  • Supports Swagger 2, OpenAPI 3.0 and 3.1.
  • Show examples of request bodies, using examples from the spec or generated with openapi-sampler.
  • Verbose mode to see response headers.
  • Print a curl command of the request.

Setup

  1. Create an npm project with npm init or use an existing one. Your Node.js version must be 16+

  2. Install dependencies

npm install commander@9
npm install --save-dev openapi-commander
  1. Generate the CLI code
npx openapi-commander generate <path or URL to spec> <output file>

e.g.

npx openapi-commander generate https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.yaml petstore.js
  1. Run
node petstore.js ...

Examples

Subcommands

The commands are grouped by their first tag in the OpenAPI spec (the same logic that Swagger UI uses). Operations

~/petstore$ node petstore.js

Usage: petstore [options] [command]

Options:
  -p, --print <mode>     Print the HTTP request instead of sending it. (choices: "curl", "plain")
  -s, --server <server>  Server to use
  -a, --auth <auth>      Authorization header to send
  -h, --help             display help for command

Commands:
  pet                    Everything about your Pets
  store
  user                   Operations about user
  help [command]         display help for command
~/petstore$ node petstore.js pet
Usage: petstore pet [options] [command]

Everything about your Pets

Options:
  -h, --help                           display help for command

Commands:
  updatePet [options] <body>           Update an existing pet
  addPet [options] <body>              Add a new pet to the store
  findPetsByStatus [options]           Finds Pets by status
  findPetsByTags [options]             *DEPRECATED* Finds Pets by tags
  getPetById <petId>                   Find pet by ID
  updatePetWithForm [options] <petId>  Updates a pet in the store with form data
  deletePet [options] <petId>          Deletes a pet
  uploadFile [options] <petId>         uploads an image
  help [command]                       display help for command

Basic GET example

~/petstore$ node petstore.js pet getPetById 1
Status: 200
{
  "id": 1,
  "category": {
    "id": 1,
    "name": "Hola"
  },
  "name": "Perrito",
  "photoUrls": [
    "/tmp/inflector995596007222725944.tmp"
  ],
  "tags": [
    {
      "id": 1,
      "name": "Bizcocho"
    }
  ],
  "status": "available"
}

You can also add the -v flag to show response headers.

Global options

Custom server

~/petstore$ node petstore.js -s https://mypetstore.example pet getPetById 1

Alternatively you can override it by setting the environment variable {COMMANDNAME}_SERVER, e.g. PETSTORE_SERVER.

Set Authorization header

~/petstore$ node petstore.js -a 'Bearer mytoken' getPetById 1

Alternatively you can override it by setting the environment variable {COMMANDNAME}_AUTH, e.g. PETSTORE_AUTH.

Print request without sending

~/petstore$ node petstore.js pet -a 'Bearer mytoken' -s https://mypetstore.example getPetById 1 --print plain
GET https://mypetstore.example/pet/1
Authorization: Bearer mytoken
Accept: application/json

Print a curl command of the request

~/petstore$ node petstore.js pet -a 'Bearer mytoken' -s https://mypetstore.example getPetById 1 --print curl
curl -X GET -H 'Authorization: Bearer mytoken' -H 'Accept: application/json' 'https://mypetstore.example/pet/1'

Print example request bodies

~/petstore$ node petstore.js pet updatePet examples
Example for application/json:
{
  "id": 10,
  "name": "doggie",
  "category": {
    "id": 1,
    "name": "Dogs"
  },
  "photoUrls": [
    "string"
  ],
  "tags": [
    {
      "id": 0,
      "name": "string"
    }
  ],
  "status": "available"
}

Build standalone binaries

To build multi-platform standalone binaries platform I recommend vercel/pkg.

A very incomplete TODO list...

The top priority is to beef up the test suite.

  • Syntax highlighting of examples
  • Implement different security/auth types.
  • Auto-detect request body type from file.
  • Show JSON & YAML examples with comments for field descriptions. -> Strip comments from JSON when passing in
  • Strip html/markdown from description
  • More serialization options https://swagger.io/docs/specification/serialization/
  • application/x-www-form-urlencoded content types.
  • Server templating.
  • Autocomplete.

Contributing

This is a hobby side project so I have limited time to work on issues but I will do my best to discuss issues, review PRs and keep the project maintained. Please open an issue for discussion before opening any significant PRs to avoid any disappointment about project scope.