An open API service indexing awesome lists of open source software.

https://github.com/caseywebdev/cogs

The fast file transform pipeline.
https://github.com/caseywebdev/cogs

Last synced: 4 months ago
JSON representation

The fast file transform pipeline.

Awesome Lists containing this project

README

          

# Cogs

The fast file transform pipeline.

> George Jetson's workweek is typical of his era: an hour a day, two days a
> week. His boss is Cosmo Spacely, the diminutive yet bombastic owner of Spacely
> Space Sprockets. Spacely has a competitor, H. G. Cogswell, owner of the rival
> company Cogswell Cogs (sometimes known as Cogswell's Cosmic Cogs).

## Install

```bash
npm install cogs
```

## Usage

Cogs leverages a simple command line interface paired with a powerful
declarative config file.

```
Usage: cogs [options]

The fast file transform pipeline.

Options:

-V, --version output the version number
-c, --config-path [path] load config from [path] (default: cogs.js)
-d, --debounce [seconds] trigger a build at most every [seconds] seconds (default: 0.1)
-w, --watch-paths [path] rebuild if [path] changes, can be specified multiple times
-p, --use-polling use stat polling instead of fsevents when watching
-s, --silent do not output build information, only errors
-h, --help output usage information
```

## Config

Every good project needs a Cogs config file. This file can be JavaScript or
JSON, as long as `require`ing the file returns the config object. Here's an
example in JavaScript:

```js
export default {

// Define the transformer pipeline here.
transformers: [
{
// This is the name of the transformer to use for this piece of the
// pipeline. It can be shorthand like this, or the fully-qualified package
// name like 'cogs-transformer-babel'.
name: 'babel',

// The "only" key can be used to define a glob or array of globs, one of
// which must be matched for the file to go through this transformer.
only: 'src/**/*.js',

// "except" is the opposite of only. Paths that match these globs will not
// go through the transformer.
except: [
'src/some/outlier/file.js',
'src/more/outliers/**/*.js'
],

// "options" will be passed directly to the transformer.
options: {
presets: ['stage-0', 'es2015', 'react']
}
},

// Impromptu transformers are as easy as specifying a function.
{
fn: ({file: {buffer}, options}) => ({buffer: Buffer.from(`${buffer}!`)),
only: '**/*.exciting'
},

// Some other examples...
{
name: 'uglify-js',
only: '**/*.js',
except: '**/*+(-|_|.)min.js'
},
{
name: 'sass',
only: 'src/**/*.scss'
},
{
name: 'clean-css',
only: '**/*.+(css|scss)'
}
],

// Define source globs and targets here. This is where you define what to
// transform and where it should go.
builds: {
'src/index.es6': {base: 'src', dir: 'public'},

'src/public/**/*': {base: 'src/public', dir: 'public'},

// Save to public dir and rename .es6 files to .js and .scss files to .css
'src/foo/**/*': {
base: 'src',
dir: 'public',
ext: {
'.es6': '.js',
'.scss': '.css'
}
}
}
};
```

## Transformers

Transformers are generally node modules that can be downloaded from npm.
Alternatively, you can create your own transformers for your projects and
reference them in the transformers array.

[Here are some transformers to get you started](https://github.com/search?q=cogs-transformer&type=Repositories)

## Develop

```bash
git clone git@github.com:caseywebdev/cogs
cd cogs
npm install
bin/watch-test
```