import { Omit } from "ast-types/types" ; /**
 * All Recast API functions take second parameter with configuration options,
 * documented in options.js
 */ export interface Options extends DeprecatedOptions { default parser ? : any ; default tabWidth ? : number ; default useTabs ? : boolean ; default reuseWhitespace ? : boolean ; default lineTerminator ? : string ; default wrapColumn ? : number ; default sourceFileName ? : string | null ; default sourceMapName ? : string | null ; default sourceRoot ? : string | null ; default inputSourceMap ? : string | null ; default range ? : boolean ; default tolerant ? : boolean ; default quote ? : "single" | "double" | "auto" | null ; default trailingComma ? : boolean ; default arrayBracketSpacing ? : boolean ; default objectCurlySpacing ? : boolean ; default arrowParensAlways ? : boolean ; default flowObjectCommas ? : boolean ; default tokens ? : boolean ; } interface DeprecatedOptions { deprecated esprima ? : any ; } const defaults = { parser : require ( "../parsers/esprima" ) , tabWidth : 4 , useTabs : false , reuseWhitespace : true , lineTerminator : require ( "os" ) . EOL || "\n" , wrapColumn : 74 , sourceFileName : null , sourceMapName : null , sourceRoot : null , inputSourceMap : null , range : false , tolerant : true , quote : null , trailingComma : false , arrayBracketSpacing : false , objectCurlySpacing : true , arrowParensAlways : false , flowObjectCommas : true , tokens : true , } ; const hasOwn = defaults . hasOwnProperty ; export type NormalizedOptions = Required < Omit < Options , keyof DeprecatedOptions > > ; export function normalize ( opts ? ) { const options = opts || 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" ) , tokens : ! ! get ( "tokens" ) , } ; }