"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = __importDefault(require("fs")); var types = __importStar(require("ast-types")); exports.types = types; var parser_1 = require("./lib/parser"); exports.parse = parser_1.parse; var printer_1 = require("./lib/printer"); /** * Traverse and potentially modify an abstract syntax tree using a * convenient visitor syntax: * * recast.visit(ast, { * names: [], * visitIdentifier: function(path) { * var node = path.value; * this.visitor.names.push(node.name); * this.traverse(path); * } * }); */ var ast_types_1 = require("ast-types"); exports.visit = ast_types_1.visit; /** * Reprint a modified syntax tree using as much of the original source * code as possible. */ function print(node, options) { return new printer_1.Printer(options).print(node); } exports.print = print; /** * Print without attempting to reuse any original source code. */ function prettyPrint(node, options) { return new printer_1.Printer(options).printGenerically(node); } exports.prettyPrint = prettyPrint; /** * Convenient command-line interface (see e.g. example/add-braces). */ function run(transformer, options) { return runFile(process.argv[2], transformer, options); } exports.run = run; function runFile(path, transformer, options) { fs_1.default.readFile(path, "utf-8", function (err, code) { if (err) { console.error(err); return; } runString(code, transformer, options); }); } function defaultWriteback(output) { process.stdout.write(output); } function runString(code, transformer, options) { var writeback = options && options.writeback || defaultWriteback; transformer(parser_1.parse(code, options), function (node) { writeback(print(node, options).code); }); }