Catalog npm
Back to packageRELEASE DETAILS

0.1.4

npm

@0x-jerry/silver

An library that help me to create CLI program quickly.

Published20 Sept 2023
Direct dependencies11
Transitive dependenciesNot calculated

README

Current package documentation

Silver

Let writing CLI like writing a document.

Install

pnpm i @0x-jerry/silver

Quick Start

import { silver } from "@0x-jerry/silver";

const cli = silver`
v1.0.0 @autocomplete

my-cli [file], A CLI that writes like a document. ${mainAction}

-t --test @type:defaultValue, Test autocomplete.
-o --output @string, Output file path.

up/upgrade <dir> [...extra] #stopEarly, Upgrade something. ${upgradeAction}

  -f --force @bool, Force upgrade.
`;

// Register custom completion types
cli.type("type", () => ["value1", "value2", "value3"]);

function mainAction([file], options) {
  console.log("file:", file, "options:", options);
}

function upgradeAction([dir, ...extra], options) {
  console.log("dir:", dir, "extra:", extra, "options:", options);
}

Syntax Guide

Silver uses a template literal to define your CLI. Here's the full syntax:

Program-level

v1.0.0 @autocomplete @manual
TokenDescription
v1.0.0Version declaration (must be at the top)
@autocompleteEnables complete subcommand for shell autocomplete
@manualPrevents auto-execution; call cli.execute(argv) manually

Command Definition

commandName/alias [param] <reqParam> [...restParam] #stopEarly, Description text. ${actionFn}
PartExampleDescription
NameinstallCommand name (alphanumeric + _)
Aliasinstall/iShorthand alias via /
Optional param[name]Optional positional parameter
Required param<name>Required positional parameter
Rest param[...items]Collects remaining arguments as array
Flag#stopEarlyCommand flag (see below)
Description, Install packages.Text after comma is the description
Action${myFn}Function to call when command is executed

Command flags:

FlagDescription
#stopEarlyStop parsing options after the first non-option argument

Options

-s --string @type, Description.
PartExampleDescription
Short name-sSingle-letter alias
Long name--stringFull option name
Type@stringOption type (see below)
Description, Description.Text after comma

Parameter Types

[@type:name]     // typed optional parameter
<@type:name>     // typed required parameter
[...@type|_files:name]  // typed rest param with file completion

Types are registered via cli.type(name, getValues). Built-in types include bool, boolean, number, string. Special completion types _files and _dirs enable shell-native file/directory completion.

Autocomplete

Set @autocomplete at the program level to enable shell completion.

Shell Support

ShellCommand
zshsource <(your-cli complete zsh)
PowerShellInvoke-Expression (your-cli complete powershell | Out-String)

For persistent setup, add the output to your shell's config file (.zshrc or PowerShell profile).

Custom Completion Types

cli.type("env", () => ["development", "production", "staging"]);

// Async types
cli.type("remote-branch", async () => {
  const res = await fetch("https://api.example.com/branches");
  return res.json();
});

// With descriptions (displayed in some shells)
cli.type("format", () => [
  { label: "json", desc: "JSON output" },
  { label: "yaml", desc: "YAML output" },
]);

Built-in Completion Types

TypeDescription
_filesFile path completion (shell-native)
_dirsDirectory path completion (shell-native)

These can be combined with custom types: @custom|_files.

API

silver (default export)

function silver(template: TemplateStringsArray, ...tokens: any[]): Silver;

Parses the template and optionally auto-executes with process.argv.

Silver class

MethodDescription
type(name, getValues)Register a completion type (sync or async)
execute(argv)Execute the CLI with the given arguments
parse(raw, ...tokens)Parse a template literal programmatically

Exported Types

import {
  silver,
  BuiltinType, // enum: File = '_files', Dir = '_dirs'
  type CompletionGroup, // { name: string, values: string[] }
  type CompletionOutput, // { groups: CompletionGroup[] }
  type Command,
  type CmdOption,
  type CmdParameter,
  type Program,
  type CmdAction,
  type ActionParsedArgs,
  ProgramFlag,
  CommandFlag,
} from "@0x-jerry/silver";

Thanks

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 11

Native requirements
11 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
minimist
Environment
{
  "local_name": "minimist",
  "alias": false,
  "peer_metadata": null
}
^1.2.8runtime
lodash-es
Environment
{
  "local_name": "lodash-es",
  "alias": false,
  "peer_metadata": null
}
^4.17.21runtime
@0x-jerry/utils
Environment
{
  "local_name": "@0x-jerry/utils",
  "alias": false,
  "peer_metadata": null
}
^2.0.0runtime
tsup
Environment
{
  "local_name": "tsup",
  "alias": false,
  "peer_metadata": null
}
^7.2.0development
vitest
Environment
{
  "local_name": "vitest",
  "alias": false,
  "peer_metadata": null
}
^0.34.4development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
^5.2.2development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^20.6.2development
@types/minimist
Environment
{
  "local_name": "@types/minimist",
  "alias": false,
  "peer_metadata": null
}
^1.2.2development
@types/lodash-es
Environment
{
  "local_name": "@types/lodash-es",
  "alias": false,
  "peer_metadata": null
}
^4.17.9development
@0x-jerry/x-release
Environment
{
  "local_name": "@0x-jerry/x-release",
  "alias": false,
  "peer_metadata": null
}
^0.3.9development
@vitest/coverage-v8
Environment
{
  "local_name": "@vitest/coverage-v8",
  "alias": false,
  "peer_metadata": null
}
^0.34.4development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "45a1315683dd06a42bfcbb5c66a82d5742575fa9",
  "tarball": "https://registry.npmjs.org/@0x-jerry/silver/-/silver-0.1.4.tgz",
  "fileCount": 6,
  "integrity": "sha512-fQ/SjiJZOr82lNG9IeHuS2/pj+pJWO7LDO8r9bz68ZGmCIS5ikhl0F9sNd6Djr7K+Ei/hW5VvXvX9rxnwLiUgg==",
  "signatures": [
    {
      "sig": "MEUCIQCmsKbaMiYh3cBFucPg/W6AlEy05MhBQKGpgWLSaXKv8AIgDadnNuxkfLf0RtKYsNd2AyIYTD9ZHSDXQjGIaTPCFO4=",
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"
    }
  ],
  "unpackedSize": 21880
}

Repository

PENDING
0x-jerry/silver

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:16 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:91b07966181ebcc408f40d2abc6cb93b59123e7535deeed826ab57797331104e

Other collected versions

2.1.017 Jul2.0.116 Jul1.2.410 Sept1.2.39 Sept1.2.29 Sept1.2.19 SeptView all collected versions →