canner-compiler
Version:
Compiler for Canner CMS schema
83 lines (68 loc) • 2.27 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var VisitorHandler =
/*#__PURE__*/
function () {
function VisitorHandler(visitor) {
(0, _classCallCheck2.default)(this, VisitorHandler);
(0, _defineProperty2.default)(this, "visitor", void 0);
this.visitor = {};
if (visitor) {
this.merge(visitor);
}
}
(0, _createClass2.default)(VisitorHandler, [{
key: "getVisitor",
value: function getVisitor() {
return this.visitor;
}
}, {
key: "merge",
value: function merge(visitor) {
var _this = this;
Object.keys(visitor).forEach(function (nodeType) {
// visitorFuncs has enter and exit function
var visitorFuncs = visitor[nodeType]; // handle enter function shorthand
if ((0, _isFunction.default)(visitorFuncs)) {
visitorFuncs = {
enter: visitorFuncs
};
} // has visitor aleady
if (nodeType in _this.visitor) {
_this.appendVisitor(nodeType, visitorFuncs);
} else {
_this.createVisitor(nodeType, visitorFuncs);
}
});
}
}, {
key: "appendVisitor",
value: function appendVisitor(nodeType, visitorFuncs) {
if (visitorFuncs.enter) {
this.visitor[nodeType].enter.push(visitorFuncs.enter);
}
if (visitorFuncs.exit) {
this.visitor[nodeType].exit.push(visitorFuncs.exit);
}
}
}, {
key: "createVisitor",
value: function createVisitor(nodeType, visitorFuncs) {
var that = this;
that.visitor[nodeType] = {
enter: visitorFuncs.enter ? [visitorFuncs.enter] : [],
exit: visitorFuncs.exit ? [visitorFuncs.exit] : []
};
}
}]);
return VisitorHandler;
}();
exports.default = VisitorHandler;