devisPattern v1.2.1
DevisPattern
A fast native pattern matcher addon on JavaScript object properties.
This addon is used by the devis framework to pattern match actions.
Requirements:
It's necessary, before using DevisPattern to install:
- CMake(*.msi version for windows: You must check the addition of the path for all users, And restart your computer after installation)
- A proper C/C++ compiler toolchain of the given platform
- Windows:
- Visual C++ Build Tools or a recent version of Visual C++ will do (the free Community version works well)
- Unix/linux-gnu:
- Clang or GCC
- Ninja or Make (Ninja will be picked if both present)
- Xcode with command line tools if you are under mac os
- Windows:
Install
npm install devisPattern
Or, if you download the project:
Generate the appropriate project build files for the current platform. Use configure
for that:
node-gyp configure
Now you will have either a Makefile
(on Unix platforms) or a vcxproj
file (on Windows) in the build/
directory. Next invoke the build command:
node-gyp build
Quick example
Here's how you register some patterns, and then search for matches:
const devisPattern =require("devisPattern"); //or require("./devisPattern/devisPattern"); if you download the project
devisPattern.add({
action: 'game',
cmd: 'play'
}, (args, done) => {
done({
result: 'play'
});
});
devisPattern.add({
action: 'game',
cmd: 'pause'
}, (args, done)=> {
done({
result: 'pause'
});
});
devisPattern.call({
action: 'game',
cmd: 'play'
}, (result)=> {
console.log(result);
});
devisPattern.call({
action: 'game',
cmd: 'pause'
}, (result) =>{
console.log(result);
});
The Why
This addon lets you build a simple decision tree so you can avoid writing if statements. It tries to make the minimum number of comparisons necessary to pick out the most specific match.
API
devisPattern
Generates a new pattern matcher instance.
.add( {...pattern...}, object )
Register a pattern, and the object that will be returned if an input matches. Both keys and values are considered to be strings. Other types are converted to strings.
.find( {...pattern...})
Return the unique match for this pattern, or null if not found.
.call({...pattern...},{...arguments...},callback)
Act this pattern.
.list( )
Return the list of registered patterns that contain this partial pattern.