"use strict"; const validate = require("jest-validate").validate; const deprecatedConfig = require("./deprecated"); const defaults = { cursorOffset: -1, rangeStart: 0, rangeEnd: Infinity, useTabs: false, tabWidth: 2, printWidth: 80, singleQuote: false, trailingComma: "none", bracketSpacing: true, jsxBracketSameLine: false, parser: "babylon", semi: true }; const exampleConfig = Object.assign({}, defaults, { filepath: "path/to/Filename", printWidth: 80, originalText: "text" }); // Copy options and fill in default values. function normalize(options) { const normalized = Object.assign({}, options || {}); const filepath = normalized.filepath; if (/\.(css|less|scss)$/.test(filepath)) { normalized.parser = "postcss"; } else if (/\.html$/.test(filepath)) { normalized.parser = "parse5"; } else if (/\.(ts|tsx)$/.test(filepath)) { normalized.parser = "typescript"; } else if (/\.(graphql|gql)$/.test(filepath)) { normalized.parser = "graphql"; } else if (/\.json$/.test(filepath)) { normalized.parser = "json"; } if (normalized.parser === "json") { normalized.trailingComma = "none"; } if (typeof normalized.trailingComma === "boolean") { // Support a deprecated boolean type for the trailing comma config // for a few versions. This code can be removed later. normalized.trailingComma = "es5"; console.warn( "Warning: `trailingComma` without any argument is deprecated. " + 'Specify "none", "es5", or "all".' ); } const parserBackup = normalized.parser; if (typeof normalized.parser === "function") { // Delete the function from the object to pass validation. delete normalized.parser; } validate(normalized, { exampleConfig, deprecatedConfig }); // Restore the option back to a function; normalized.parser = parserBackup; // For backward compatibility. Deprecated in 0.0.10 if ("useFlowParser" in normalized) { normalized.parser = normalized.useFlowParser ? "flow" : "babylon"; delete normalized.useFlowParser; } Object.keys(defaults).forEach(k => { if (normalized[k] == null) { normalized[k] = defaults[k]; } }); return normalized; } module.exports = { normalize };