prepack
Version:
Execute a JS bundle, serialize global state and side effects to a snapshot that can be quickly restored.
49 lines (39 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = traverse;
var _babelTypes = require("babel-types");
var t = _interopRequireWildcard(_babelTypes);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
// This is a variation of traverseFast from
// https://github.com/babel/babel/blob/28ae47a174f67a8ae6f4527e0a66e88896814170/packages/babel-types/src/index.js
// This version...
// - takes a callback function that returns a boolean to indicate whether to short-circuit the traversal
// - doesn't pass around or allocate an optional parameter value to the callback.
/**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
function traverse(node, enter) {
if (!node) return;
let keys = t.VISITOR_KEYS[node.type];
if (!keys) return;
let stop = enter(node);
if (stop) return;
for (let key of keys) {
let subNode = node[key];
if (Array.isArray(subNode)) {
for (let elementNode of subNode) {
traverse(elementNode, enter);
}
} else {
traverse(subNode, enter);
}
}
}
//# sourceMappingURL=traverse-fast.js.map