unified engine to create a command line interface from a unified processor.
- What is this?
- When should I use this?
- Install
- Use
- API
- CLI
- Files
--color--config--ext <extensions>--file-path <path>--frail--help--ignore--ignore-path <path>--ignore-path-resolve-from cwd|dir--ignore-pattern <globs>--inspect--output [path]--quiet--rc-path <path>--report <reporter>--setting <settings>--silent--silently-ignore--stdout--tree--tree-in--tree-out--use <plugin>--verbose--version--watch
- Diagnostics
- Debugging
- Types
- Compatibility
- Security
- Contribute
- License
This package wraps unified-engine so that it can be used
to create a command line interface.
Itโs what you use underneath when you use remark-cli.
You can use this to let users process multiple files from the command line, letting them configure from the file system.
This package is ESM only. In Node.js (version 16+), install with npm:
npm install unified-argsThe following example creates a CLI for remark, which will search for files
in folders with a markdown extension, allows configuration from
.remarkrc and package.json files, ignoring files from
.remarkignore files, and more.
Say our module example.js looks as follows:
import {remark} from 'remark'
import {args} from 'unified-args'
args({
description:
'Command line interface to inspect and change markdown files with remark',
extensions: [
'md',
'markdown',
'mdown',
'mkdn',
'mkd',
'mdwn',
'mkdown',
'ron'
],
ignoreName: '.remarkignore',
name: 'remark',
packageField: 'remarkConfig',
pluginPrefix: 'remark',
processor: remark,
rcName: '.remarkrc',
version: '11.0.0'
})โฆnow running node example.js --help yields:
Usage: remark [options] [path | glob ...]
Command line interface to inspect and change markdown files with remark
Options:
--[no-]color specify color in report (on by default)
--[no-]config search for configuration files (on by default)
-e --ext <extensions> specify extensions
โฆThis package exports the identifier args.
There is no default export.
Start the CLI.
๐ Note: this takes over the entire process. It parses
process.argv, exits when its done, etc.
options(Options, required) โ configuration
Nothing (undefined).
Configuration (TypeScript type).
description(string, required) โ description of executableextensions(Array<string>, required) โ default file extensions to include (engine:options.extensions)ignoreName(string, required) โ name of ignore files to load (engine:options.ignoreName)name(string, required) โ name of executablepackageField(string, required) โ field where configuration can be found inpackage.jsons (engine:options.packageField)pluginPrefix(string, required) โ prefix to use when searching for plugins (engine:options.pluginPrefix)processor(Processor, required) โ processor to use (engine:options.processor)rcName(string, required) โ name of configuration files to load (engine:options.rcName)version(string, required) โ version of executable
CLIs created with unified-args, such as the example above, have an
interface similar to the below:
Usage: remark [options] [path | glob ...]
Command line interface to inspect and change markdown files with remark
Options:
--[no-]color specify color in report (on by default)
--[no-]config search for configuration files (on by default)
-e --ext <extensions> specify extensions
--file-path <path> specify path to process as
-f --frail exit with 1 on warnings
-h --help output usage information
--[no-]ignore search for ignore files (on by default)
-i --ignore-path <path> specify ignore file
--ignore-path-resolve-from cwd|dir resolve patterns in `ignore-path` from its directory or cwd
--ignore-pattern <globs> specify ignore patterns
--inspect output formatted syntax tree
-o --output [path] specify output location
-q --quiet output only warnings and errors
-r --rc-path <path> specify configuration file
--report <reporter> specify reporter
-s --setting <settings> specify settings
-S --silent output only errors
--silently-ignore do not fail when given ignored files
--[no-]stdout specify writing to stdout (on by default)
-t --tree specify input and output as syntax tree
--tree-in specify input as syntax tree
--tree-out output syntax tree
-u --use <plugins> use plugins
--verbose report extra info for messages
-v --version output version number
-w --watch watch for changes and reprocess
Examples:
# Process `input.md`
$ remark input.md -o output.md
# Pipe
$ remark < input.md > output.md
# Rewrite all applicable files
$ remark . -oAll non-options passed to the cli are seen as input and can be:
- paths (
readme.txt) and globs (*.txt) pointing to files to load - paths (
test) and globs (fixtures/{in,out}/) pointing to folders, which are searched for files with known extensions which are not ignored by patterns in ignore files. The default behavior is to exclude files innode_modules/unless explicitly given
You can force things to be seen as input by using --:
cli -- globs/* and/files- default: none
- engine:
options.files
cli --no-color input.txtWhether to output ANSI color codes in the report.
- default: whether the terminal supports color
- engine:
options.color
๐ Note: This option may not work depending on the reporter given in
--report.
cli --no-config input.txtWhether to load configuration files.
Searches for files with the configured rcName: $rcName and
$rcName.json (JSON), $rcName.yml and $rcName.yaml (YAML), $rcName.js
(JavaScript), $rcName.cjs (CommonJS), and $rcName.mjs (ESM); and looks for
the configured packageField in package.json files.
- default: on
- engine:
options.detectConfig
cli --ext html .
cli --ext htm --ext html .
cli --ext htm,html .Specify one or more extensions to include when searching for files.
- default: configured
extensions - alias:
-e - engine:
options.extensions
cli --file-path input.txt < input.txt > doc/output.txtFile path to process the given file on stdin(4) as, if any.
- default: none
- engine:
options.filePath
cli --frail input.txtExit with a status code of 1 if warnings or errors occur.
The default behavior is to exit with 1 on errors.
- default: off
- alias:
-f - engine:
options.frail
cli --helpOutput short usage information.
- default: off
- alias:
-h
cli --no-ignore .Whether to load ignore files.
Searches for files named $ignoreName.
- default: on
- engine:
options.detectIgnore
cli --ignore-path .gitignore .File path to an ignore file to load, regardless of
--ignore.
- default: none
- alias:
-i - engine:
options.ignorePath
cli --ignore-path node_modules/my-config/my-ignore --ignore-path-resolve-from cwd .Resolve patterns in the ignore file from its directory (dir, default) or the
current working directory (cwd).
- default:
'dir' - engine:
options.ignorePathResolveFrom
cli --ignore-pattern "docs/*.md" .Additional patterns to use to ignore files.
- default: none
- engine:
options.ignorePatterns
cli --inspect < input.txtOutput the transformed syntax tree, formatted with
unist-util-inspect.
This does not run the compilation phase.
- default: off
- engine:
options.inspect
cli --output -- .
cli --output doc .
cli --output doc/output.text input.txtWhether to write successfully processed files, and where to. Can be set from configuration files.
- if output is not given, files are not written to the file system
- otherwise, if
pathis not given, files are overwritten when successful - otherwise, if
pathpoints to a folder, files are written there - otherwise, if one file is processed, the file is written to
path
๐ Note: intermediate folders are not created.
- default: off
- alias:
-o - engine:
options.output
cli --quiet input.txtIgnore files without any messages in the report. The default behavior is to show a success message.
- default: off
- alias:
-q - engine:
options.quiet
๐ Note: this option may not work depending on the reporter given in
--report.
cli --rc-path config.json .File path to a configuration file to load, regardless of
--config.
- default: none
- alias:
-r - engine:
options.rcPath
cli --report ./reporter.js input.txt
cli --report vfile-reporter-json input.txt
cli --report json input.txt
cli --report json=pretty:2 input.txt
cli --report 'json=pretty:"\t"' input.txt
# Only last one is used:
cli --report pretty --report json input.txtReporter to load by its name or path, optionally with options, and use to report metadata about every processed file.
To pass options, follow the name by an equals sign (=) and settings, which
have the same in syntax as --setting <settings>.
The prefix vfile-reporter- can be omitted.
Prefixed reporters are preferred over modules without prefix.
If multiple reporters are given, the last one is used.
- default: none, which uses
vfile-reporter - engine:
options.reporterandoptions.reporterOptions
๐ Note: the
quiet,silent, andcoloroptions may not work with the used reporter. If they are given, they are preferred over the same properties in reporter settings.
cli --setting alpha:true input.txt
cli --setting bravo:true --setting '"charlie": "delta"' input.txt
cli --setting echo-foxtrot:-2 input.txt
cli --setting 'golf: false, hotel-india: ["juliet", 1]' input.txtConfiguration for the parser and compiler of the processor. Can be set from configuration files.
The given settings are JSON5, with one exception: surrounding braces must
not be used.
Instead, use JSON syntax without braces, such as
"foo": 1, "bar": "baz".
- default: none
- alias:
-s - engine:
options.settings
cli --silent input.txtShow only fatal errors in the report.
Turns --quiet on.
- default: off
- alias:
-S - engine:
options.silent
๐ Note: this option may not work depending on the reporter given in
--report.
cli --silently-ignore **/*.mdSkip given files which are ignored by ignore files, instead of warning about them.
- default: off
- engine:
options.silentlyIgnore
cli --no-stdout input.txtWhether to write a processed file to stdout(4).
- default: off if
--outputor--watchare given, or if multiple files could be processed - engine:
options.out
cli --tree < input.json > output.jsonTreat input as a syntax tree in JSON and output the transformed syntax tree. This runs neither the parsing nor the compilation phase.
- default: off
- alias:
-t - engine:
options.tree
cli --tree-in < input.json > input.txtTreat input as a syntax tree in JSON. This does not run the parsing phase.
- default: same as
--tree - engine:
options.treeIn
cli --tree-out < input.txt > output.jsonOutput the transformed syntax tree. This does not run the compilation phase.
- default: same as
--tree - engine:
options.treeOut
cli --use remark-man input.txt
cli --use man input.txt
cli --use 'toc=max-depth:3' input.txt
cli --use ./plugin.js input.txtPlugin to load by its name or path, optionally with options, and use on every processed file. Can be set from configuration files.
To pass options, follow the plugin by an equals sign (=) and settings, which
have the same in syntax as --setting <settings>.
Plugins prefixed with the configured pluginPrefix are
preferred over modules without prefix.
- default: none
- alias:
-u - engine:
options.plugins
cli --verbose input.txtPrint more info for messages.
- default: off
- engine:
options.verbose
๐ Note: this option may not work depending on the reporter given in
--report.
cli --versionOutput version number.
- default: off
- alias:
-v
cli -qwo .Yields:
Watching... (press CTRL+C to exit)
Note: Ignoring `--output` until exit.Process as normal, then watch found files and reprocess when they change.
The watch is stopped when SIGINT is received (usually done by pressing
CTRL-C).
If --output is given without path, it is not honored, to
prevent an infinite loop.
On operating systems other than Windows, when the watch closes, a final process
runs including --output.
- default: off
- alias:
-w
CLIs created with unified-args exit with:
1on fatal errors1on warnings in--frailmode,0on warnings otherwise0on success
CLIs can be debugged by setting the DEBUG environment variable to
*, such as DEBUG="*" cli example.txt.
This package is fully typed with TypeScript.
It export the additional type Options.
Projects maintained by the unified collective are compatible with maintained versions of Node.js.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line, unified-engine@^11,
compatible with Node.js 16.
unified-args loads and evaluates configuration files, plugins, and presets
from the file system (often from node_modules/).
That means code that is on your file system runs.
Make sure you trust the workspace where you run unified-args and be careful
with packages from npm and changes made by contributors.
See contributing.md in unifiedjs/.github for ways
to get started.
See support.md for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
MIT ยฉ Titus Wormer