I made it so it works as a module. I didn't change any of the code itself, so the test coverage remains the same. I updated the import in the example below
Grbl machine parser library written in javascript
Provides an event-based callbacks to parse any strings grbl may output.
Supports Grbl 0.9, 1.0, and 1.1 (untested with grbl 0.8)
npm install grbl-parser --save
import {GrblParser} from "./lib/parser.js";
const grblParser = new GrblParser()
const myCallback = function(parsedData) {
// do stuff with parsed data (see example status output in Examples section)
}
const myString = "<Hold:0|MPos:0.000,0.000,0.000|Bf:15,128|FS:675.5,24000|Ov:120,100,100|WCO:0.000,-5.200,306.351|A:SFM>"
parser.dispatcher.addListener("status", myCallback) // bind myCallback to grbl status reports
parser.parseData(myString)
Use these to bind to specific message types
"status",
"success",
"initialize",
"alarm",
"error",
"setting",
"feedbackMessage",
"buildVersion",
"buildOptions",
"gcodeState",
"helpMessage",
"gcodeSystem",
"probeResult",
"echoMessage",
"gcodeStartup",
"unknown"
You can get all message types:
console.log(new GrblParser().messageTypes)
// [ status: "status", alarm: "alarm", ... ]
parser.dispatcher.addListener("status", myStatusCallback)
parser.dispatcher.addListener("alarm", myAlarmCallback)
parser.dispatcher.addToAllListeners(myEverythingCallback)
parser.parseData("<Hold:0|MPos:0.000,0.000,0.000|Bf:15,128|FS:675.5,24000|Ov:120,100,100|WCO:0.000,-5.200,306.351|A:SFM>")
{
data: {
machinePosition: {
x: 0,
y: 0,
z: 0
},
buffer: {
availableBlocks: 15,
availableRXBytes: 128
},
realtimeFeed: {
realtimeFeedrate: 675.5,
realtimeSpindle: 24000
},
workcoordinateOffset: {
x: 0,
y: -5.2,
z: 306.351
},
status: {
code: 0,
message: "Hold complete. Ready to resume.",
state: 'Hold'
},
override: {
feeds: 120,
rapids: 100,
spindle: 100
},
accessories: {
flood: true,
mist: true,
spindleDirection: 'clockwise'
}
},
type: "status",
input: "<Hold:0|MPos:0.000,0.000,0.000|Bf:15,128|FS:675.5,24000|Ov:120,100,100|WCO:0.000,-5.200,306.351|A:SFM>"
}
parser.parseData("error:20")
{
data: {
code: "20",
message: "Unsupported or invalid g-code command found in block."
},
input: "error:20",
type: "error"
}