text: const noop = function() {};
  
  function ensureFunction(value) {
      return typeof value === 'function' ? value : noop;
  }
  
  export function walk(node, options, context) {
      function walk(node) {
          enter.call(context, node);
  
          switch (node.type) {
              case 'Group':
                  node.terms.forEach(walk);
                  break;
  
              case 'Multiplier':
                  walk(node.term);
                  break;
  
              case 'Type':
              case 'Property':
              case 'Keyword':
              case 'AtKeyword':
              case 'Function':
              case 'String':
              case 'Token':
              case 'Comma':
                  break;
  
              default:
                  throw new Error('Unknown type: ' + node.type);
          }
  
          leave.call(context, node);
      }
  
      let enter = noop;
      let leave = noop;
  
      if (typeof options === 'function') {
          enter = options;
      } else if (options) {
          enter = ensureFunction(options.enter);
          leave = ensureFunction(options.leave);
      }
  
      if (enter === noop && leave === noop) {
          throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');
      }
  
      walk(node, context);
  };
  