🚨 Active Supply Chain Attack:node-ipc Package Compromised.Learn More
Socket
Book a DemoSign in
Socket

gcode-interpreter

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gcode-interpreter - npm Package Compare versions

Comparing version
1.3.0
to
2.0.0
+1
.nyc_output/40ba5b86148d7c963086f5295cac5f78.json
{"/Users/cheton/github/cncjs/gcode-interpreter/src/index.js":{"path":"/Users/cheton/github/cncjs/gcode-interpreter/src/index.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":3,"column":29}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"cf6f26a5a6eda838f528ae22afe3855254c9c233","contentHash":"99fd91bacbefae87fb33be186659722e_11.2.1"},"/Users/cheton/github/cncjs/gcode-interpreter/src/Interpreter.js":{"path":"/Users/cheton/github/cncjs/gcode-interpreter/src/Interpreter.js","statementMap":{"0":{"start":{"line":10,"column":13},"end":{"line":10,"column":21}},"1":{"start":{"line":16,"column":18},"end":{"line":27,"column":1}},"2":{"start":{"line":17,"column":16},"end":{"line":17,"column":18}},"3":{"start":{"line":18,"column":19},"end":{"line":18,"column":46}},"4":{"start":{"line":19,"column":19},"end":{"line":19,"column":21}},"5":{"start":{"line":21,"column":4},"end":{"line":24,"column":5}},"6":{"start":{"line":22,"column":21},"end":{"line":22,"column":33}},"7":{"start":{"line":23,"column":8},"end":{"line":23,"column":34}},"8":{"start":{"line":26,"column":4},"end":{"line":26,"column":18}},"9":{"start":{"line":29,"column":30},"end":{"line":49,"column":1}},"10":{"start":{"line":30,"column":19},"end":{"line":30,"column":21}},"11":{"start":{"line":32,"column":4},"end":{"line":46,"column":5}},"12":{"start":{"line":33,"column":21},"end":{"line":33,"column":29}},"13":{"start":{"line":34,"column":23},"end":{"line":34,"column":30}},"14":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"15":{"start":{"line":37,"column":12},"end":{"line":37,"column":32}},"16":{"start":{"line":38,"column":12},"end":{"line":38,"column":21}},"17":{"start":{"line":41,"column":8},"end":{"line":45,"column":9}},"18":{"start":{"line":42,"column":12},"end":{"line":42,"column":49}},"19":{"start":{"line":44,"column":12},"end":{"line":44,"column":32}},"20":{"start":{"line":48,"column":4},"end":{"line":48,"column":18}},"21":{"start":{"line":51,"column":18},"end":{"line":89,"column":1}},"22":{"start":{"line":52,"column":19},"end":{"line":52,"column":52}},"23":{"start":{"line":54,"column":4},"end":{"line":88,"column":5}},"24":{"start":{"line":55,"column":22},"end":{"line":55,"column":31}},"25":{"start":{"line":56,"column":21},"end":{"line":56,"column":35}},"26":{"start":{"line":57,"column":23},"end":{"line":57,"column":30}},"27":{"start":{"line":58,"column":20},"end":{"line":58,"column":27}},"28":{"start":{"line":59,"column":19},"end":{"line":59,"column":31}},"29":{"start":{"line":60,"column":19},"end":{"line":60,"column":21}},"30":{"start":{"line":62,"column":8},"end":{"line":77,"column":9}},"31":{"start":{"line":63,"column":12},"end":{"line":63,"column":27}},"32":{"start":{"line":64,"column":12},"end":{"line":64,"column":45}},"33":{"start":{"line":75,"column":12},"end":{"line":75,"column":27}},"34":{"start":{"line":76,"column":12},"end":{"line":76,"column":36}},"35":{"start":{"line":79,"column":8},"end":{"line":82,"column":9}},"36":{"start":{"line":80,"column":25},"end":{"line":80,"column":43}},"37":{"start":{"line":81,"column":12},"end":{"line":81,"column":23}},"38":{"start":{"line":84,"column":8},"end":{"line":87,"column":9}},"39":{"start":{"line":85,"column":25},"end":{"line":85,"column":45}},"40":{"start":{"line":86,"column":12},"end":{"line":86,"column":23}},"41":{"start":{"line":96,"column":8},"end":{"line":96,"column":32}},"42":{"start":{"line":97,"column":8},"end":{"line":97,"column":50}},"43":{"start":{"line":99,"column":8},"end":{"line":99,"column":41}},"44":{"start":{"line":102,"column":18},"end":{"line":102,"column":47}},"45":{"start":{"line":103,"column":8},"end":{"line":105,"column":11}},"46":{"start":{"line":104,"column":12},"end":{"line":104,"column":34}},"47":{"start":{"line":106,"column":8},"end":{"line":106,"column":17}},"48":{"start":{"line":109,"column":18},"end":{"line":109,"column":43}},"49":{"start":{"line":110,"column":8},"end":{"line":112,"column":11}},"50":{"start":{"line":111,"column":12},"end":{"line":111,"column":34}},"51":{"start":{"line":113,"column":8},"end":{"line":113,"column":17}},"52":{"start":{"line":116,"column":21},"end":{"line":116,"column":40}},"53":{"start":{"line":117,"column":8},"end":{"line":120,"column":9}},"54":{"start":{"line":118,"column":12},"end":{"line":118,"column":37}},"55":{"start":{"line":119,"column":12},"end":{"line":119,"column":33}},"56":{"start":{"line":121,"column":8},"end":{"line":121,"column":20}},"57":{"start":{"line":124,"column":18},"end":{"line":124,"column":44}},"58":{"start":{"line":125,"column":8},"end":{"line":127,"column":11}},"59":{"start":{"line":126,"column":12},"end":{"line":126,"column":34}},"60":{"start":{"line":128,"column":8},"end":{"line":128,"column":17}},"61":{"start":{"line":131,"column":21},"end":{"line":131,"column":41}},"62":{"start":{"line":132,"column":8},"end":{"line":135,"column":9}},"63":{"start":{"line":133,"column":12},"end":{"line":133,"column":37}},"64":{"start":{"line":134,"column":12},"end":{"line":134,"column":33}},"65":{"start":{"line":136,"column":8},"end":{"line":136,"column":20}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":13},"end":{"line":10,"column":14}},"loc":{"start":{"line":10,"column":19},"end":{"line":10,"column":21}},"line":10},"1":{"name":"(anonymous_1)","decl":{"start":{"line":16,"column":18},"end":{"line":16,"column":19}},"loc":{"start":{"line":16,"column":29},"end":{"line":27,"column":1}},"line":16},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":30},"end":{"line":29,"column":31}},"loc":{"start":{"line":29,"column":46},"end":{"line":49,"column":1}},"line":29},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":18},"end":{"line":51,"column":19}},"loc":{"start":{"line":51,"column":34},"end":{"line":89,"column":1}},"line":51},"4":{"name":"(anonymous_4)","decl":{"start":{"line":95,"column":4},"end":{"line":95,"column":5}},"loc":{"start":{"line":95,"column":25},"end":{"line":100,"column":5}},"line":95},"5":{"name":"(anonymous_5)","decl":{"start":{"line":101,"column":4},"end":{"line":101,"column":5}},"loc":{"start":{"line":101,"column":44},"end":{"line":107,"column":5}},"line":101},"6":{"name":"(anonymous_6)","decl":{"start":{"line":103,"column":21},"end":{"line":103,"column":22}},"loc":{"start":{"line":103,"column":31},"end":{"line":105,"column":9}},"line":103},"7":{"name":"(anonymous_7)","decl":{"start":{"line":108,"column":4},"end":{"line":108,"column":5}},"loc":{"start":{"line":108,"column":40},"end":{"line":114,"column":5}},"line":108},"8":{"name":"(anonymous_8)","decl":{"start":{"line":110,"column":21},"end":{"line":110,"column":22}},"loc":{"start":{"line":110,"column":31},"end":{"line":112,"column":9}},"line":110},"9":{"name":"(anonymous_9)","decl":{"start":{"line":115,"column":4},"end":{"line":115,"column":5}},"loc":{"start":{"line":115,"column":44},"end":{"line":122,"column":5}},"line":115},"10":{"name":"(anonymous_10)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":41},"end":{"line":129,"column":5}},"line":123},"11":{"name":"(anonymous_11)","decl":{"start":{"line":125,"column":21},"end":{"line":125,"column":22}},"loc":{"start":{"line":125,"column":31},"end":{"line":127,"column":9}},"line":125},"12":{"name":"(anonymous_12)","decl":{"start":{"line":130,"column":4},"end":{"line":130,"column":5}},"loc":{"start":{"line":130,"column":45},"end":{"line":137,"column":5}},"line":130}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":19},"end":{"line":18,"column":46}},"type":"cond-expr","locations":[{"start":{"line":18,"column":30},"end":{"line":18,"column":31}},{"start":{"line":18,"column":34},"end":{"line":18,"column":46}}],"line":18},"1":{"loc":{"start":{"line":29,"column":31},"end":{"line":29,"column":41}},"type":"default-arg","locations":[{"start":{"line":29,"column":39},"end":{"line":29,"column":41}}],"line":29},"2":{"loc":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},{"start":{"line":36,"column":8},"end":{"line":39,"column":9}}],"line":36},"3":{"loc":{"start":{"line":36,"column":12},"end":{"line":36,"column":48}},"type":"binary-expr","locations":[{"start":{"line":36,"column":13},"end":{"line":36,"column":27}},{"start":{"line":36,"column":33},"end":{"line":36,"column":47}}],"line":36},"4":{"loc":{"start":{"line":41,"column":8},"end":{"line":45,"column":9}},"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":45,"column":9}},{"start":{"line":41,"column":8},"end":{"line":45,"column":9}}],"line":41},"5":{"loc":{"start":{"line":56,"column":21},"end":{"line":56,"column":35}},"type":"binary-expr","locations":[{"start":{"line":56,"column":21},"end":{"line":56,"column":29}},{"start":{"line":56,"column":33},"end":{"line":56,"column":35}}],"line":56},"6":{"loc":{"start":{"line":62,"column":8},"end":{"line":77,"column":9}},"type":"if","locations":[{"start":{"line":62,"column":8},"end":{"line":77,"column":9}},{"start":{"line":62,"column":8},"end":{"line":77,"column":9}}],"line":62},"7":{"loc":{"start":{"line":62,"column":12},"end":{"line":62,"column":48}},"type":"binary-expr","locations":[{"start":{"line":62,"column":13},"end":{"line":62,"column":27}},{"start":{"line":62,"column":33},"end":{"line":62,"column":47}}],"line":62},"8":{"loc":{"start":{"line":79,"column":8},"end":{"line":82,"column":9}},"type":"if","locations":[{"start":{"line":79,"column":8},"end":{"line":82,"column":9}},{"start":{"line":79,"column":8},"end":{"line":82,"column":9}}],"line":79},"9":{"loc":{"start":{"line":84,"column":8},"end":{"line":87,"column":9}},"type":"if","locations":[{"start":{"line":84,"column":8},"end":{"line":87,"column":9}},{"start":{"line":84,"column":8},"end":{"line":87,"column":9}}],"line":84},"10":{"loc":{"start":{"line":96,"column":18},"end":{"line":96,"column":31}},"type":"binary-expr","locations":[{"start":{"line":96,"column":18},"end":{"line":96,"column":25}},{"start":{"line":96,"column":29},"end":{"line":96,"column":31}}],"line":96},"11":{"loc":{"start":{"line":97,"column":27},"end":{"line":97,"column":49}},"type":"binary-expr","locations":[{"start":{"line":97,"column":27},"end":{"line":97,"column":43}},{"start":{"line":97,"column":47},"end":{"line":97,"column":49}}],"line":97},"12":{"loc":{"start":{"line":101,"column":27},"end":{"line":101,"column":42}},"type":"default-arg","locations":[{"start":{"line":101,"column":38},"end":{"line":101,"column":42}}],"line":101},"13":{"loc":{"start":{"line":108,"column":23},"end":{"line":108,"column":38}},"type":"default-arg","locations":[{"start":{"line":108,"column":34},"end":{"line":108,"column":38}}],"line":108},"14":{"loc":{"start":{"line":115,"column":27},"end":{"line":115,"column":42}},"type":"default-arg","locations":[{"start":{"line":115,"column":38},"end":{"line":115,"column":42}}],"line":115},"15":{"loc":{"start":{"line":123,"column":24},"end":{"line":123,"column":39}},"type":"default-arg","locations":[{"start":{"line":123,"column":35},"end":{"line":123,"column":39}}],"line":123},"16":{"loc":{"start":{"line":130,"column":28},"end":{"line":130,"column":43}},"type":"default-arg","locations":[{"start":{"line":130,"column":39},"end":{"line":130,"column":43}}],"line":130}},"s":{"0":1,"1":1,"2":86,"3":86,"4":86,"5":86,"6":264,"7":264,"8":86,"9":1,"10":78,"11":78,"12":340,"13":340,"14":340,"15":76,"16":76,"17":264,"18":254,"19":10,"20":78,"21":1,"22":78,"23":78,"24":86,"25":86,"26":86,"27":86,"28":86,"29":86,"30":86,"31":76,"32":76,"33":10,"34":10,"35":86,"36":7,"37":7,"38":86,"39":44,"40":44,"41":9,"42":9,"43":9,"44":2,"45":2,"46":7,"47":2,"48":3,"49":3,"50":14,"51":3,"52":3,"53":3,"54":25,"55":25,"56":3,"57":2,"58":2,"59":7,"60":2,"61":3,"62":3,"63":25,"64":25,"65":3},"f":{"0":36,"1":86,"2":78,"3":78,"4":9,"5":2,"6":7,"7":3,"8":14,"9":3,"10":2,"11":7,"12":3},"b":{"0":[0,86],"1":[0],"2":[76,264],"3":[340,264],"4":[254,10],"5":[86,0],"6":[76,10],"7":[86,10],"8":[7,79],"9":[44,42],"10":[9,8],"11":[9,8],"12":[0],"13":[0],"14":[2],"15":[0],"16":[2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"7e259b6072bcfefd79a4aa65131eea6b6c32f382","contentHash":"5a134959544d6e4a2f80a8fb36eccb77_11.2.1"}}
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* eslint no-continue: 0 */
var _gcodeParser = require('gcode-parser');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var noop = function noop() {};
/**
* fromPairs([['a', 1], ['b', 2]]);
* // => { 'a': 1, 'b': 2 }
*/
var fromPairs = function fromPairs(pairs) {
var index = -1;
var length = !pairs ? 0 : pairs.length;
var result = {};
while (++index < length) {
var pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
};
var partitionWordsByGroup = function partitionWordsByGroup() {
var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var groups = [];
for (var i = 0; i < words.length; ++i) {
var word = words[i];
var letter = word[0];
if (letter === 'G' || letter === 'M') {
groups.push([word]);
continue;
}
if (groups.length > 0) {
groups[groups.length - 1].push(word);
} else {
groups.push([word]);
}
}
return groups;
};
var interpret = function interpret(self, data) {
var groups = partitionWordsByGroup(data.words);
for (var i = 0; i < groups.length; ++i) {
var words = groups[i];
var word = words[0] || [];
var letter = word[0];
var arg = word[1];
var cmd = letter + arg;
var args = {};
if (letter === 'G' || letter === 'M') {
self.cmd = cmd;
args = fromPairs(words.slice(1)); // returns an object composed from arrays of property names and values
} else {
// Use the same command if the line does not start with Gxx or Mxx.
// For example:
// G0 Z0.25
// X-0.5 Y0.
// Z0.1
// G01 Z0. F5.
// X0.5 Y0. I0. J-0.5
// X0. Y-0.5 I-0.5 J0.
// X-0.5 Y0. I0. J0.5
cmd = self.cmd;
args = fromPairs(words); // returns an object composed from arrays of property names and values.
}
if (typeof self.handlers[cmd] === 'function') {
var func = self.handlers[cmd];
func(args);
}
if (typeof self[cmd] === 'function') {
var _func = self[cmd].bind(self);
_func(args);
}
}
};
var Interpreter = function () {
function Interpreter(options) {
_classCallCheck(this, Interpreter);
this.cmd = '';
this.handlers = {};
options = options || {};
options.handlers = options.handlers || {};
this.handlers = options.handlers;
}
_createClass(Interpreter, [{
key: 'loadFromStream',
value: function loadFromStream(stream) {
var _this = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseStream)(stream, callback);
s.on('data', function (data) {
interpret(_this, data);
});
return s;
}
}, {
key: 'loadFromFile',
value: function loadFromFile(file) {
var _this2 = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseFile)(file, callback);
s.on('data', function (data) {
interpret(_this2, data);
});
return s;
}
}, {
key: 'loadFromFileSync',
value: function loadFromFileSync(file) {
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var list = (0, _gcodeParser.parseFileSync)(file);
for (var i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}, {
key: 'loadFromString',
value: function loadFromString(str) {
var _this3 = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseString)(str, callback);
s.on('data', function (data) {
interpret(_this3, data);
});
return s;
}
}, {
key: 'loadFromStringSync',
value: function loadFromStringSync(str) {
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var list = (0, _gcodeParser.parseStringSync)(str);
for (var i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}]);
return Interpreter;
}();
exports.default = Interpreter;
/* eslint no-continue: 0 */
import {
parseStream,
parseFile,
parseFileSync,
parseString,
parseStringSync
} from 'gcode-parser';
const noop = () => {};
/**
* fromPairs([['a', 1], ['b', 2]]);
* // => { 'a': 1, 'b': 2 }
*/
const fromPairs = (pairs) => {
let index = -1;
const length = (!pairs) ? 0 : pairs.length;
const result = {};
while (++index < length) {
const pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
};
const partitionWordsByGroup = (words = []) => {
const groups = [];
for (let i = 0; i < words.length; ++i) {
const word = words[i];
const letter = word[0];
if ((letter === 'G') || (letter === 'M')) {
groups.push([word]);
continue;
}
if (groups.length > 0) {
groups[groups.length - 1].push(word);
} else {
groups.push([word]);
}
}
return groups;
};
const interpret = (self, data) => {
const groups = partitionWordsByGroup(data.words);
for (let i = 0; i < groups.length; ++i) {
const words = groups[i];
const word = words[0] || [];
const letter = word[0];
const arg = word[1];
let cmd = (letter + arg);
let args = {};
if ((letter === 'G') || (letter === 'M')) {
self.cmd = cmd;
args = fromPairs(words.slice(1)); // returns an object composed from arrays of property names and values
} else {
// Use the same command if the line does not start with Gxx or Mxx.
// For example:
// G0 Z0.25
// X-0.5 Y0.
// Z0.1
// G01 Z0. F5.
// X0.5 Y0. I0. J-0.5
// X0. Y-0.5 I-0.5 J0.
// X-0.5 Y0. I0. J0.5
cmd = self.cmd;
args = fromPairs(words); // returns an object composed from arrays of property names and values.
}
if (typeof self.handlers[cmd] === 'function') {
const func = self.handlers[cmd];
func(args);
}
if (typeof self[cmd] === 'function') {
const func = self[cmd].bind(self);
func(args);
}
}
};
class Interpreter {
cmd = '';
handlers = {};
constructor(options) {
options = options || {};
options.handlers = options.handlers || {};
this.handlers = options.handlers;
}
loadFromStream(stream, callback = noop) {
const s = parseStream(stream, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromFile(file, callback = noop) {
const s = parseFile(file, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromFileSync(file, callback = noop) {
const list = parseFileSync(file);
for (let i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
loadFromString(str, callback = noop) {
const s = parseString(str, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromStringSync(str, callback = noop) {
const list = parseStringSync(str);
for (let i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}
export default Interpreter;
+4
-174
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GCodeInterpreter = undefined;
var _Interpreter = require('./Interpreter');
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* eslint no-continue: 0 */
var _Interpreter2 = _interopRequireDefault(_Interpreter);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _gcodeParser = require('gcode-parser');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var noop = function noop() {};
/**
* fromPairs([['a', 1], ['b', 2]]);
* // => { 'a': 1, 'b': 2 }
*/
var fromPairs = function fromPairs(pairs) {
var index = -1;
var length = !pairs ? 0 : pairs.length;
var result = {};
while (++index < length) {
var pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
};
var partitionWordsByGroup = function partitionWordsByGroup() {
var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var groups = [];
for (var i = 0; i < words.length; ++i) {
var word = words[i];
var letter = word[0];
if (letter === 'G' || letter === 'M') {
groups.push([word]);
continue;
}
if (groups.length > 0) {
groups[groups.length - 1].push(word);
} else {
groups.push([word]);
}
}
return groups;
};
var interpret = function interpret(self, data) {
var groups = partitionWordsByGroup(data.words);
for (var i = 0; i < groups.length; ++i) {
var words = groups[i];
var word = words[0] || [];
var letter = word[0];
var arg = word[1];
var cmd = letter + arg;
var args = {};
if (letter === 'G' || letter === 'M') {
self.cmd = cmd;
args = fromPairs(words.slice(1)); // returns an object composed from arrays of property names and values
} else {
// Use the same command if the line does not start with Gxx or Mxx.
// For example:
// G0 Z0.25
// X-0.5 Y0.
// Z0.1
// G01 Z0. F5.
// X0.5 Y0. I0. J-0.5
// X0. Y-0.5 I-0.5 J0.
// X-0.5 Y0. I0. J0.5
cmd = self.cmd;
args = fromPairs(words); // returns an object composed from arrays of property names and values.
}
if (typeof self.handlers[cmd] === 'function') {
var func = self.handlers[cmd];
func(args);
}
if (typeof self[cmd] === 'function') {
var _func = self[cmd].bind(self);
_func(args);
}
}
};
var GCodeInterpreter = function () {
function GCodeInterpreter(options) {
_classCallCheck(this, GCodeInterpreter);
this.cmd = '';
this.handlers = {};
options = options || {};
options.handlers = options.handlers || {};
this.handlers = options.handlers;
}
_createClass(GCodeInterpreter, [{
key: 'loadFromStream',
value: function loadFromStream(stream) {
var _this = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseStream)(stream, callback);
s.on('data', function (data) {
interpret(_this, data);
});
return s;
}
}, {
key: 'loadFromFile',
value: function loadFromFile(file) {
var _this2 = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseFile)(file, callback);
s.on('data', function (data) {
interpret(_this2, data);
});
return s;
}
}, {
key: 'loadFromFileSync',
value: function loadFromFileSync(file) {
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var list = (0, _gcodeParser.parseFileSync)(file);
for (var i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}, {
key: 'loadFromString',
value: function loadFromString(str) {
var _this3 = this;
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var s = (0, _gcodeParser.parseString)(str, callback);
s.on('data', function (data) {
interpret(_this3, data);
});
return s;
}
}, {
key: 'loadFromStringSync',
value: function loadFromStringSync(str) {
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var list = (0, _gcodeParser.parseStringSync)(str);
for (var i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}]);
return GCodeInterpreter;
}();
exports.GCodeInterpreter = GCodeInterpreter;
module.exports = _Interpreter2.default;
{
"name": "gcode-interpreter",
"version": "1.3.0",
"version": "2.0.0",
"description": "G-code Interpreter",

@@ -28,3 +28,3 @@ "author": "Cheton Wu <cheton@gmail.com>",

"dependencies": {
"gcode-parser": "^1.3.0"
"gcode-parser": "^1.3.3"
},

@@ -41,3 +41,3 @@ "devDependencies": {

"cross-env": "^5.0.5",
"eslint": "^4.7.2",
"eslint": "^4.8.0",
"eslint-config-trendmicro": "^1.0.0",

@@ -44,0 +44,0 @@ "eslint-plugin-import": "^2.7.0",

+16
-14

@@ -12,6 +12,6 @@ # gcode-interpreter [![build status](https://travis-ci.org/cncjs/gcode-interpreter.svg?branch=master)](https://travis-ci.org/cncjs/gcode-interpreter) [![Coverage Status](https://coveralls.io/repos/cncjs/gcode-interpreter/badge.svg?branch=master&service=github)](https://coveralls.io/github/cncjs/gcode-interpreter?branch=master)

```js
var GCodeInterpreter = require('gcode-interpreter').GCodeInterpreter;
const Interpreter = require('gcode-interpreter');
var GCodeRunner = function() {
var handlers = {
const Runner = function() {
const handlers = {
'G0': (args) => {

@@ -25,9 +25,11 @@ console.log('G0', args);

return new GCodeInterpreter({ handlers: handlers })
return new Interpreter({ handlers: handlers })
};
var runner = new GCodeRunner()
const runner = new Runner()
const file = 'example.nc';
const stream = fs.createReadStream(file, { encoding: 'utf8' });
const content = fs.readFileSync(file, 'utf8');
// Load G-code from stream
var stream = fs.createReadStream(file, { encoding: 'utf8' });
runner.loadFromStream(stream, function(err, data) {

@@ -37,3 +39,2 @@ });

// loadFromFile
var file = 'example.nc';
runner.loadFromFile(file, function(err, data) {

@@ -43,10 +44,11 @@ });

// Synchronous version of loadFromFile
var data = runner.loadFromFileSync(file);
runner.loadFromFileSync(file);
// loadFromString
runner.loadFromString(fs.readFileSync(file, 'utf8'), function(err, data) {
const content = fs.readFileSync(file, 'utf8');
runner.loadFromString(content, function(err, data) {
});
// Synchronous version of loadFromString
var data = runner.loadFromStringSync(file);
runner.loadFromStringSync(content);
```

@@ -58,3 +60,3 @@

```js
import { GCodeInterpreter } from 'gcode-interpreter';
import Interpreter from 'gcode-interpreter';

@@ -75,3 +77,3 @@ const GCODE = [

class GCodeToolpath {
class Toolpath {
handlers = {

@@ -107,7 +109,7 @@ 'G0': (params) => {

return new GCodeInterpreter({ handlers: this.handlers });
return new Interpreter({ handlers: this.handlers });
}
}
const toolpath = new GCodeToolpath();
const toolpath = new Toolpath();

@@ -114,0 +116,0 @@ toolpath

@@ -1,142 +0,3 @@

/* eslint no-continue: 0 */
import {
parseStream,
parseFile,
parseFileSync,
parseString,
parseStringSync
} from 'gcode-parser';
import Interpreter from './Interpreter';
const noop = () => {};
/**
* fromPairs([['a', 1], ['b', 2]]);
* // => { 'a': 1, 'b': 2 }
*/
const fromPairs = (pairs) => {
let index = -1;
const length = (!pairs) ? 0 : pairs.length;
const result = {};
while (++index < length) {
const pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
};
const partitionWordsByGroup = (words = []) => {
const groups = [];
for (let i = 0; i < words.length; ++i) {
const word = words[i];
const letter = word[0];
if ((letter === 'G') || (letter === 'M')) {
groups.push([word]);
continue;
}
if (groups.length > 0) {
groups[groups.length - 1].push(word);
} else {
groups.push([word]);
}
}
return groups;
};
const interpret = (self, data) => {
const groups = partitionWordsByGroup(data.words);
for (let i = 0; i < groups.length; ++i) {
const words = groups[i];
const word = words[0] || [];
const letter = word[0];
const arg = word[1];
let cmd = (letter + arg);
let args = {};
if ((letter === 'G') || (letter === 'M')) {
self.cmd = cmd;
args = fromPairs(words.slice(1)); // returns an object composed from arrays of property names and values
} else {
// Use the same command if the line does not start with Gxx or Mxx.
// For example:
// G0 Z0.25
// X-0.5 Y0.
// Z0.1
// G01 Z0. F5.
// X0.5 Y0. I0. J-0.5
// X0. Y-0.5 I-0.5 J0.
// X-0.5 Y0. I0. J0.5
cmd = self.cmd;
args = fromPairs(words); // returns an object composed from arrays of property names and values.
}
if (typeof self.handlers[cmd] === 'function') {
const func = self.handlers[cmd];
func(args);
}
if (typeof self[cmd] === 'function') {
const func = self[cmd].bind(self);
func(args);
}
}
};
class GCodeInterpreter {
cmd = '';
handlers = {};
constructor(options) {
options = options || {};
options.handlers = options.handlers || {};
this.handlers = options.handlers;
}
loadFromStream(stream, callback = noop) {
const s = parseStream(stream, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromFile(file, callback = noop) {
const s = parseFile(file, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromFileSync(file, callback = noop) {
const list = parseFileSync(file);
for (let i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
loadFromString(str, callback = noop) {
const s = parseString(str, callback);
s.on('data', (data) => {
interpret(this, data);
});
return s;
}
loadFromStringSync(str, callback = noop) {
const list = parseStringSync(str);
for (let i = 0; i < list.length; ++i) {
interpret(this, list[i]);
callback(list[i], i);
}
return list;
}
}
export {
GCodeInterpreter
};
module.exports = Interpreter;
{"/Users/cheton/github/cncjs/gcode-interpreter/lib/index.js":{"path":"/Users/cheton/github/cncjs/gcode-interpreter/lib/index.js","statementMap":{"0":{"start":{"line":3,"column":0},"end":{"line":5,"column":3}},"1":{"start":{"line":6,"column":0},"end":{"line":6,"column":37}},"2":{"start":{"line":8,"column":19},"end":{"line":8,"column":563}},"3":{"start":{"line":8,"column":76},"end":{"line":8,"column":347}},"4":{"start":{"line":8,"column":134},"end":{"line":8,"column":142}},"5":{"start":{"line":8,"column":144},"end":{"line":8,"column":199}},"6":{"start":{"line":8,"column":200},"end":{"line":8,"column":231}},"7":{"start":{"line":8,"column":232},"end":{"line":8,"column":286}},"8":{"start":{"line":8,"column":259},"end":{"line":8,"column":286}},"9":{"start":{"line":8,"column":287},"end":{"line":8,"column":345}},"10":{"start":{"line":8,"column":350},"end":{"line":8,"column":559}},"11":{"start":{"line":8,"column":407},"end":{"line":8,"column":475}},"12":{"start":{"line":8,"column":423},"end":{"line":8,"column":475}},"13":{"start":{"line":8,"column":476},"end":{"line":8,"column":536}},"14":{"start":{"line":8,"column":493},"end":{"line":8,"column":536}},"15":{"start":{"line":8,"column":537},"end":{"line":8,"column":556}},"16":{"start":{"line":11,"column":19},"end":{"line":11,"column":42}},"17":{"start":{"line":13,"column":50},"end":{"line":13,"column":151}},"18":{"start":{"line":13,"column":92},"end":{"line":13,"column":149}},"19":{"start":{"line":15,"column":11},"end":{"line":15,"column":29}},"20":{"start":{"line":21,"column":16},"end":{"line":32,"column":1}},"21":{"start":{"line":22,"column":16},"end":{"line":22,"column":18}},"22":{"start":{"line":23,"column":17},"end":{"line":23,"column":42}},"23":{"start":{"line":24,"column":17},"end":{"line":24,"column":19}},"24":{"start":{"line":26,"column":4},"end":{"line":29,"column":5}},"25":{"start":{"line":27,"column":19},"end":{"line":27,"column":31}},"26":{"start":{"line":28,"column":8},"end":{"line":28,"column":34}},"27":{"start":{"line":31,"column":4},"end":{"line":31,"column":18}},"28":{"start":{"line":34,"column":28},"end":{"line":56,"column":1}},"29":{"start":{"line":35,"column":16},"end":{"line":35,"column":86}},"30":{"start":{"line":37,"column":17},"end":{"line":37,"column":19}},"31":{"start":{"line":39,"column":4},"end":{"line":53,"column":5}},"32":{"start":{"line":40,"column":19},"end":{"line":40,"column":27}},"33":{"start":{"line":41,"column":21},"end":{"line":41,"column":28}},"34":{"start":{"line":43,"column":8},"end":{"line":46,"column":9}},"35":{"start":{"line":44,"column":12},"end":{"line":44,"column":32}},"36":{"start":{"line":45,"column":12},"end":{"line":45,"column":21}},"37":{"start":{"line":48,"column":8},"end":{"line":52,"column":9}},"38":{"start":{"line":49,"column":12},"end":{"line":49,"column":49}},"39":{"start":{"line":51,"column":12},"end":{"line":51,"column":32}},"40":{"start":{"line":55,"column":4},"end":{"line":55,"column":18}},"41":{"start":{"line":58,"column":16},"end":{"line":96,"column":1}},"42":{"start":{"line":59,"column":17},"end":{"line":59,"column":50}},"43":{"start":{"line":61,"column":4},"end":{"line":95,"column":5}},"44":{"start":{"line":62,"column":20},"end":{"line":62,"column":29}},"45":{"start":{"line":63,"column":19},"end":{"line":63,"column":33}},"46":{"start":{"line":64,"column":21},"end":{"line":64,"column":28}},"47":{"start":{"line":65,"column":18},"end":{"line":65,"column":25}},"48":{"start":{"line":66,"column":18},"end":{"line":66,"column":30}},"49":{"start":{"line":67,"column":19},"end":{"line":67,"column":21}},"50":{"start":{"line":69,"column":8},"end":{"line":84,"column":9}},"51":{"start":{"line":70,"column":12},"end":{"line":70,"column":27}},"52":{"start":{"line":71,"column":12},"end":{"line":71,"column":45}},"53":{"start":{"line":82,"column":12},"end":{"line":82,"column":27}},"54":{"start":{"line":83,"column":12},"end":{"line":83,"column":36}},"55":{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},"56":{"start":{"line":87,"column":23},"end":{"line":87,"column":41}},"57":{"start":{"line":88,"column":12},"end":{"line":88,"column":23}},"58":{"start":{"line":91,"column":8},"end":{"line":94,"column":9}},"59":{"start":{"line":92,"column":24},"end":{"line":92,"column":44}},"60":{"start":{"line":93,"column":12},"end":{"line":93,"column":24}},"61":{"start":{"line":98,"column":23},"end":{"line":177,"column":3}},"62":{"start":{"line":100,"column":8},"end":{"line":100,"column":48}},"63":{"start":{"line":102,"column":8},"end":{"line":102,"column":22}},"64":{"start":{"line":103,"column":8},"end":{"line":103,"column":27}},"65":{"start":{"line":105,"column":8},"end":{"line":105,"column":32}},"66":{"start":{"line":106,"column":8},"end":{"line":106,"column":50}},"67":{"start":{"line":108,"column":8},"end":{"line":108,"column":41}},"68":{"start":{"line":111,"column":4},"end":{"line":174,"column":8}},"69":{"start":{"line":114,"column":24},"end":{"line":114,"column":28}},"70":{"start":{"line":116,"column":27},"end":{"line":116,"column":99}},"71":{"start":{"line":118,"column":20},"end":{"line":118,"column":67}},"72":{"start":{"line":119,"column":12},"end":{"line":121,"column":15}},"73":{"start":{"line":120,"column":16},"end":{"line":120,"column":39}},"74":{"start":{"line":122,"column":12},"end":{"line":122,"column":21}},"75":{"start":{"line":127,"column":25},"end":{"line":127,"column":29}},"76":{"start":{"line":129,"column":27},"end":{"line":129,"column":99}},"77":{"start":{"line":131,"column":20},"end":{"line":131,"column":63}},"78":{"start":{"line":132,"column":12},"end":{"line":134,"column":15}},"79":{"start":{"line":133,"column":16},"end":{"line":133,"column":40}},"80":{"start":{"line":135,"column":12},"end":{"line":135,"column":21}},"81":{"start":{"line":140,"column":27},"end":{"line":140,"column":99}},"82":{"start":{"line":142,"column":23},"end":{"line":142,"column":60}},"83":{"start":{"line":143,"column":12},"end":{"line":146,"column":13}},"84":{"start":{"line":144,"column":16},"end":{"line":144,"column":41}},"85":{"start":{"line":145,"column":16},"end":{"line":145,"column":37}},"86":{"start":{"line":147,"column":12},"end":{"line":147,"column":24}},"87":{"start":{"line":152,"column":25},"end":{"line":152,"column":29}},"88":{"start":{"line":154,"column":27},"end":{"line":154,"column":99}},"89":{"start":{"line":156,"column":20},"end":{"line":156,"column":64}},"90":{"start":{"line":157,"column":12},"end":{"line":159,"column":15}},"91":{"start":{"line":158,"column":16},"end":{"line":158,"column":40}},"92":{"start":{"line":160,"column":12},"end":{"line":160,"column":21}},"93":{"start":{"line":165,"column":27},"end":{"line":165,"column":99}},"94":{"start":{"line":167,"column":23},"end":{"line":167,"column":61}},"95":{"start":{"line":168,"column":12},"end":{"line":171,"column":13}},"96":{"start":{"line":169,"column":16},"end":{"line":169,"column":41}},"97":{"start":{"line":170,"column":16},"end":{"line":170,"column":37}},"98":{"start":{"line":172,"column":12},"end":{"line":172,"column":24}},"99":{"start":{"line":176,"column":4},"end":{"line":176,"column":28}},"100":{"start":{"line":179,"column":0},"end":{"line":179,"column":44}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":19},"end":{"line":8,"column":20}},"loc":{"start":{"line":8,"column":31},"end":{"line":8,"column":561}},"line":8},"1":{"name":"defineProperties","decl":{"start":{"line":8,"column":42},"end":{"line":8,"column":58}},"loc":{"start":{"line":8,"column":74},"end":{"line":8,"column":349}},"line":8},"2":{"name":"(anonymous_2)","decl":{"start":{"line":8,"column":357},"end":{"line":8,"column":358}},"loc":{"start":{"line":8,"column":405},"end":{"line":8,"column":558}},"line":8},"3":{"name":"_classCallCheck","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":24}},"loc":{"start":{"line":13,"column":48},"end":{"line":13,"column":153}},"line":13},"4":{"name":"noop","decl":{"start":{"line":15,"column":20},"end":{"line":15,"column":24}},"loc":{"start":{"line":15,"column":27},"end":{"line":15,"column":29}},"line":15},"5":{"name":"fromPairs","decl":{"start":{"line":21,"column":25},"end":{"line":21,"column":34}},"loc":{"start":{"line":21,"column":42},"end":{"line":32,"column":1}},"line":21},"6":{"name":"partitionWordsByGroup","decl":{"start":{"line":34,"column":37},"end":{"line":34,"column":58}},"loc":{"start":{"line":34,"column":61},"end":{"line":56,"column":1}},"line":34},"7":{"name":"interpret","decl":{"start":{"line":58,"column":25},"end":{"line":58,"column":34}},"loc":{"start":{"line":58,"column":47},"end":{"line":96,"column":1}},"line":58},"8":{"name":"(anonymous_8)","decl":{"start":{"line":98,"column":23},"end":{"line":98,"column":24}},"loc":{"start":{"line":98,"column":35},"end":{"line":177,"column":1}},"line":98},"9":{"name":"GCodeInterpreter","decl":{"start":{"line":99,"column":13},"end":{"line":99,"column":29}},"loc":{"start":{"line":99,"column":39},"end":{"line":109,"column":5}},"line":99},"10":{"name":"loadFromStream","decl":{"start":{"line":113,"column":24},"end":{"line":113,"column":38}},"loc":{"start":{"line":113,"column":47},"end":{"line":123,"column":9}},"line":113},"11":{"name":"(anonymous_11)","decl":{"start":{"line":119,"column":25},"end":{"line":119,"column":26}},"loc":{"start":{"line":119,"column":41},"end":{"line":121,"column":13}},"line":119},"12":{"name":"loadFromFile","decl":{"start":{"line":126,"column":24},"end":{"line":126,"column":36}},"loc":{"start":{"line":126,"column":43},"end":{"line":136,"column":9}},"line":126},"13":{"name":"(anonymous_13)","decl":{"start":{"line":132,"column":25},"end":{"line":132,"column":26}},"loc":{"start":{"line":132,"column":41},"end":{"line":134,"column":13}},"line":132},"14":{"name":"loadFromFileSync","decl":{"start":{"line":139,"column":24},"end":{"line":139,"column":40}},"loc":{"start":{"line":139,"column":47},"end":{"line":148,"column":9}},"line":139},"15":{"name":"loadFromString","decl":{"start":{"line":151,"column":24},"end":{"line":151,"column":38}},"loc":{"start":{"line":151,"column":44},"end":{"line":161,"column":9}},"line":151},"16":{"name":"(anonymous_16)","decl":{"start":{"line":157,"column":25},"end":{"line":157,"column":26}},"loc":{"start":{"line":157,"column":41},"end":{"line":159,"column":13}},"line":157},"17":{"name":"loadFromStringSync","decl":{"start":{"line":164,"column":24},"end":{"line":164,"column":42}},"loc":{"start":{"line":164,"column":48},"end":{"line":173,"column":9}},"line":164}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":168},"end":{"line":8,"column":198}},"type":"binary-expr","locations":[{"start":{"line":8,"column":168},"end":{"line":8,"column":189}},{"start":{"line":8,"column":193},"end":{"line":8,"column":198}}],"line":8},"1":{"loc":{"start":{"line":8,"column":232},"end":{"line":8,"column":286}},"type":"if","locations":[{"start":{"line":8,"column":232},"end":{"line":8,"column":286}},{"start":{"line":8,"column":232},"end":{"line":8,"column":286}}],"line":8},"2":{"loc":{"start":{"line":8,"column":407},"end":{"line":8,"column":475}},"type":"if","locations":[{"start":{"line":8,"column":407},"end":{"line":8,"column":475}},{"start":{"line":8,"column":407},"end":{"line":8,"column":475}}],"line":8},"3":{"loc":{"start":{"line":8,"column":476},"end":{"line":8,"column":536}},"type":"if","locations":[{"start":{"line":8,"column":476},"end":{"line":8,"column":536}},{"start":{"line":8,"column":476},"end":{"line":8,"column":536}}],"line":8},"4":{"loc":{"start":{"line":13,"column":50},"end":{"line":13,"column":151}},"type":"if","locations":[{"start":{"line":13,"column":50},"end":{"line":13,"column":151}},{"start":{"line":13,"column":50},"end":{"line":13,"column":151}}],"line":13},"5":{"loc":{"start":{"line":23,"column":17},"end":{"line":23,"column":42}},"type":"cond-expr","locations":[{"start":{"line":23,"column":26},"end":{"line":23,"column":27}},{"start":{"line":23,"column":30},"end":{"line":23,"column":42}}],"line":23},"6":{"loc":{"start":{"line":35,"column":16},"end":{"line":35,"column":86}},"type":"cond-expr","locations":[{"start":{"line":35,"column":69},"end":{"line":35,"column":81}},{"start":{"line":35,"column":84},"end":{"line":35,"column":86}}],"line":35},"7":{"loc":{"start":{"line":35,"column":16},"end":{"line":35,"column":66}},"type":"binary-expr","locations":[{"start":{"line":35,"column":16},"end":{"line":35,"column":36}},{"start":{"line":35,"column":40},"end":{"line":35,"column":66}}],"line":35},"8":{"loc":{"start":{"line":43,"column":8},"end":{"line":46,"column":9}},"type":"if","locations":[{"start":{"line":43,"column":8},"end":{"line":46,"column":9}},{"start":{"line":43,"column":8},"end":{"line":46,"column":9}}],"line":43},"9":{"loc":{"start":{"line":43,"column":12},"end":{"line":43,"column":44}},"type":"binary-expr","locations":[{"start":{"line":43,"column":12},"end":{"line":43,"column":26}},{"start":{"line":43,"column":30},"end":{"line":43,"column":44}}],"line":43},"10":{"loc":{"start":{"line":48,"column":8},"end":{"line":52,"column":9}},"type":"if","locations":[{"start":{"line":48,"column":8},"end":{"line":52,"column":9}},{"start":{"line":48,"column":8},"end":{"line":52,"column":9}}],"line":48},"11":{"loc":{"start":{"line":63,"column":19},"end":{"line":63,"column":33}},"type":"binary-expr","locations":[{"start":{"line":63,"column":19},"end":{"line":63,"column":27}},{"start":{"line":63,"column":31},"end":{"line":63,"column":33}}],"line":63},"12":{"loc":{"start":{"line":69,"column":8},"end":{"line":84,"column":9}},"type":"if","locations":[{"start":{"line":69,"column":8},"end":{"line":84,"column":9}},{"start":{"line":69,"column":8},"end":{"line":84,"column":9}}],"line":69},"13":{"loc":{"start":{"line":69,"column":12},"end":{"line":69,"column":44}},"type":"binary-expr","locations":[{"start":{"line":69,"column":12},"end":{"line":69,"column":26}},{"start":{"line":69,"column":30},"end":{"line":69,"column":44}}],"line":69},"14":{"loc":{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},"type":"if","locations":[{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},{"start":{"line":86,"column":8},"end":{"line":89,"column":9}}],"line":86},"15":{"loc":{"start":{"line":91,"column":8},"end":{"line":94,"column":9}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":94,"column":9}},{"start":{"line":91,"column":8},"end":{"line":94,"column":9}}],"line":91},"16":{"loc":{"start":{"line":105,"column":18},"end":{"line":105,"column":31}},"type":"binary-expr","locations":[{"start":{"line":105,"column":18},"end":{"line":105,"column":25}},{"start":{"line":105,"column":29},"end":{"line":105,"column":31}}],"line":105},"17":{"loc":{"start":{"line":106,"column":27},"end":{"line":106,"column":49}},"type":"binary-expr","locations":[{"start":{"line":106,"column":27},"end":{"line":106,"column":43}},{"start":{"line":106,"column":47},"end":{"line":106,"column":49}}],"line":106},"18":{"loc":{"start":{"line":116,"column":27},"end":{"line":116,"column":99}},"type":"cond-expr","locations":[{"start":{"line":116,"column":80},"end":{"line":116,"column":92}},{"start":{"line":116,"column":95},"end":{"line":116,"column":99}}],"line":116},"19":{"loc":{"start":{"line":116,"column":27},"end":{"line":116,"column":77}},"type":"binary-expr","locations":[{"start":{"line":116,"column":27},"end":{"line":116,"column":47}},{"start":{"line":116,"column":51},"end":{"line":116,"column":77}}],"line":116},"20":{"loc":{"start":{"line":129,"column":27},"end":{"line":129,"column":99}},"type":"cond-expr","locations":[{"start":{"line":129,"column":80},"end":{"line":129,"column":92}},{"start":{"line":129,"column":95},"end":{"line":129,"column":99}}],"line":129},"21":{"loc":{"start":{"line":129,"column":27},"end":{"line":129,"column":77}},"type":"binary-expr","locations":[{"start":{"line":129,"column":27},"end":{"line":129,"column":47}},{"start":{"line":129,"column":51},"end":{"line":129,"column":77}}],"line":129},"22":{"loc":{"start":{"line":140,"column":27},"end":{"line":140,"column":99}},"type":"cond-expr","locations":[{"start":{"line":140,"column":80},"end":{"line":140,"column":92}},{"start":{"line":140,"column":95},"end":{"line":140,"column":99}}],"line":140},"23":{"loc":{"start":{"line":140,"column":27},"end":{"line":140,"column":77}},"type":"binary-expr","locations":[{"start":{"line":140,"column":27},"end":{"line":140,"column":47}},{"start":{"line":140,"column":51},"end":{"line":140,"column":77}}],"line":140},"24":{"loc":{"start":{"line":154,"column":27},"end":{"line":154,"column":99}},"type":"cond-expr","locations":[{"start":{"line":154,"column":80},"end":{"line":154,"column":92}},{"start":{"line":154,"column":95},"end":{"line":154,"column":99}}],"line":154},"25":{"loc":{"start":{"line":154,"column":27},"end":{"line":154,"column":77}},"type":"binary-expr","locations":[{"start":{"line":154,"column":27},"end":{"line":154,"column":47}},{"start":{"line":154,"column":51},"end":{"line":154,"column":77}}],"line":154},"26":{"loc":{"start":{"line":165,"column":27},"end":{"line":165,"column":99}},"type":"cond-expr","locations":[{"start":{"line":165,"column":80},"end":{"line":165,"column":92}},{"start":{"line":165,"column":95},"end":{"line":165,"column":99}}],"line":165},"27":{"loc":{"start":{"line":165,"column":27},"end":{"line":165,"column":77}},"type":"binary-expr","locations":[{"start":{"line":165,"column":27},"end":{"line":165,"column":47}},{"start":{"line":165,"column":51},"end":{"line":165,"column":77}}],"line":165}},"s":{"0":1,"1":1,"2":1,"3":1,"4":5,"5":5,"6":5,"7":5,"8":5,"9":5,"10":1,"11":1,"12":1,"13":1,"14":0,"15":1,"16":1,"17":9,"18":0,"19":1,"20":1,"21":86,"22":86,"23":86,"24":86,"25":264,"26":264,"27":86,"28":1,"29":78,"30":78,"31":78,"32":340,"33":340,"34":340,"35":76,"36":76,"37":264,"38":254,"39":10,"40":78,"41":1,"42":78,"43":78,"44":86,"45":86,"46":86,"47":86,"48":86,"49":86,"50":86,"51":76,"52":76,"53":10,"54":10,"55":86,"56":7,"57":7,"58":86,"59":44,"60":44,"61":1,"62":9,"63":9,"64":9,"65":9,"66":9,"67":9,"68":1,"69":2,"70":2,"71":2,"72":2,"73":7,"74":2,"75":3,"76":3,"77":3,"78":3,"79":14,"80":3,"81":3,"82":3,"83":3,"84":25,"85":25,"86":3,"87":2,"88":2,"89":2,"90":2,"91":7,"92":2,"93":3,"94":3,"95":3,"96":25,"97":25,"98":3,"99":1,"100":1},"f":{"0":1,"1":1,"2":1,"3":9,"4":36,"5":86,"6":78,"7":78,"8":1,"9":9,"10":2,"11":7,"12":3,"13":14,"14":3,"15":2,"16":7,"17":3},"b":{"0":[5,5],"1":[5,0],"2":[1,0],"3":[0,1],"4":[0,9],"5":[0,86],"6":[78,0],"7":[78,78],"8":[76,264],"9":[340,264],"10":[254,10],"11":[86,0],"12":[76,10],"13":[86,10],"14":[7,79],"15":[44,42],"16":[9,8],"17":[9,8],"18":[2,0],"19":[2,2],"20":[3,0],"21":[3,3],"22":[1,2],"23":[3,1],"24":[2,0],"25":[2,2],"26":[1,2],"27":[3,1]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"764e38115130dcf662b49766d70e307c9c6ac013","contentHash":"17fb309f7fc4930c1c35ad302c681f3a_11.2.1"}}