sql-format-plus 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ !function(E,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((E="undefined"!=typeof globalThis?globalThis:E||self).SqlFormatPlus={})}(this,function(E){"use strict";const e="top-level",T="block-level",R="keyword-block";class t{constructor(E){this.indentTypes=[],this.indent=E||" "}getIndent(){return this.indent.repeat(this.indentTypes.length)}increaseToplevel(){this.indentTypes.push(e)}increaseBlockLevel(){this.indentTypes.push(T)}increaseKeywordBlock(){this.indentTypes.push(R)}decreaseTopLevel(){this.indentTypes[this.indentTypes.length-1]===e&&this.indentTypes.pop()}decreaseBlockLevel(){for(;this.indentTypes[this.indentTypes.length-1]===e;)this.indentTypes.pop();this.indentTypes[this.indentTypes.length-1]===T&&this.indentTypes.pop()}decreaseKeywordBlock(){for(;this.indentTypes[this.indentTypes.length-1]===e;)this.indentTypes.pop();this.indentTypes[this.indentTypes.length-1]===R&&this.indentTypes.pop()}isBlockLevel(){return this.indentTypes[this.indentTypes.length-1]===T}}const N="whitespace",A="word",I="string",O="reserved",S="reserved-toplevel",n="reserved-newline",L="reserved-keyword-block-start",s="reserved-keyword-block-end",i="operator",r="open-paren",C="close-paren",o="line-comment",a="block-comment",D="number",U="placeholder";class h{constructor(){this.level=0}beginIfPossible(E,e){0===this.level&&this.isInlineBlock(E,e)?this.level=1:this.level>0?this.level++:this.level=0}end(){this.level--}isActive(){return this.level>0}isInlineBlock(E,e){let T=0,R=0;const t=E[e];for(let N=e;N<E.length;N++){const e=E[N];if(T+=e.value.length,T>50)return!1;if(e.type===r)R++;else if(this.isClosingToken(e,t)&&(R--,0===R))return!0;if(this.isForbiddenToken(e))return!1}return!1}isForbiddenToken({type:E,value:e}){return E===S||E===n||E===L||E===o||E===a||";"===e}isClosingToken(E,e){return E.type===C||/^CASE$/i.test(e.value)&&E.type===s}}class d{constructor(E){this.index=0,this.params=E}get({key:E,value:e}){if(!this.params)return e;let T;return T=Array.isArray(this.params)?E?this.params[Number(E)]:this.params[this.index++]:E?this.params[E]:this.params[this.index++],void 0===T?e:String(T)}}class P{constructor(){this.chunks=[]}append(E){E&&this.chunks.push(E)}trimEnd(){for(;this.chunks.length>0;){const E=this.chunks.length-1,e=this.chunks[E],T=e.replace(/\s+$/,"");if(T.length===e.length)return;if(T.length>0)return void(this.chunks[E]=T);this.chunks.pop()}}addNewline(E){this.trimEnd(),this.append(`\n${E}`)}toString(){return this.chunks.join("")}}class l{constructor(E,e){this.previousReservedWord={},this.keywordBlockEndPending=!1,this.cfg=E||{},this.indentation=new t(this.cfg.indent),this.inlineBlock=new h,this.params=new d(this.cfg.params),this.tokenizer=e}format(E){const e=this.tokenizer.tokenize(E);return this.getFormattedQueryFromTokens(e).trim()}getFormattedQueryFromTokens(E){const e=new P;return E.forEach((T,R)=>{T.type!==N&&(T.type===o?this.formatLineComment(T,e):T.type===a?this.formatBlockComment(T,e):T.type===L?(this.formatKeywordBlockStart(T,e),this.previousReservedWord=T):T.type===s?(this.formatKeywordBlockEnd(T,e),this.previousReservedWord=T):T.type===S?(this.formatToplevelReservedWord(T,e),this.previousReservedWord=T):T.type===n?(this.formatNewlineReservedWord(T,e),this.previousReservedWord=T):T.type===O?(this.formatWithSpaces(T,e),this.previousReservedWord=T):T.type===r?this.formatOpeningParentheses(E,R,e):T.type===C?this.formatClosingParentheses(T,e):T.type===U?this.formatPlaceholder(T,e):","===T.value?this.formatComma(T,e):":"===T.value?this.formatWithSpaceAfter(T,e):";"===T.value?this.formatSemicolon(T,e):"."===T.value?this.formatWithoutSpaces(T,e):this.formatWithSpaces(T,e))}),e.toString()}formatLineComment(E,e){e.append(E.value),this.addNewline(e)}formatBlockComment(E,e){this.addNewline(e),e.append(this.indentComment(E.value)),this.addNewline(e)}indentComment(E){return E.replace(/\n/g,`\n${this.indentation.getIndent()}`)}formatKeywordBlockStart(E,e){if(/^LOOP$/i.test(E.value)&&/^END$/i.test(this.previousReservedWord.value||""))return this.formatWithSpaces(E,e),void(this.keywordBlockEndPending=!0);this.indentation.decreaseTopLevel(),this.addNewline(e),this.indentation.increaseKeywordBlock(),e.append(this.equalizeWhitespace(E.value)),this.addNewline(e)}formatKeywordBlockEnd(E,e){this.inlineBlock.isActive()||this.indentation.isBlockLevel()?this.formatClosingParentheses(E,e):(this.indentation.decreaseKeywordBlock(),this.addNewline(e),e.append(`${this.equalizeWhitespace(E.value)} `),this.keywordBlockEndPending=!0)}formatToplevelReservedWord(E,e){this.indentation.decreaseTopLevel(),this.addNewline(e),this.indentation.increaseToplevel(),e.append(this.equalizeWhitespace(E.value)),this.addNewline(e)}formatNewlineReservedWord(E,e){this.addNewline(e),e.append(`${this.equalizeWhitespace(E.value)} `)}equalizeWhitespace(E){return E.replace(/\s+/g," ")}formatOpeningParentheses(E,e,T){const R=E[e-1];R&&R.type!==N&&R.type!==r&&T.trimEnd(),T.append(E[e].value),this.inlineBlock.beginIfPossible(E,e),this.inlineBlock.isActive()||(this.indentation.increaseBlockLevel(),this.addNewline(T))}formatClosingParentheses(E,e){if(this.inlineBlock.isActive())return this.inlineBlock.end(),void this.formatWithSpaceAfter(E,e);this.indentation.decreaseBlockLevel(),this.addNewline(e),this.formatWithSpaces(E,e)}formatPlaceholder(E,e){e.append(`${this.params.get(E)} `)}formatComma(E,e){e.trimEnd(),e.append(`${E.value} `),this.inlineBlock.isActive()||/^LIMIT$/i.test(this.previousReservedWord.value||"")||this.addNewline(e)}formatWithSpaceAfter(E,e){e.trimEnd(),e.append(`${E.value} `)}formatWithoutSpaces(E,e){e.trimEnd(),e.append(E.value)}formatSemicolon(E,e){this.formatWithoutSpaces(E,e),this.keywordBlockEndPending&&(this.addNewline(e),this.keywordBlockEndPending=!1)}formatWithSpaces(E,e){e.append(`${E.value} `)}addNewline(E){E.addNewline(this.indentation.getIndent())}}const M=E=>E.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&");class c{constructor(E){this.WHITESPACE_REGEX=/(\s+)/y,this.NUMBER_REGEX=/([0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)\b/y,this.SIGNED_NUMBER_REGEX=/(-\s*(?:[0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)\b)/y,this.ASSIGNMENT_REGEX=/(:=)/y,this.OPERATOR_REGEX=/(!=|<>|==|<=|>=|!<|!>|\|\||::|->>|->|~~\*|~~|!~~\*|!~~|~\*|!~\*|!~|.)/y,this.BLOCK_COMMENT_REGEX=/(\/\*[^]*?(?:\*\/|$))/y,this.LINE_COMMENT_REGEX=this.createLineCommentRegex(E.lineCommentTypes),this.RESERVED_TOPLEVEL_REGEX=this.createReservedWordRegex(E.reservedToplevelWords),this.RESERVED_NEWLINE_REGEX=this.createReservedWordRegex(E.reservedNewlineWords),this.RESERVED_PLAIN_REGEX=this.createReservedWordRegex(E.reservedWords),this.KEYWORD_BLOCK_START_REGEX=this.createOptionalReservedWordRegex(E.keywordBlockStarts),this.KEYWORD_BLOCK_END_REGEX=this.createOptionalReservedWordRegex(E.keywordBlockEnds),this.WORD_REGEX=this.createWordRegex(E.specialWordChars),this.STRING_REGEX=this.createStringRegex(E.stringTypes),this.OPEN_PAREN_REGEX=this.createParenRegex(E.openParens),this.CLOSE_PAREN_REGEX=this.createParenRegex(E.closeParens),this.INDEXED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(E.indexedPlaceholderTypes,"[0-9]*"),this.IDENT_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(E.namedPlaceholderTypes,"[a-zA-Z0-9._$]+"),this.STRING_NAMED_PLACEHOLDER_REGEX=this.createPlaceholderRegex(E.namedPlaceholderTypes,this.createStringPattern(E.stringTypes))}tokenize(E){const e=[];let T,R=0;for(;R<E.length;){const t=this.getNextToken(E,R,T);R+=t.value.length,e.push(t),t.type!==N&&(T=t)}return e}createLineCommentRegex(E){return new RegExp(`((?:${E.map(E=>M(E)).join("|")}).*?(?:\n|$))`,"y")}createReservedWordRegex(E){const e=E.join("|").replace(/ /g,"\\s+");return new RegExp(`(${e})\\b`,"iy")}createOptionalReservedWordRegex(E){return!(!E||0===E.length)&&this.createReservedWordRegex(E)}createWordRegex(E=[]){return new RegExp(`([\\w${E.map(E=>M(E)).join("")}]+)`,"y")}createStringRegex(E){return new RegExp(`(${this.createStringPattern(E)})`,"y")}createStringPattern(E){const e={"``":"((`[^`]*($|`))+)","[]":"((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)",'""':'((\\"[^\\"\\\\]*(?:\\\\.[^\\"\\\\]*)*(\\"|$))+)',"''":"(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)","N''":"((N'[^N'\\\\]*(?:\\\\.[^N'\\\\]*)*('|$))+)"};return E.map(E=>e[E]).join("|")}createParenRegex(E){return new RegExp(`(${E.map(E=>this.escapeParen(E)).join("|")})`,"iy")}escapeParen(E){return 1===E.length?M(E):`\\b${E}\\b`}createPlaceholderRegex(E,e){if(!E||0===E.length)return!1;const T=E.map(E=>M(E)).join("|");return new RegExp(`((?:${T})(?:${e}))`,"y")}getNextToken(E,e,T){return this.getWhitespaceToken(E,e)||this.getCommentToken(E,e)||this.getStringToken(E,e)||this.getOpenParenToken(E,e)||this.getCloseParenToken(E,e)||this.getAssignmentToken(E,e)||this.getPlaceholderToken(E,e)||this.getNumberToken(E,e,T)||this.getKeywordBlockToken(E,e)||this.getReservedWordToken(E,e,T)||this.getWordToken(E,e)||this.getOperatorToken(E,e)}getWhitespaceToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:N,regex:this.WHITESPACE_REGEX})}getCommentToken(E,e){return this.getLineCommentToken(E,e)||this.getBlockCommentToken(E,e)}getLineCommentToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:o,regex:this.LINE_COMMENT_REGEX})}getBlockCommentToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:a,regex:this.BLOCK_COMMENT_REGEX})}getStringToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:I,regex:this.STRING_REGEX})}getOpenParenToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:r,regex:this.OPEN_PAREN_REGEX})}getCloseParenToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:C,regex:this.CLOSE_PAREN_REGEX})}getAssignmentToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:i,regex:this.ASSIGNMENT_REGEX})}getPlaceholderToken(E,e){return this.getIdentNamedPlaceholderToken(E,e)||this.getStringNamedPlaceholderToken(E,e)||this.getIndexedPlaceholderToken(E,e)}getIdentNamedPlaceholderToken(E,e){return this.getPlaceholderTokenWithKey({input:E,index:e,regex:this.IDENT_NAMED_PLACEHOLDER_REGEX,parseKey:E=>E.slice(1)})}getStringNamedPlaceholderToken(E,e){return this.getPlaceholderTokenWithKey({input:E,index:e,regex:this.STRING_NAMED_PLACEHOLDER_REGEX,parseKey:E=>this.getEscapedPlaceholderKey({key:E.slice(2,-1),quoteChar:E.slice(-1)})})}getIndexedPlaceholderToken(E,e){return this.getPlaceholderTokenWithKey({input:E,index:e,regex:this.INDEXED_PLACEHOLDER_REGEX,parseKey:E=>E.slice(1)})}getPlaceholderTokenWithKey({input:E,index:e,regex:T,parseKey:R}){const t=this.getTokenOnFirstMatch({input:E,index:e,regex:T,type:U});return t&&(t.key=R(t.value)),t}getEscapedPlaceholderKey({key:E,quoteChar:e}){return E.replace(new RegExp(`${M("\\")}${e}`,"g"),e)}getNumberToken(E,e,T){const R=this.canReadSignedNumber(T)?this.getTokenOnFirstMatch({input:E,index:e,type:D,regex:this.SIGNED_NUMBER_REGEX}):void 0;return R||this.getTokenOnFirstMatch({input:E,index:e,type:D,regex:this.NUMBER_REGEX})}canReadSignedNumber(E){return!E||E.type===i||E.type===r||","===E.value}getOperatorToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:i,regex:this.OPERATOR_REGEX})}getKeywordBlockToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:s,regex:this.KEYWORD_BLOCK_END_REGEX})||this.getTokenOnFirstMatch({input:E,index:e,type:L,regex:this.KEYWORD_BLOCK_START_REGEX})}getReservedWordToken(E,e,T){if("."!==(null==T?void 0:T.value))return this.getToplevelReservedToken(E,e)||this.getNewlineReservedToken(E,e)||this.getPlainReservedToken(E,e)}getToplevelReservedToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:S,regex:this.RESERVED_TOPLEVEL_REGEX})}getNewlineReservedToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:n,regex:this.RESERVED_NEWLINE_REGEX})}getPlainReservedToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:O,regex:this.RESERVED_PLAIN_REGEX})}getWordToken(E,e){return this.getTokenOnFirstMatch({input:E,index:e,type:A,regex:this.WORD_REGEX})}getTokenOnFirstMatch({input:E,index:e,type:T,regex:R}){if(!R)return;R.lastIndex=e;const t=R.exec(E);return t&&t.index===e?{type:T,value:t[1]}:void 0}}const p=["ABS","ACTIVATE","ALIAS","ALL","ALLOCATE","ALLOW","ALTER","ANY","ARE","ARRAY","AS","ASC","ASENSITIVE","ASSOCIATE","ASUTIME","ASYMMETRIC","AT","ATOMIC","ATTRIBUTES","AUDIT","AUTHORIZATION","AUX","AUXILIARY","AVG","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BLOB","BOOLEAN","BOTH","BUFFERPOOL","BY","CACHE","CALL","CALLED","CAPTURE","CARDINALITY","CASCADED","CASE","CAST","CCSID","CEIL","CEILING","CHAR","CHARACTER","CHARACTER_LENGTH","CHAR_LENGTH","CHECK","CLOB","CLONE","CLOSE","CLUSTER","COALESCE","COLLATE","COLLECT","COLLECTION","COLLID","COLUMN","COMMENT","COMMIT","CONCAT","CONDITION","CONNECT","CONNECTION","CONSTRAINT","CONTAINS","CONTINUE","CONVERT","CORR","CORRESPONDING","COUNT","COUNT_BIG","COVAR_POP","COVAR_SAMP","CREATE","CROSS","CUBE","CUME_DIST","CURRENT","CURRENT_DATE","CURRENT_DEFAULT_TRANSFORM_GROUP","CURRENT_LC_CTYPE","CURRENT_PATH","CURRENT_ROLE","CURRENT_SCHEMA","CURRENT_SERVER","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_TIMEZONE","CURRENT_TRANSFORM_GROUP_FOR_TYPE","CURRENT_USER","CURSOR","CYCLE","DATA","DATABASE","DATAPARTITIONNAME","DATAPARTITIONNUM","DATE","DAY","DAYS","DB2GENERAL","DB2GENRL","DB2SQL","DBINFO","DBPARTITIONNAME","DBPARTITIONNUM","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DEFAULTS","DEFINITION","DELETE","DENSERANK","DENSE_RANK","DEREF","DESCRIBE","DESCRIPTOR","DETERMINISTIC","DIAGNOSTICS","DISABLE","DISALLOW","DISCONNECT","DISTINCT","DO","DOCUMENT","DOUBLE","DROP","DSSIZE","DYNAMIC","EACH","EDITPROC","ELEMENT","ELSE","ELSEIF","ENABLE","ENCODING","ENCRYPTION","END","END-EXEC","ENDING","ERASE","ESCAPE","EVERY","EXCEPTION","EXCLUDING","EXCLUSIVE","EXEC","EXECUTE","EXISTS","EXIT","EXP","EXPLAIN","EXTENDED","EXTERNAL","EXTRACT","FALSE","FENCED","FETCH","FIELDPROC","FILE","FILTER","FINAL","FIRST","FLOAT","FLOOR","FOR","FOREIGN","FREE","FULL","FUNCTION","FUSION","GENERAL","GENERATED","GET","GLOBAL","GOTO","GRANT","GRAPHIC","GROUP","GROUPING","HANDLER","HASH","HASHED_VALUE","HINT","HOLD","HOUR","HOURS","IDENTITY","IF","IMMEDIATE","IN","INCLUDING","INCLUSIVE","INCREMENT","INDEX","INDICATOR","INDICATORS","INF","INFINITY","INHERIT","INNER","INOUT","INSENSITIVE","INSERT","INT","INTEGER","INTEGRITY","INTERSECTION","INTERVAL","INTO","IS","ISOBID","ISOLATION","ITERATE","JAR","JAVA","KEEP","KEY","LABEL","LANGUAGE","LARGE","LATERAL","LC_CTYPE","LEADING","LEAVE","LEFT","LIKE","LINKTYPE","LN","LOCAL","LOCALDATE","LOCALE","LOCALTIME","LOCALTIMESTAMP","LOCATOR","LOCATORS","LOCK","LOCKMAX","LOCKSIZE","LONG","LOOP","LOWER","MAINTAINED","MATCH","MATERIALIZED","MAX","MAXVALUE","MEMBER","MERGE","METHOD","MICROSECOND","MICROSECONDS","MIN","MINUTE","MINUTES","MINVALUE","MOD","MODE","MODIFIES","MODULE","MONTH","MONTHS","MULTISET","NAN","NATIONAL","NATURAL","NCHAR","NCLOB","NEW","NEW_TABLE","NEXTVAL","NO","NOCACHE","NOCYCLE","NODENAME","NODENUMBER","NOMAXVALUE","NOMINVALUE","NONE","NOORDER","NORMALIZE","NORMALIZED","NOT","NULL","NULLIF","NULLS","NUMERIC","NUMPARTS","OBID","OCTET_LENGTH","OF","OFFSET","OLD","OLD_TABLE","ON","ONLY","OPEN","OPTIMIZATION","OPTIMIZE","OPTION","ORDER","OUT","OUTER","OVER","OVERLAPS","OVERLAY","OVERRIDING","PACKAGE","PADDED","PAGESIZE","PARAMETER","PART","PARTITION","PARTITIONED","PARTITIONING","PARTITIONS","PASSWORD","PATH","PERCENTILE_CONT","PERCENTILE_DISC","PERCENT_RANK","PIECESIZE","PLAN","POSITION","POWER","PRECISION","PREPARE","PREVVAL","PRIMARY","PRIQTY","PRIVILEGES","PROCEDURE","PROGRAM","PSID","PUBLIC","QUERY","QUERYNO","RANGE","RANK","READ","READS","REAL","RECOVERY","RECURSIVE","REF","REFERENCES","REFERENCING","REFRESH","REGR_AVGX","REGR_AVGY","REGR_COUNT","REGR_INTERCEPT","REGR_R2","REGR_SLOPE","REGR_SXX","REGR_SXY","REGR_SYY","RELEASE","RENAME","REPEAT","RESET","RESIGNAL","RESTART","RESTRICT","RESULT","RESULT_SET_LOCATOR","RETURN","RETURNS","REVOKE","RIGHT","ROLE","ROLLBACK","ROLLUP","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_UP","ROUND_UP","ROUTINE","ROW","ROWNUMBER","ROWS","ROWSET","ROW_NUMBER","RRN","RUN","SAVEPOINT","SCHEMA","SCOPE","SCRATCHPAD","SCROLL","SEARCH","SECOND","SECONDS","SECQTY","SECURITY","SENSITIVE","SEQUENCE","SESSION","SESSION_USER","SIGNAL","SIMILAR","SIMPLE","SMALLINT","SNAN","SOME","SOURCE","SPECIFIC","SPECIFICTYPE","SQL","SQLEXCEPTION","SQLID","SQLSTATE","SQLWARNING","SQRT","STACKED","STANDARD","START","STARTING","STATEMENT","STATIC","STATMENT","STAY","STDDEV_POP","STDDEV_SAMP","STOGROUP","STORES","STYLE","SUBMULTISET","SUBSTRING","SUM","SUMMARY","SYMMETRIC","SYNONYM","SYSFUN","SYSIBM","SYSPROC","SYSTEM","SYSTEM_USER","TABLE","TABLESAMPLE","TABLESPACE","THEN","TIME","TIMESTAMP","TIMEZONE_HOUR","TIMEZONE_MINUTE","TO","TRAILING","TRANSACTION","TRANSLATE","TRANSLATION","TREAT","TRIGGER","TRIM","TRUE","TRUNCATE","TYPE","UESCAPE","UNDO","UNIQUE","UNKNOWN","UNNEST","UNTIL","UPPER","USAGE","USER","USING","VALIDPROC","VALUE","VARCHAR","VARIABLE","VARIANT","VARYING","VAR_POP","VAR_SAMP","VCAT","VERSION","VIEW","VOLATILE","VOLUMES","WHEN","WHENEVER","WHILE","WIDTH_BUCKET","WINDOW","WITH","WITHIN","WITHOUT","WLM","WRITE","XMLELEMENT","XMLEXISTS","XMLNAMESPACES","YEAR","YEARS"],_=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GROUP BY","GO","HAVING","INSERT INTO","INTERSECT","LIMIT","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UNION ALL","UPDATE","VALUES","WHERE"],G=["AND","CROSS JOIN","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN"];let g;class B{constructor(E){this.cfg=E}format(E){return g||(g=new c({reservedWords:p,reservedToplevelWords:_,reservedNewlineWords:G,stringTypes:['""',"''","``","[]"],openParens:["("],closeParens:[")"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["#","@"]})),new l(this.cfg,g).format(E)}}const F=["ALL","ALTER","ANALYZE","AND","ANY","ARRAY","AS","ASC","BEGIN","BETWEEN","BINARY","BOOLEAN","BREAK","BUCKET","BUILD","BY","CALL","CASE","CAST","CLUSTER","COLLATE","COLLECTION","COMMIT","CONNECT","CONTINUE","CORRELATE","COVER","CREATE","DATABASE","DATASET","DATASTORE","DECLARE","DECREMENT","DELETE","DERIVED","DESC","DESCRIBE","DISTINCT","DO","DROP","EACH","ELEMENT","ELSE","END","EVERY","EXCEPT","EXCLUDE","EXECUTE","EXISTS","EXPLAIN","FALSE","FETCH","FIRST","FLATTEN","FOR","FORCE","FROM","FUNCTION","GRANT","GROUP","GSI","HAVING","IF","IGNORE","ILIKE","IN","INCLUDE","INCREMENT","INDEX","INFER","INLINE","INNER","INSERT","INTERSECT","INTO","IS","JOIN","KEY","KEYS","KEYSPACE","KNOWN","LAST","LEFT","LET","LETTING","LIKE","LIMIT","LSM","MAP","MAPPING","MATCHED","MATERIALIZED","MERGE","MINUS","MISSING","NAMESPACE","NEST","NOT","NULL","NUMBER","OBJECT","OFFSET","ON","OPTION","OR","ORDER","OUTER","OVER","PARSE","PARTITION","PASSWORD","PATH","POOL","PREPARE","PRIMARY","PRIVATE","PRIVILEGE","PROCEDURE","PUBLIC","RAW","REALM","REDUCE","RENAME","RETURN","RETURNING","REVOKE","RIGHT","ROLE","ROLLBACK","SATISFIES","SCHEMA","SELECT","SELF","SEMI","SET","SHOW","SOME","START","STATISTICS","STRING","SYSTEM","THEN","TO","TRANSACTION","TRIGGER","TRUE","TRUNCATE","UNDER","UNION","UNIQUE","UNKNOWN","UNNEST","UNSET","UPDATE","UPSERT","USE","USER","USING","VALIDATE","VALUE","VALUED","VALUES","VIA","VIEW","WHEN","WHERE","WHILE","WITH","WITHIN","WORK","XOR"],u=["DELETE FROM","EXCEPT ALL","EXCEPT","EXPLAIN DELETE FROM","EXPLAIN UPDATE","EXPLAIN UPSERT","FROM","GROUP BY","HAVING","INFER","INSERT INTO","INTERSECT ALL","INTERSECT","LET","LIMIT","MERGE","NEST","ORDER BY","PREPARE","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UNION ALL","UNION","UNNEST","UPDATE","UPSERT","USE KEYS","VALUES","WHERE"],H=["AND","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","XOR"];let W;class m{constructor(E){this.cfg=E}format(E){return W||(W=new c({reservedWords:F,reservedToplevelWords:u,reservedNewlineWords:H,stringTypes:['""',"''","``"],openParens:["(","[","{"],closeParens:[")","]","}"],namedPlaceholderTypes:["$"],lineCommentTypes:["#","--"]})),new l(this.cfg,W).format(E)}}const k=["A","ACCESSIBLE","AGENT","AGGREGATE","ALL","ALTER","ANY","ARRAY","AS","ASC","AT","ATTRIBUTE","AUTHID","AVG","BETWEEN","BFILE_BASE","BINARY_INTEGER","BINARY","BLOB_BASE","BLOCK","BODY","BOOLEAN","BOTH","BOUND","BULK","BY","BYTE","C","CALL","CALLING","CASCADE","CASE","CHAR_BASE","CHAR","CHARACTER","CHARSET","CHARSETFORM","CHARSETID","CHECK","CLOB_BASE","CLONE","CLOSE","CLUSTER","CLUSTERS","COALESCE","COLAUTH","COLLECT","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPILED","COMPRESS","CONNECT","CONSTANT","CONSTRUCTOR","CONTEXT","CONTINUE","CONVERT","COUNT","CRASH","CREATE","CREDENTIAL","CURRENT","CURRVAL","CURSOR","CUSTOMDATUM","DANGLING","DATA","DATE_BASE","DATE","DAY","DECIMAL","DEFAULT","DEFINE","DELETE","DESC","DETERMINISTIC","DIRECTORY","DISTINCT","DO","DOUBLE","DROP","DURATION","ELEMENT","ELSIF","EMPTY","ESCAPE","EXCEPTIONS","EXCLUSIVE","EXECUTE","EXISTS","EXIT","EXTENDS","EXTERNAL","EXTRACT","FALSE","FETCH","FINAL","FIRST","FIXED","FLOAT","FOR","FORALL","FORCE","FROM","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HASH","HEAP","HIDDEN","HOUR","IDENTIFIED","IF","IMMEDIATE","IN","INCLUDING","INDEX","INDEXES","INDICATOR","INDICES","INFINITE","INSTANTIABLE","INT","INTEGER","INTERFACE","INTERVAL","INTO","INVALIDATE","IS","ISOLATION","JAVA","LANGUAGE","LARGE","LEADING","LENGTH","LEVEL","LIBRARY","LIKE","LIKE2","LIKE4","LIKEC","LIMITED","LOCAL","LOCK","LONG","MAP","MAX","MAXLEN","MEMBER","MERGE","MIN","MINUS","MINUTE","MLSLABEL","MOD","MODE","MONTH","MULTISET","NAME","NAN","NATIONAL","NATIVE","NATURAL","NATURALN","NCHAR","NEW","NEXTVAL","NOCOMPRESS","NOCOPY","NOT","NOWAIT","NULL","NULLIF","NUMBER_BASE","NUMBER","OBJECT","OCICOLL","OCIDATE","OCIDATETIME","OCIDURATION","OCIINTERVAL","OCILOBLOCATOR","OCINUMBER","OCIRAW","OCIREF","OCIREFCURSOR","OCIROWID","OCISTRING","OCITYPE","OF","OLD","ON","ONLY","OPAQUE","OPEN","OPERATOR","OPTION","ORACLE","ORADATA","ORDER","ORGANIZATION","ORLANY","ORLVARY","OTHERS","OUT","OVERLAPS","OVERRIDING","PACKAGE","PARALLEL_ENABLE","PARAMETER","PARAMETERS","PARENT","PARTITION","PASCAL","PCTFREE","PIPE","PIPELINED","PLS_INTEGER","PLUGGABLE","POSITIVE","POSITIVEN","PRAGMA","PRECISION","PRIOR","PRIVATE","PROCEDURE","PUBLIC","RAISE","RANGE","RAW","READ","REAL","RECORD","REF","REFERENCE","RELEASE","RELIES_ON","REM","REMAINDER","RENAME","RESOURCE","RESULT_CACHE","RESULT","RETURN","RETURNING","REVERSE","REVOKE","ROLLBACK","ROW","ROWID","ROWNUM","ROWTYPE","SAMPLE","SAVE","SAVEPOINT","SB1","SB2","SB4","SECOND","SEGMENT","SELF","SEPARATE","SEQUENCE","SERIALIZABLE","SHARE","SHORT","SIZE_T","SIZE","SMALLINT","SOME","SPACE","SPARSE","SQL","SQLCODE","SQLDATA","SQLERRM","SQLNAME","SQLSTATE","STANDARD","START","STATIC","STDDEV","STORED","STRING","STRUCT","STYLE","SUBMULTISET","SUBPARTITION","SUBSTITUTABLE","SUBTYPE","SUCCESSFUL","SUM","SYNONYM","SYSDATE","TABAUTH","TABLE","TDO","THE","THEN","TIME","TIMESTAMP","TIMEZONE_ABBR","TIMEZONE_HOUR","TIMEZONE_MINUTE","TIMEZONE_REGION","TO","TRAILING","TRANSACTION","TRANSACTIONAL","TRIGGER","TRUE","TRUSTED","TYPE","UB1","UB2","UB4","UID","UNDER","UNIQUE","UNPLUG","UNSIGNED","UNTRUSTED","USE","USER","USING","VALIDATE","VALIST","VALUE","VARCHAR","VARCHAR2","VARIABLE","VARIANCE","VARRAY","VARYING","VIEW","VIEWS","VOID","WHENEVER","WHILE","WITH","WORK","WRAPPED","WRITE","YEAR","ZONE"],y=["ADD","ALTER COLUMN","ALTER TABLE","BEGIN","CONNECT BY","DECLARE","DELETE FROM","DELETE","EXCEPT","EXCEPTION","FETCH FIRST","FROM","GROUP BY","HAVING","INSERT INTO","INSERT","INTERSECT","LIMIT","LOOP","MODIFY","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","START WITH","UNION ALL","UNION","UPDATE","VALUES","WHERE"],Y=["AND","CROSS APPLY","CROSS JOIN","ELSE","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER APPLY","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","WHEN","XOR"];let v;class V{constructor(E){this.cfg=E}format(E){return v||(v=new c({reservedWords:k,reservedToplevelWords:y,reservedNewlineWords:Y,stringTypes:['""',"N''","''","``"],openParens:["(","CASE"],closeParens:[")"],keywordBlockStarts:["BEGIN","LOOP"],keywordBlockEnds:["END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:[":"],lineCommentTypes:["--"],specialWordChars:["_","$","#",".","@"]})),new l(this.cfg,v).format(E)}}const X=["ACCESSIBLE","ACTION","AGAINST","AGGREGATE","ALGORITHM","ALL","ALTER","ANALYSE","ANALYZE","AS","ASC","AUTOCOMMIT","AUTO_INCREMENT","BACKUP","BEGIN","BETWEEN","BINLOG","BOTH","CASCADE","CASE","CHANGE","CHANGED","CHARACTER SET","CHARSET","CHECK","CHECKSUM","COLLATE","COLLATION","COLUMN","COLUMNS","COMMENT","COMMIT","COMMITTED","COMPRESSED","CONCURRENT","CONSTRAINT","CONTAINS","CONVERT","CREATE","CROSS","CURRENT_TIMESTAMP","DATABASE","DATABASES","DAY","DAY_HOUR","DAY_MINUTE","DAY_SECOND","DEFAULT","DEFINER","DELAYED","DELETE","DESC","DESCRIBE","DETERMINISTIC","DISTINCT","DISTINCTROW","DIV","DO","DROP","DUMPFILE","DUPLICATE","DYNAMIC","ELSE","ENCLOSED","END","ENGINE","ENGINES","ENGINE_TYPE","ESCAPE","ESCAPED","EVENTS","EXEC","EXECUTE","EXISTS","EXPLAIN","EXTENDED","FAST","FETCH","FIELDS","FILE","FIRST","FIXED","FLUSH","FOR","FORCE","FOREIGN","FULL","FULLTEXT","FUNCTION","GLOBAL","GRANT","GRANTS","GROUP_CONCAT","HEAP","HIGH_PRIORITY","HOSTS","HOUR","HOUR_MINUTE","HOUR_SECOND","IDENTIFIED","IF","IFNULL","IGNORE","IN","INDEX","INDEXES","INFILE","INSERT","INSERT_ID","INSERT_METHOD","INTERVAL","INTO","INVOKER","IS","ISOLATION","KEY","KEYS","KILL","LAST_INSERT_ID","LEADING","LEVEL","LIKE","LINEAR","LINES","LOAD","LOCAL","LOCK","LOCKS","LOGS","LOW_PRIORITY","MARIA","MASTER","MASTER_CONNECT_RETRY","MASTER_HOST","MASTER_LOG_FILE","MATCH","MAX_CONNECTIONS_PER_HOUR","MAX_QUERIES_PER_HOUR","MAX_ROWS","MAX_UPDATES_PER_HOUR","MAX_USER_CONNECTIONS","MEDIUM","MERGE","MINUTE","MINUTE_SECOND","MIN_ROWS","MODE","MODIFY","MONTH","MRG_MYISAM","MYISAM","NAMES","NATURAL","NOT","NOW()","NULL","OFFSET","ON DELETE","ON UPDATE","ON","ONLY","OPEN","OPTIMIZE","OPTION","OPTIONALLY","OUTFILE","PACK_KEYS","PAGE","PARTIAL","PARTITION","PARTITIONS","PASSWORD","PRIMARY","PRIVILEGES","PROCEDURE","PROCESS","PROCESSLIST","PURGE","QUICK","RAID0","RAID_CHUNKS","RAID_CHUNKSIZE","RAID_TYPE","RANGE","READ","READ_ONLY","READ_WRITE","REFERENCES","REGEXP","RELOAD","RENAME","REPAIR","REPEATABLE","REPLACE","REPLICATION","RESET","RESTORE","RESTRICT","RETURN","RETURNS","REVOKE","RLIKE","ROLLBACK","ROW","ROWS","ROW_FORMAT","SECOND","SECURITY","SEPARATOR","SERIALIZABLE","SESSION","SHARE","SHOW","SHUTDOWN","SLAVE","SONAME","SOUNDS","SQL","SQL_AUTO_IS_NULL","SQL_BIG_RESULT","SQL_BIG_SELECTS","SQL_BIG_TABLES","SQL_BUFFER_RESULT","SQL_CACHE","SQL_CALC_FOUND_ROWS","SQL_LOG_BIN","SQL_LOG_OFF","SQL_LOG_UPDATE","SQL_LOW_PRIORITY_UPDATES","SQL_MAX_JOIN_SIZE","SQL_NO_CACHE","SQL_QUOTE_SHOW_CREATE","SQL_SAFE_UPDATES","SQL_SELECT_LIMIT","SQL_SLAVE_SKIP_COUNTER","SQL_SMALL_RESULT","SQL_WARNINGS","START","STARTING","STATUS","STOP","STORAGE","STRAIGHT_JOIN","STRING","STRIPED","SUPER","TABLE","TABLES","TEMPORARY","TERMINATED","THEN","TO","TRAILING","TRANSACTIONAL","TRUE","TRUNCATE","TYPE","TYPES","UNCOMMITTED","UNIQUE","UNLOCK","UNSIGNED","USAGE","USE","USING","VARIABLES","VIEW","WHEN","WITH","WORK","WRITE","YEAR_MONTH"],f=["ADD","AFTER","ALTER COLUMN","ALTER TABLE","DELETE FROM","EXCEPT","FETCH FIRST","FROM","GROUP BY","GO","HAVING","INSERT INTO","INSERT","INTERSECT","LIMIT","MODIFY","ORDER BY","SELECT","SET CURRENT SCHEMA","SET SCHEMA","SET","UNION ALL","UNION","UPDATE","VALUES","WHERE"],K=["AND","CROSS APPLY","CROSS JOIN","ELSE","INNER JOIN","JOIN","LEFT JOIN","LEFT OUTER JOIN","OR","OUTER APPLY","OUTER JOIN","RIGHT JOIN","RIGHT OUTER JOIN","WHEN","XOR"];let x;class w{constructor(E){this.cfg=E}format(E){return x||(x=new c({reservedWords:X,reservedToplevelWords:f,reservedNewlineWords:K,stringTypes:['""',"N''","''","``","[]"],openParens:["(","CASE"],closeParens:[")","END"],indexedPlaceholderTypes:["?"],namedPlaceholderTypes:["@",":"],lineCommentTypes:["#","--"]})),new l(this.cfg,x).format(E)}}function Q(E,e={}){switch(e.language){case"db2":return new B(e).format(E);case"n1ql":return new m(e).format(E);case"pl/sql":return new V(e).format(E);case"sql":case void 0:return new w(e).format(E);default:throw Error(`Unsupported SQL dialect: ${String(e.language)}`)}}const J={format:Q};E.default=J,E.format=Q,Object.defineProperty(E,"__esModule",{value:!0})});
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "sql-format-plus",
3
+ "version": "0.0.1",
4
+ "description": "Formats whitespaces in a SQL query to make it more readable.",
5
+ "main": "dist/sql-format-plus.umd.js",
6
+ "module": "dist/sql-format-plus.es.js",
7
+ "typings": "./types/sql-format-plus.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "types",
11
+ "README.md",
12
+ "README.zh-CN.md",
13
+ "LICENSE"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./types/sql-format-plus.d.ts",
18
+ "import": "./dist/sql-format-plus.es.js",
19
+ "default": "./dist/sql-format-plus.umd.js"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "dev": "vite",
24
+ "build": "rollup -c",
25
+ "check": "tsc --noEmit && tsc -p tsconfig.test.json",
26
+ "test": "vitest run",
27
+ "docs:dev": "vitepress dev docs",
28
+ "docs:build": "vitepress build docs",
29
+ "docs:preview": "vitepress preview docs",
30
+ "lint": "eslint .",
31
+ "lint:fix": "eslint . --fix",
32
+ "format": "prettier --write .",
33
+ "format:check": "prettier --check .",
34
+ "link": "npm link && npm link sql-format-plus",
35
+ "prepare": "husky",
36
+ "preview": "vite preview",
37
+ "serve": "vite"
38
+ },
39
+ "lint-staged": {
40
+ "*.{js,mjs,cjs,ts}": [
41
+ "eslint --fix",
42
+ "prettier --write"
43
+ ],
44
+ "*.{json,md,css,html,yml,yaml}": [
45
+ "prettier --write"
46
+ ]
47
+ },
48
+ "keywords": [
49
+ "sql",
50
+ "formatter",
51
+ "format",
52
+ "n1ql",
53
+ "db2",
54
+ "plsql"
55
+ ],
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "git+https://github.com/xcy960815/sql-format-plus.git"
59
+ },
60
+ "author": {
61
+ "name": "xcy960815",
62
+ "email": "18763006837@163.com"
63
+ },
64
+ "license": "MIT",
65
+ "bugs": {
66
+ "url": "https://github.com/xcy960815/sql-format-plus/issues"
67
+ },
68
+ "homepage": "https://github.com/xcy960815/sql-format-plus#readme",
69
+ "devDependencies": {
70
+ "@eslint/js": "^9.30.1",
71
+ "@rollup/plugin-commonjs": "^28.0.6",
72
+ "@rollup/plugin-node-resolve": "^16.0.1",
73
+ "@rollup/plugin-terser": "^0.4.4",
74
+ "@rollup/plugin-typescript": "^12.1.4",
75
+ "eslint": "^9.30.1",
76
+ "eslint-config-prettier": "^9.1.0",
77
+ "globals": "^15.8.0",
78
+ "husky": "^9.1.4",
79
+ "lint-staged": "^15.2.7",
80
+ "prettier": "^3.3.3",
81
+ "rollup": "^4.44.1",
82
+ "rollup-plugin-dts": "^6.2.1",
83
+ "tslib": "^2.0.3",
84
+ "typescript": "^5.6.3",
85
+ "typescript-eslint": "^8.35.1",
86
+ "vite": "^5.4.10",
87
+ "vitepress": "^1.3.4",
88
+ "vitest": "^2.1.9"
89
+ }
90
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 支持格式化的 SQL 方言选项。
3
+ */
4
+ type SqlDialect = 'sql' | 'n1ql' | 'db2' | 'pl/sql';
5
+ /**
6
+ * 占位符替换值的有效类型。
7
+ */
8
+ type ParamValue = string | number | boolean | null;
9
+ /**
10
+ * 格式化参数的表示形式。对于索引占位符,可以是一个数组;
11
+ * 对于命名占位符,可以是一个将键名映射到值的对象。
12
+ */
13
+ type ParamsMap = Record<string, ParamValue> | ParamValue[];
14
+ /**
15
+ * SQL 格式化器的配置选项。
16
+ */
17
+ interface FormatOptions {
18
+ /**
19
+ * 要格式化的 SQL 方言。默认为 'sql' (标准 SQL)。
20
+ */
21
+ language?: SqlDialect;
22
+ /**
23
+ * 用于缩进的字符串,例如 ' ' 或 '\t'。默认为 ' '。
24
+ */
25
+ indent?: string;
26
+ /**
27
+ * 用于替换查询中占位符参数的值。
28
+ */
29
+ params?: ParamsMap;
30
+ }
31
+
32
+ /**
33
+ * 格式化 SQL 查询字符串以提高其可读性。
34
+ *
35
+ * 根据提供的配置选项,分发给标准 SQL 或特定方言的格式化器(db2、n1ql、pl/sql)。
36
+ *
37
+ * @param {string} query 要格式化的 SQL 查询字符串。
38
+ * @param {FormatOptions} [cfg={}] 格式化配置选项。
39
+ * @returns {string} 格式化后的 SQL 查询。
40
+ * @throws {Error} 如果配置中指定了不支持的 SQL 方言,则抛出错误。
41
+ */
42
+ declare function format(query: string, cfg?: FormatOptions): string;
43
+ /**
44
+ * 默认导出,提供 SQL 格式化函数。
45
+ */
46
+ declare const sqlFormatter: {
47
+ format: typeof format;
48
+ };
49
+
50
+ export { sqlFormatter as default, format };
51
+ export type { FormatOptions, ParamValue, ParamsMap, SqlDialect };