Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

omnicli

Package Overview
Dependencies
Maintainers
1
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

omnicli

CLI framework designed for use in the browser

  • 0.2.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
4
Maintainers
1
Weekly downloads
 
Created
Source

OmniCLI

A command line framework designed to work within the omnibox API.

OmniCLI is being used in the Sourcegraph extension(FireFox, Chrome)! With it installed, type src<space> and then begin typing for search suggestions.

Features

Commands

OmniCLI parses an input and maps it to a given command. Commands can have aliases and sub commands.

Suggestions

OmniCLI will build a list of suggestions for you based on the available commands and return these as an suggestions menu. You can also provide suggestions for commands when a command is matched with an input before it is submitted.

Vim-like Suggestions Menu Navigation

The omnibox API only displays the first 6 items passed to it's suggest function. Because of this, we need a way to simulate scrolling through a list of suggestions.

See more info on how to use vim mode here.

Getting Started

yarn add omnicli
# or
npm i omnicli

Usage

Basic usage

import {createCli, Command} from 'omnicli';

function helloAction(args: string[]): void {
  console.log(`Hello, ${args.join(' ')}!`);
}

const helloCommand: Command = {
  name: 'hello',
  alias: ['greet'],
  description: 'Say hello',
  action: helloAction,
};

const cli = createCli({
  commands: [helloCommand],
});

cli.onInputEntered('hello beautiful world');
// => 'Hello, beautiful world!' will be logged
cli.onInputEntered('greet beautiful world');
// => 'Hello, beautiful world!' will be logged

With omnibox

browser.omnibox.onInputChanged.addListener((text, suggest) =>
  cli.onInputChanged(text).then(suggestions => suggest(suggestions)),
);

browser.omnibox.onInputEntered.addListener(cli.onInputEntered);

Suggestions

// ...

function getHelloSuggestions(args: string[]) {
  return ['Alice', 'Bob'];
}

const helloCommand = {
  name: 'hello',
  description: 'Say hello',
  action: helloAction,
  getSuggestions: getHelloSuggestions,
};

cli
  .onInputChanged('hello beautiful world')
  .then(suggestions => console.log(suggestions));

Scrolling in the list of suggestions.

function getHelloSuggestions(args: string[]) {
  return [
    'Suggestion 0',
    'Suggestion 1',
    'Suggestion 2',
    'Suggestion 3',
    'Suggestion 4',
    'Suggestion 5',
    'Suggestion 6',
    'Suggestion 7',
    'Suggestion 8',
    'Suggestion 9',
  ];
}

cli.onInputChanged('hello[jjjk]').then(suggestions => console.log(suggestions));

// 'jjj' down 3, 'k' up 1
// 'Suggestion 2' will be first

Sub commands

function helloAction(args: string[]) {
  console.log(`Hello, ${args.join(' ')}!`);
}

const helloCommand = {
  name: 'hello',
  description: 'Say hello',
  action: helloAction,
};

function sayAction(args: string[]) {
  console.log(`I say '${args.join(' ')}'!`);
}

const sayCommand = {
  name: 'say',
  description: 'Say something',
  action: sayAction,
  commands: [helloCommand],
};

const cli = createCli({
  commands: [helloCommand],
});

cli.onInputEntered('say Oi');
// => 'I say 'Oi'!'

cli.onInputEntered('say hello beautiful world');
// => 'Hello, beautiful world!'

FAQs

Package last updated on 22 Oct 2018

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc