https://github.com/eces/polymatch
https://github.com/eces/polymatch
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/eces/polymatch
- Owner: eces
- License: mit
- Created: 2017-11-21T13:16:50.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-11-22T02:42:02.000Z (over 8 years ago)
- Last Synced: 2025-09-30T14:15:25.935Z (9 months ago)
- Language: JavaScript
- Size: 17.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# polymatch
### Summary
- `Accept: application/json+user` will trigger `user` filter
- `Accept: application/json+v1+user` will trigger both `v1` and `user` filters respectively.
- `.type(['v1', 'user'])` will trigger also.
- `.type('application/json+v1+user')` will trigger also.
- `filter1.use(filter2)` composition works; similar to express-router.
- `filter1.use({ key: [Function] })` json composition works.
### Examples
```js
const Polymatch = require('polymatch')
const filters = new Polymatch()
filters
.on('v1/*')
.use('user', (input) => {
// transform for version
input.uid = input.user_id
return input
})
.use('company:1089', (input) => {
// transform for specific customer
input.name = `[${input.name}]`
return input
})
.on('v1/result*')
.use(require('./filter.result.js'))
// on router and handler
const result = this.filters
.on('v1/result.xml')
.input(rows)
.type(req.get('accept') || ['json'])
.value()
```
Try
```js
> Polymatch = require('polymatch')
[Function: Polymatch]
> f = new Polymatch
Polymatch { targets: [] }
> f.on('name/v1').use('full', (input) => { input.full = input.first + ' ' + input.last; return input })
Polymatch {
targets: { 'name/v1': { full: [Function] } },
selectedTarget: 'name/v1' }
> name = {first: 'Barack', last: 'Obama'}
> f.on('name/v1').input(name).type('application/json+not-existing-type').value()
{first: 'Barack', last: 'Obama'}
> f.on('name/version-3').input(name).type('application/json+full').value()
{first: 'Barack', last: 'Obama'}
> f.on('name/v1').input(name).type('application/json+full').value()
{first: 'Barack', last: 'Obama', full: 'Barack Obama'}
> f.on('name/v1').use({simple: (input) => { input.simple = input.first[0] + input.last[0]; return input }})
> f.on('name/v1').input(name).type('application/json+simple').value()
{ first: 'Barack',
last: 'Obama',
full: 'Barack Obama',
simple: 'BO' }
> f.on('name/v1').input({first: 'Barack', last: 'Obama'}).type(['full']).value()
{first: 'Barack', last: 'Obama', full: 'Barack Obama'}
```
### Tests
`mocha test.js`
```
filter
✓ payload with single mime-type string
✓ payload with multiple mime-type string
✓ composition with json
✓ payload with multiple mime-type array
- payload with undefined filters
- payload with multiple require filters
4 passing (12ms)
2 pending
```
### Changelog
- Version 1.1.0 **2017-11-22**: `from` to `input`, `to` to `type`
- Version 1.0.2 **2017-11-21**: Go to public with MIT license.
### Author
Jin Lee (currently working at @playauto)