utilities for reshape plugins
npm install reshape-plugin-util



A little set of utilities for reshape plugins
> Note: This project is in early development, and versioning is a little different. Read this for more details.
npm i reshape-plugin-util --save
> Note: This project is compatible with node v6+ only
This is just a small utility that contains a couple a useful functions when developing reshape plugins.
#### modifyNodes(tree, match, transform)
Given a reshape AST, a function that will return any node that matches given criteria, and a function that receives matched nodes and returns one or more modified nodes, returns a modified AST.
Example: Using modifyNodes to modify a node's content
``js
const util = require('reshape-plugin-util')
module.exports = function yellPlugin (tree) {
return util.modifyNodes(tree, (node) => node.name === 'p', (node) => {
node.content = node.content.map((n) => n.content.toUpperCase())
return node
})
}
`
Input:
` hello world!html`
Output:
` HELLO WORLD!html`
Example: Using modifyNodes to remove a node
`js
const util = require('reshape-plugin-util')
module.exports = function removeNodePlugin (tree) {
return util.modifyNodes(tree, (node) => node.name === 'remove', (node) => {
return null
})
}
`
Input:
` before afterhtml`
Output:
` before afterhtml`
Example: Using modifyNodes to add extra nodes
`js
const util = require('reshape-plugin-util')
module.exports = function echoPlugin (tree) {
return util.modifyNodes(tree, (node) => node.name === 'echo', (node) => {
if (!node.attrs) node.attrs = {}
if (!node.attrs.class) node.attrs.class = []
node.attrs.class.push('echo')
node.name = 'div'
return [node, node]
})
}
`
Input:
` before afterhtml`
Output:
` before afterhtml`echoecho
You can also return a promise from either function and it will work fine.
#### validateNode(node)
Given a single reshape AST node, checks it for formatting errors. Example:
`js
const util = require('reshape-plugin-util')
util.validateNode({
type: 'text',
content: ['foo', 'bar'],
location: { line: 1, col: 1 }
})
// => Error: text node content must be a string
// From: plugin-util
// Node: {
// type: 'text',
// content: ['foo', 'bar'],
// location: { line: 1, col: 1 }
// }
`
#### validateTree(tree)
Recursively validates each node in a given reshape AST tree.
`js
const util = require('reshape-plugin-util')
util.validateNode({
type: 'tag',
name: 'div'
content: [
{
content: 'foo',
location: { line: 1, col: 4 }
}
],
location: { line: 1, col: 1 }
})
// => Error: node missing "type" attribute
// From: plugin-util
// Node: {
// content: 'foo',
// location: { line: 1, col: 4}
// }
``
- Details on the license can be found here
- Details on running tests and contributing can be found here