UNPKG

prettier-sql

Version:

Format whitespace in a SQL query to make it more readable

149 lines (118 loc) 7.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.format = exports.supportedDialects = exports.formatters = void 0; var _bigquery = _interopRequireDefault(require("./languages/bigquery.formatter")); var _db = _interopRequireDefault(require("./languages/db2.formatter")); var _hive = _interopRequireDefault(require("./languages/hive.formatter")); var _mariadb = _interopRequireDefault(require("./languages/mariadb.formatter")); var _mysql = _interopRequireDefault(require("./languages/mysql.formatter")); var _n1ql = _interopRequireDefault(require("./languages/n1ql.formatter")); var _plsql = _interopRequireDefault(require("./languages/plsql.formatter")); var _postgresql = _interopRequireDefault(require("./languages/postgresql.formatter")); var _redshift = _interopRequireDefault(require("./languages/redshift.formatter")); var _sparksql = _interopRequireDefault(require("./languages/sparksql.formatter")); var _standardsql = _interopRequireDefault(require("./languages/standardsql.formatter")); var _tsql = _interopRequireDefault(require("./languages/tsql.formatter")); var _types = require("./types"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var formatters = { bigquery: _bigquery["default"], db2: _db["default"], hive: _hive["default"], mariadb: _mariadb["default"], mysql: _mysql["default"], n1ql: _n1ql["default"], plsql: _plsql["default"], postgresql: _postgresql["default"], redshift: _redshift["default"], spark: _sparksql["default"], sql: _standardsql["default"], tsql: _tsql["default"] }; exports.formatters = formatters; var supportedDialects = Object.keys(formatters); exports.supportedDialects = supportedDialects; /** * Format whitespace in a query to make it easier to read. * * @param {string} query - input SQL query string * @param {FormatOptions} cfg * @param {string} cfg.language - Query language, default is Standard SQL * @param {string} cfg.indent - Characters used for indentation, default is " " (2 spaces) * @param {Boolean} cfg.uppercase - Converts keywords to uppercase * @param {KeywordMode} cfg.keywordPosition - Sets main keyword position style, see keywordPosition.md for examples * @param {NewlineMode} cfg.newline - Determines when to break words onto a newline; always | never | lineWidth (break only when > line width) | number (break when > n) * @param {Boolean} cfg.breakBeforeBooleanOperator - Break before boolean operator (AND, OR, XOR) ? * @param {AliasMode} cfg.aliasAs - Whether to use AS in column aliases in only SELECT clause, both SELECT and table aliases, or never * @param {Boolean} cfg.tabulateAlias - Whether to have alias following clause or aligned to right * @param {CommaPosition} cfg.commaPosition - Where to place the comma in listed clauses * @param {ParenOptions} cfg.parenOptions - Various options for parentheses * @param {Boolean} cfg.parenOptions -.openParenNewline Whether to place opening parenthesis on same line or newline * @param {Boolean} cfg.parenOptions -.closeParenNewline Whether to place closing parenthesis on same line or newline * // @param {Boolean} cfg.parenOptions -.reservedFunctionParens Whether to use parenthesis for reserved functions such as COUNT * // @param {Boolean} cfg.parenOptions -.functionParenSpace Whether to add space before reserved function parens * @param {Integer} cfg.lineWidth - Number of characters in each line before breaking, default: 50 * @param {Integer} cfg.linesBetweenQueries - How many line breaks between queries * @param {Boolean} cfg.denseOperators - whether to format operators with spaces * @param {ParamItems} cfg.params - Collection of params for placeholder replacement * @param {Boolean} cfg.semicolonNewline - Whether to place semicolon on newline * @return {string} formatted query */ var format = function format(query) { var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (typeof query !== 'string') { throw new Error('Invalid query argument. Expected string, instead got ' + _typeof(query)); } if (cfg.language && !supportedDialects.includes(cfg.language)) { throw Error("Unsupported SQL dialect: ".concat(cfg.language)); } if (cfg.keywordPosition === _types.KeywordMode.tenSpaceLeft || cfg.keywordPosition === _types.KeywordMode.tenSpaceRight) { cfg.indent = ' '.repeat(10); } if (cfg.newline && !Number.isNaN(+cfg.newline)) { var _cfg$newline; if (((_cfg$newline = cfg.newline) !== null && _cfg$newline !== void 0 ? _cfg$newline : 0) < 0) { throw new Error('Error: newline must be a positive number.'); } if (cfg.newline === 0) { cfg.newline = _types.NewlineMode.always; } } if (cfg.lineWidth && cfg.lineWidth <= 0) { console.warn('Warning: cfg.linewidth was <=0, reset to default value'); cfg.lineWidth = undefined; } var defaultOptions = { language: 'sql', indent: ' ', uppercase: true, keywordPosition: _types.KeywordMode.standard, newline: _types.NewlineMode.always, breakBeforeBooleanOperator: true, aliasAs: _types.AliasMode.select, tabulateAlias: false, commaPosition: _types.CommaPosition.after, parenOptions: { openParenNewline: true, closeParenNewline: true // reservedFunctionParens: true, // functionParenSpace: false, }, lineWidth: 50, linesBetweenQueries: 1, denseOperators: false, semicolonNewline: false }; cfg = _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), cfg), {}, { parenOptions: _objectSpread(_objectSpread({}, defaultOptions.parenOptions), cfg.parenOptions) }); var Formatter = formatters[cfg.language]; return new Formatter(cfg).format(query); }; exports.format = format; //# sourceMappingURL=sqlFormatter.js.map