https://github.com/assemble/assemble-handle
Assemble pipeline plugin for handling middleware stages.
https://github.com/assemble/assemble-handle
assemble assemble-pipeline-plugin assemble-plugin middleware
Last synced: 6 months ago
JSON representation
Assemble pipeline plugin for handling middleware stages.
- Host: GitHub
- URL: https://github.com/assemble/assemble-handle
- Owner: assemble
- License: mit
- Created: 2016-01-12T21:08:34.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2018-12-12T01:18:12.000Z (almost 7 years ago)
- Last Synced: 2025-03-23T00:04:51.106Z (7 months ago)
- Topics: assemble, assemble-pipeline-plugin, assemble-plugin, middleware
- Language: JavaScript
- Size: 19.5 KB
- Stars: 3
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# assemble-handle [](https://www.npmjs.com/package/assemble-handle) [](https://npmjs.org/package/assemble-handle) [](https://npmjs.org/package/assemble-handle) [](https://travis-ci.org/assemble/assemble-handle)
> Assemble pipeline plugin for handling custom middleware stages.
Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
## Install
Install with [npm](https://www.npmjs.com/):
```sh
$ npm install --save assemble-handle
```## Usage
```js
const handle = require('assemble-handle');
```### handle
Handle middleware for the given middleware "stage".
```js
app.task('default', function() {
return app.src('*.js')
.pipe(handle(app, 'handlerName')) //<= handle middleware
.pipe(app.dest('foo'))
});
```**Example**
```js
const assemble = require('assemble');
const handle = require('assemble-handle');
const app = assemble();/**
* create some middleware "stages"
*/app.handler('onStream');
app.handler('preWrite');
app.handler('postWrite');/**
* Create middleware
*/app.onStream(/\.(js|css)$/, function(file, next) {
// lint javascript
next();
});app.preWrite(/\.(jpg|png)$/, function(file, next) {
// minify images
next();
});app.postWrite(/./, function(file, next) {
// create files tree or something
next();
});/**
* Run (handle) the middleware
*/app.task('site', function() {
return app.src('assets/**/*.*')
.pipe(handle(app, 'onStream')) // handle onStream
.pipe(handle(app, 'preWrite')) // handle preWrite
.pipe(app.dest('site/'));
.pipe(handle(app, 'postWrite')) // handle postWrite
});
```### handle.once
A `.once` method is exposed, which has the same exact behavior as the main function, but will ensure that middleware is only handled once for a given "stage".
**Example**
For example the given middleware will only run once.
```js
const assemble = require('assemble-core');
const handle = require('assemble-handle');
const app = assemble();app.handler('onFoo');
app.onFoo(/./, function(file, next) {
file.count = file.count || 0;
file.count++;
next();
});app.task('handle-once', function(cb) {
let files = [];
app.src('test/**/*.*')
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.pipe(handle.once(app, 'onFoo'))
.on('data', function(file) {
files.push(file);
})
.pipe(app.dest('test/actual'))
.on('end', function() {
console.log(files[0].count);
//=> 1
cb();
});
});app.task('handle', function(cb) {
let files = [];
app.src('test/**/*.*')
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.pipe(handle(app, 'onFoo'))
.on('data', function(file) {
files.push(file);
})
.pipe(app.dest('test/actual'))
.on('end', function() {
console.log(files[0].count);
//=> 5
cb();
});
});
```## Custom handlers
Create custom middleware handlers.
```js
app.handler('onFoo');
```This adds an `.onFoo` method to the instance:
```js
app.onFoo(/\.hbs$/, function(file, next) {
// do stuff to file
next();
});
```All `.onFoo` middleware will now run when the `onFoo` handler is called:
```js
app.task('default', function() {
return app.src('*.hbs')// call the `onFoo` handler
.pipe(handle(app, 'onFoo'))
});
```## About
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
```sh
$ npm install && npm test
```Building docs
_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
To generate the readme, run the following command:
```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```### Related projects
You might also be interested in these projects:
* [assemble-core](https://www.npmjs.com/package/assemble-core): The core assemble application with no presets or defaults. All configuration is left to the… [more](https://github.com/assemble/assemble-core) | [homepage](https://github.com/assemble/assemble-core "The core assemble application with no presets or defaults. All configuration is left to the implementor.")
* [assemble-fs](https://www.npmjs.com/package/assemble-fs): Light wrapper for vinyl-fs to add streams support in a way that plays nice with… [more](https://github.com/assemble/assemble-fs) | [homepage](https://github.com/assemble/assemble-fs "Light wrapper for vinyl-fs to add streams support in a way that plays nice with Assemble middleware.")
* [assemble-streams](https://www.npmjs.com/package/assemble-streams): Assemble pipeline plugin for pushing views into a vinyl stream. | [homepage](https://github.com/assemble/assemble-streams "Assemble pipeline plugin for pushing views into a vinyl stream.")
* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit")### Contributors
| **Commits** | **Contributor** |
| --- | --- |
| 17 | [jonschlinkert](https://github.com/jonschlinkert) |
| 3 | [doowb](https://github.com/doowb) |### Author
**Jon Schlinkert**
* [GitHub Profile](https://github.com/jonschlinkert)
* [Twitter Profile](https://twitter.com/jonschlinkert)
* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)### License
Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE).***
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on December 11, 2018._