var defaults = { // If you want to use a different branch of esprima, or any other // module that supports a .parse function, pass that module object to // recast.parse as options.parser (legacy synonym: options.esprima). parser: require("esprima"), // Number of spaces the pretty-printer should use per tab for // indentation. If you do not pass this option explicitly, it will be // (quite reliably!) inferred from the original code. tabWidth: 4, // If you really want the pretty-printer to use tabs instead of // spaces, make this option true. useTabs: false, // The reprinting code leaves leading whitespace untouched unless it // has to reindent a line, or you pass false for this option. reuseWhitespace: true, // Override this option to use a different line terminator, e.g. \r\n. lineTerminator: require("os").EOL, // Some of the pretty-printer code (such as that for printing function // parameter lists) makes a valiant attempt to prevent really long // lines. You can adjust the limit by changing this option; however, // there is no guarantee that line length will fit inside this limit. wrapColumn: 74, // Aspirational for now. // Pass a string as options.sourceFileName to recast.parse to tell the // reprinter to keep track of reused code so that it can construct a // source map automatically. sourceFileName: null, // Pass a string as options.sourceMapName to recast.print, and // (provided you passed options.sourceFileName earlier) the // PrintResult of recast.print will have a .map property for the // generated source map. sourceMapName: null, // If provided, this option will be passed along to the source map // generator as a root directory for relative source file paths. sourceRoot: null, // If you provide a source map that was generated from a previous call // to recast.print as options.inputSourceMap, the old source map will // be composed with the new source map. inputSourceMap: null, // If you want esprima to generate .range information (recast only // uses .loc internally), pass true for this option. range: false, // If you want esprima not to throw exceptions when it encounters // non-fatal errors, keep this option true. tolerant: true, // If you want to override the quotes used in string literals, specify // either "single", "double", or "auto" here ("auto" will select the one // which results in the shorter literal) // Otherwise, double quotes are used. quote: null, // Controls the printing of trailing commas in object literals, // array expressions and function parameters. // // This option could either be: // * Boolean - enable/disable in all contexts (objects, arrays and function params). // * Object - enable/disable per context. // // Example: // trailingComma: { // objects: true, // arrays: true, // parameters: false, // } trailingComma: false, // Controls the printing of spaces inside array brackets. // See: http://eslint.org/docs/rules/array-bracket-spacing arrayBracketSpacing: false, // Controls the printing of spaces inside object literals, // destructuring assignments, and import/export specifiers. // See: http://eslint.org/docs/rules/object-curly-spacing objectCurlySpacing: true, // If you want parenthesis to wrap single-argument arrow function parameter // lists, pass true for this option. arrowParensAlways: false, // There are 2 supported syntaxes (`,` and `;`) in Flow Object Types; // The use of commas is in line with the more popular style and matches // how objects are defined in JS, making it a bit more natural to write. flowObjectCommas: true, }, hasOwn = defaults.hasOwnProperty; // Copy options and fill in default values. exports.normalize = function(options) { options = options || defaults; function get(key) { return hasOwn.call(options, key) ? options[key] : defaults[key]; } return { tabWidth: +get("tabWidth"), useTabs: !!get("useTabs"), reuseWhitespace: !!get("reuseWhitespace"), lineTerminator: get("lineTerminator"), wrapColumn: Math.max(get("wrapColumn"), 0), sourceFileName: get("sourceFileName"), sourceMapName: get("sourceMapName"), sourceRoot: get("sourceRoot"), inputSourceMap: get("inputSourceMap"), parser: get("esprima") || get("parser"), range: get("range"), tolerant: get("tolerant"), quote: get("quote"), trailingComma: get("trailingComma"), arrayBracketSpacing: get("arrayBracketSpacing"), objectCurlySpacing: get("objectCurlySpacing"), arrowParensAlways: get("arrowParensAlways"), flowObjectCommas: get("flowObjectCommas"), }; };