| 
						 | 
						- /*
 -   Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>
 - 
 -   Redistribution and use in source and binary forms, with or without
 -   modification, are permitted provided that the following conditions are met:
 - 
 -     * Redistributions of source code must retain the above copyright
 -       notice, this list of conditions and the following disclaimer.
 -     * Redistributions in binary form must reproduce the above copyright
 -       notice, this list of conditions and the following disclaimer in the
 -       documentation and/or other materials provided with the distribution.
 - 
 -   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 -   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 -   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 -   ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
 -   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 -   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 -   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 -   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 -   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 -   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 - */
 - (function () {
 -     'use strict';
 - 
 -     var estraverse = require('estraverse');
 - 
 -     function isNode(node) {
 -         if (node == null) {
 -             return false;
 -         }
 -         return typeof node === 'object' && typeof node.type === 'string';
 -     }
 - 
 -     function isProperty(nodeType, key) {
 -         return (nodeType === estraverse.Syntax.ObjectExpression || nodeType === estraverse.Syntax.ObjectPattern) && key === 'properties';
 -     }
 - 
 -     function Visitor(visitor, options) {
 -         options = options || {};
 - 
 -         this.__visitor = visitor ||  this;
 -         this.__childVisitorKeys = options.childVisitorKeys
 -             ? Object.assign({}, estraverse.VisitorKeys, options.childVisitorKeys)
 -             : estraverse.VisitorKeys;
 -         if (options.fallback === 'iteration') {
 -             this.__fallback = Object.keys;
 -         } else if (typeof options.fallback === 'function') {
 -             this.__fallback = options.fallback;
 -         }
 -     }
 - 
 -     /* Default method for visiting children.
 -      * When you need to call default visiting operation inside custom visiting
 -      * operation, you can use it with `this.visitChildren(node)`.
 -      */
 -     Visitor.prototype.visitChildren = function (node) {
 -         var type, children, i, iz, j, jz, child;
 - 
 -         if (node == null) {
 -             return;
 -         }
 - 
 -         type = node.type || estraverse.Syntax.Property;
 - 
 -         children = this.__childVisitorKeys[type];
 -         if (!children) {
 -             if (this.__fallback) {
 -                 children = this.__fallback(node);
 -             } else {
 -                 throw new Error('Unknown node type ' + type + '.');
 -             }
 -         }
 - 
 -         for (i = 0, iz = children.length; i < iz; ++i) {
 -             child = node[children[i]];
 -             if (child) {
 -                 if (Array.isArray(child)) {
 -                     for (j = 0, jz = child.length; j < jz; ++j) {
 -                         if (child[j]) {
 -                             if (isNode(child[j]) || isProperty(type, children[i])) {
 -                                 this.visit(child[j]);
 -                             }
 -                         }
 -                     }
 -                 } else if (isNode(child)) {
 -                     this.visit(child);
 -                 }
 -             }
 -         }
 -     };
 - 
 -     /* Dispatching node. */
 -     Visitor.prototype.visit = function (node) {
 -         var type;
 - 
 -         if (node == null) {
 -             return;
 -         }
 - 
 -         type = node.type || estraverse.Syntax.Property;
 -         if (this.__visitor[type]) {
 -             this.__visitor[type].call(this, node);
 -             return;
 -         }
 -         this.visitChildren(node);
 -     };
 - 
 -     exports.version = require('./package.json').version;
 -     exports.Visitor = Visitor;
 -     exports.visit = function (node, visitor, options) {
 -         var v = new Visitor(visitor, options);
 -         v.visit(node);
 -     };
 - }());
 - /* vim: set sw=4 ts=4 et tw=80 : */
 
 
  |