UNPKG

canner-compiler

Version:

Compiler for Canner CMS schema

83 lines (68 loc) 2.27 kB
"use strict"; 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;