UNPKG

xy-sql-formatter

Version:

Format whitespace in a SQL query to make it more readable

53 lines (44 loc) 1.59 kB
import { FormatOptions } from './FormatOptions.js'; import { ParamItems } from './formatter/Params.js'; import { ParamTypes } from './lexer/TokenizerOptions.js'; export class ConfigError extends Error {} export function validateConfig(cfg: FormatOptions): FormatOptions { const removedOptions = [ 'multilineLists', 'newlineBeforeOpenParen', 'newlineBeforeCloseParen', 'aliasAs', 'commaPosition', 'tabulateAlias', ]; for (const optionName of removedOptions) { if (optionName in cfg) { throw new ConfigError(`${optionName} config is no more supported.`); } } if (cfg.expressionWidth <= 0) { throw new ConfigError( `expressionWidth config must be positive number. Received ${cfg.expressionWidth} instead.` ); } if (cfg.params && !validateParams(cfg.params)) { // eslint-disable-next-line no-console console.warn('WARNING: All "params" option values should be strings.'); } if (cfg.paramTypes && !validateParamTypes(cfg.paramTypes)) { throw new ConfigError( 'Empty regex given in custom paramTypes. That would result in matching infinite amount of parameters.' ); } return cfg; } function validateParams(params: ParamItems | string[]): boolean { const paramValues = params instanceof Array ? params : Object.values(params); return paramValues.every(p => typeof p === 'string'); } function validateParamTypes(paramTypes: ParamTypes): boolean { if (paramTypes.custom && Array.isArray(paramTypes.custom)) { return paramTypes.custom.every(p => p.regex !== ''); } return true; }