CLI tooling with zero configuration required.

Maintainers

Details

github.com/ZeroConfig/CLI

Source

Installs: 10 252

Dependents: 0

Suggesters: 0

Security: 0

Stars: 4

Watchers: 3

Forks: 0

1.4.0 2018-02-19 19:32 UTC

This package is auto-updated.

Last update: 2024-10-29 05:34:17 UTC


README

ZeroConfig CLI is a set of CLI tools, written in PHP, that require zero configuration in order to function.

codecov Packagist PHP from Packagist Packagist Phar

This package aims to provide a set of convenience methods to create CLI tooling without having to set up a framework or having in-depth knowledge of the inner workings of PHP CLI.

By design, it solves how to deal with large data streams. It is based on data going in, data being manipulated and then data going out. Whether the source is piped data, a local file or HTTP resource, it will be streamed line by line.

Transformation of data also occurs line by line, going in and coming out. The same goes for output, whether it's written to a file or STDOUT.

If an application is assembled using components from this library, your application will hold only one line of resource data in memory, at any given moment. This WILL reduce memory consumption and is a sure fire way to keep performance high in most CLI solutions.

Installation

To install the code base on which the tools are built, as a library:

composer require zero-config/cli

Alternatively, a built executable can be downloaded as zc.phar.

Correct execution rights and put it somewhere in your path:

chmod +x zc.phar
sudo ln -s /path/to/zc.phar /usr/bin/zc 

I/O

The I/O is easily handled by the input and output components of the package.

Input

Input sources are implemented as generators and can thus be used to stream data line by line.

<?php
use ZeroConfig\Cli\Reader\StandardIn;

$pipe = new StandardIn();

// Echo what is piped to the application.
foreach ($pipe as $line) {
    echo $line;
}

Output

Output writers expect iterable data and are able to write data line by line; ideal for handling streaming data.

<?php
use ZeroConfig\Cli\Writer\File;
use ZeroConfig\Cli\Reader\ReaderInterface;

$writer = new File('The.Zookeeper\'s.Wife.mp4');

/** @var ReaderInterface $movie */
$writer($movie);

Transformers

Transformers can be used to reduce, modify or enrich the data between input and output.

The following is an example of the match filter. It makes use of PCRE patterns.

<?php
use ZeroConfig\Cli\Transformer\Pcre\MatchFilter;

$transformer = new MatchFilter('/[Bb]a[rz]/');
$input       = [
    'This is foo!',
    'Greetings from bar :)',
    'A wonderful day from baz.'
];

foreach ($transformer($input) as $line) {
    echo $line . PHP_EOL;
}

The above example will output:

Greetings from bar :)
A wonderful day from baz.

The following are available transformers.

Chaining transformers

While transformers can be chained by wrapping one transformer into the other, a convenience transformer chain is available to easily chain transformers.

Guides

General documentation