Observed since 20 Oct, 22:16 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
@0x-jerry/silver
An library that help me to create CLI program quickly.
Let writing CLI like writing a document.
pnpm i @0x-jerry/silver
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);
}
Silver uses a template literal to define your CLI. Here's the full syntax:
v1.0.0 @autocomplete @manual
| Token | Description |
|---|---|
v1.0.0 | Version declaration (must be at the top) |
@autocomplete | Enables complete subcommand for shell autocomplete |
@manual | Prevents auto-execution; call cli.execute(argv) manually |
commandName/alias [param] <reqParam> [...restParam] #stopEarly, Description text. ${actionFn}
| Part | Example | Description |
|---|---|---|
| Name | install | Command name (alphanumeric + _) |
| Alias | install/i | Shorthand alias via / |
| Optional param | [name] | Optional positional parameter |
| Required param | <name> | Required positional parameter |
| Rest param | [...items] | Collects remaining arguments as array |
| Flag | #stopEarly | Command flag (see below) |
| Description | , Install packages. | Text after comma is the description |
| Action | ${myFn} | Function to call when command is executed |
Command flags:
| Flag | Description |
|---|---|
#stopEarly | Stop parsing options after the first non-option argument |
-s --string @type, Description.
| Part | Example | Description |
|---|---|---|
| Short name | -s | Single-letter alias |
| Long name | --string | Full option name |
| Type | @string | Option type (see below) |
| Description | , Description. | Text after comma |
[@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.
Set @autocomplete at the program level to enable shell completion.
| Shell | Command |
|---|---|
| zsh | source <(your-cli complete zsh) |
| PowerShell | Invoke-Expression (your-cli complete powershell | Out-String) |
For persistent setup, add the output to your shell's config file (.zshrc or PowerShell profile).
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" },
]);
| Type | Description |
|---|---|
_files | File path completion (shell-native) |
_dirs | Directory path completion (shell-native) |
These can be combined with custom types: @custom|_files.
silver (default export)function silver(template: TemplateStringsArray, ...tokens: any[]): Silver;
Parses the template and optionally auto-executes with process.argv.
Silver class| Method | Description |
|---|---|
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 |
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";
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
minimistEnvironment{
"local_name": "minimist",
"alias": false,
"peer_metadata": null
} | ^1.2.8 | runtime |
lodash-esEnvironment{
"local_name": "lodash-es",
"alias": false,
"peer_metadata": null
} | ^4.17.21 | runtime |
@0x-jerry/utilsEnvironment{
"local_name": "@0x-jerry/utils",
"alias": false,
"peer_metadata": null
} | ^2.0.0 | runtime |
tsupEnvironment{
"local_name": "tsup",
"alias": false,
"peer_metadata": null
} | ^7.2.0 | development |
vitestEnvironment{
"local_name": "vitest",
"alias": false,
"peer_metadata": null
} | ^0.34.4 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ^5.2.2 | development |
@types/nodeEnvironment{
"local_name": "@types/node",
"alias": false,
"peer_metadata": null
} | ^20.6.2 | development |
@types/minimistEnvironment{
"local_name": "@types/minimist",
"alias": false,
"peer_metadata": null
} | ^1.2.2 | development |
@types/lodash-esEnvironment{
"local_name": "@types/lodash-es",
"alias": false,
"peer_metadata": null
} | ^4.17.9 | development |
@0x-jerry/x-releaseEnvironment{
"local_name": "@0x-jerry/x-release",
"alias": false,
"peer_metadata": null
} | ^0.3.9 | development |
@vitest/coverage-v8Environment{
"local_name": "@vitest/coverage-v8",
"alias": false,
"peer_metadata": null
} | ^0.34.4 | development |
Source distribution
{
"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
}Observed since 20 Oct, 22:16 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:91b07966181ebcc408f40d2abc6cb93b59123e7535deeed826ab57797331104e