const replPlugin = ({ types: t }) => ({ visitor: { ModuleDeclaration(path) { throw path.buildCodeFrameError("Modules aren't supported in the REPL"); }, VariableDeclaration(path) { if (path.node.kind !== "var") { throw path.buildCodeFrameError( "Only `var` variables are supported in the REPL", ); } }, Program(path) { if (path.get("body").some(child => child.isExpressionStatement())) return; // If the executed code doesn't evaluate to a value, // prevent implicit strict mode from printing 'use strict'. path.pushContainer( "body", t.expressionStatement(t.identifier("undefined")), ); }, }, });
function pushPlugin(str) { return { visitor: { Program(path) { path.pushContainer( "body", babel.types.expressionStatement(babel.types.identifier(str)), ); }, }, }; }