Slash Command Parser

A generic parser for slash command text input. Pulls inspiration from Slack and Discord slash commands.

Usage

Basic Usage:

import parse from 'https://deno.land/x/slash_command_parser/mod.ts'

parse('/todos add name: My Todo Name')
{
  text: 'add name: My Todo Name',
  command: 'todos',
  options: { name: 'My Todo Name' },
  subCommands: ['add'],
}

Pass in a template to parse options:

import parse, {
  OptionDefinition,
  OptionType,
} from 'https://deno.land/x/slash_command_parser/mod.ts'

const template: OptionDefinition[] = [
  { name: 'item', type: OptionType.string },
  { name: 'howmany', type: OptionType.integer },
  { name: 'complete', type: OptionType.boolean },
]

parse('/todos add item: lettuce howmany: 2 complete: false', template)
{
  text: 'add item: lettuce howmany: 2 complete: false',
  command: 'todos',
  options: { item: 'lettuce', howmany: 2, complete: false },
  subCommands: ['add'],
}

If you want greater control over parsing or error handling, you can call each step individually:

import {
  parseCommand,
  parseOptions,
  parseSubCommands,
} from 'https://deno.land/x/slash_command_parser/mod.ts'

const content = 'add item: lettuce howmany: 2 complete: false'

// Just parsing command + text can give you a "Slack"-style slashcommand
const { command, text } = parseCommand(content)

// Expand to support 4 sub-commands instead of 2
const { subCommands, remaining } = parseSubCommands(text, 4)
const options = parseOptions(remaining, template)

console.log({ command, text, options, subCommands })

See more usage examples in the test file.