@guojc1/sql-formatter-compact 1.0.0
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.
- package/AUTHORS +75 -0
- package/LICENSE +23 -0
- package/README.md +318 -0
- package/bin/sql-formatter-cli.cjs +182 -0
- package/dist/cjs/FormatOptions.d.ts +27 -0
- package/dist/cjs/FormatOptions.js +3 -0
- package/dist/cjs/FormatOptions.js.map +1 -0
- package/dist/cjs/allDialects.d.ts +20 -0
- package/dist/cjs/allDialects.js +44 -0
- package/dist/cjs/allDialects.js.map +1 -0
- package/dist/cjs/dialect.d.ts +18 -0
- package/dist/cjs/dialect.js +35 -0
- package/dist/cjs/dialect.js.map +1 -0
- package/dist/cjs/expandPhrases.d.ts +29 -0
- package/dist/cjs/expandPhrases.js +132 -0
- package/dist/cjs/expandPhrases.js.map +1 -0
- package/dist/cjs/formatter/ExpressionFormatter.d.ts +78 -0
- package/dist/cjs/formatter/ExpressionFormatter.js +546 -0
- package/dist/cjs/formatter/ExpressionFormatter.js.map +1 -0
- package/dist/cjs/formatter/Formatter.d.ts +18 -0
- package/dist/cjs/formatter/Formatter.js +80 -0
- package/dist/cjs/formatter/Formatter.js.map +1 -0
- package/dist/cjs/formatter/Indentation.d.ts +43 -0
- package/dist/cjs/formatter/Indentation.js +70 -0
- package/dist/cjs/formatter/Indentation.js.map +1 -0
- package/dist/cjs/formatter/InlineLayout.d.ts +21 -0
- package/dist/cjs/formatter/InlineLayout.js +88 -0
- package/dist/cjs/formatter/InlineLayout.js.map +1 -0
- package/dist/cjs/formatter/Layout.d.ts +41 -0
- package/dist/cjs/formatter/Layout.js +122 -0
- package/dist/cjs/formatter/Layout.js.map +1 -0
- package/dist/cjs/formatter/Params.d.ts +26 -0
- package/dist/cjs/formatter/Params.js +37 -0
- package/dist/cjs/formatter/Params.js.map +1 -0
- package/dist/cjs/formatter/config.d.ts +9 -0
- package/dist/cjs/formatter/config.js +25 -0
- package/dist/cjs/formatter/config.js.map +1 -0
- package/dist/cjs/formatter/tabularStyle.d.ts +11 -0
- package/dist/cjs/formatter/tabularStyle.js +39 -0
- package/dist/cjs/formatter/tabularStyle.js.map +1 -0
- package/dist/cjs/index.d.ts +28 -0
- package/dist/cjs/index.js +53 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/languages/bigquery/bigquery.formatter.d.ts +2 -0
- package/dist/cjs/languages/bigquery/bigquery.formatter.js +259 -0
- package/dist/cjs/languages/bigquery/bigquery.formatter.js.map +1 -0
- package/dist/cjs/languages/bigquery/bigquery.functions.d.ts +1 -0
- package/dist/cjs/languages/bigquery/bigquery.functions.js +549 -0
- package/dist/cjs/languages/bigquery/bigquery.functions.js.map +1 -0
- package/dist/cjs/languages/bigquery/bigquery.keywords.d.ts +2 -0
- package/dist/cjs/languages/bigquery/bigquery.keywords.js +139 -0
- package/dist/cjs/languages/bigquery/bigquery.keywords.js.map +1 -0
- package/dist/cjs/languages/clickhouse/clickhouse.formatter.d.ts +2 -0
- package/dist/cjs/languages/clickhouse/clickhouse.formatter.js +323 -0
- package/dist/cjs/languages/clickhouse/clickhouse.formatter.js.map +1 -0
- package/dist/cjs/languages/clickhouse/clickhouse.functions.d.ts +1 -0
- package/dist/cjs/languages/clickhouse/clickhouse.functions.js +1756 -0
- package/dist/cjs/languages/clickhouse/clickhouse.functions.js.map +1 -0
- package/dist/cjs/languages/clickhouse/clickhouse.keywords.d.ts +2 -0
- package/dist/cjs/languages/clickhouse/clickhouse.keywords.js +550 -0
- package/dist/cjs/languages/clickhouse/clickhouse.keywords.js.map +1 -0
- package/dist/cjs/languages/db2/db2.formatter.d.ts +2 -0
- package/dist/cjs/languages/db2/db2.formatter.js +304 -0
- package/dist/cjs/languages/db2/db2.formatter.js.map +1 -0
- package/dist/cjs/languages/db2/db2.functions.d.ts +1 -0
- package/dist/cjs/languages/db2/db2.functions.js +325 -0
- package/dist/cjs/languages/db2/db2.functions.js.map +1 -0
- package/dist/cjs/languages/db2/db2.keywords.d.ts +2 -0
- package/dist/cjs/languages/db2/db2.keywords.js +449 -0
- package/dist/cjs/languages/db2/db2.keywords.js.map +1 -0
- package/dist/cjs/languages/db2i/db2i.formatter.d.ts +2 -0
- package/dist/cjs/languages/db2i/db2i.formatter.js +181 -0
- package/dist/cjs/languages/db2i/db2i.formatter.js.map +1 -0
- package/dist/cjs/languages/db2i/db2i.functions.d.ts +1 -0
- package/dist/cjs/languages/db2i/db2i.functions.js +339 -0
- package/dist/cjs/languages/db2i/db2i.functions.js.map +1 -0
- package/dist/cjs/languages/db2i/db2i.keywords.d.ts +2 -0
- package/dist/cjs/languages/db2i/db2i.keywords.js +538 -0
- package/dist/cjs/languages/db2i/db2i.keywords.js.map +1 -0
- package/dist/cjs/languages/duckdb/duckdb.formatter.d.ts +2 -0
- package/dist/cjs/languages/duckdb/duckdb.formatter.js +213 -0
- package/dist/cjs/languages/duckdb/duckdb.formatter.js.map +1 -0
- package/dist/cjs/languages/duckdb/duckdb.functions.d.ts +1 -0
- package/dist/cjs/languages/duckdb/duckdb.functions.js +668 -0
- package/dist/cjs/languages/duckdb/duckdb.functions.js.map +1 -0
- package/dist/cjs/languages/duckdb/duckdb.keywords.d.ts +2 -0
- package/dist/cjs/languages/duckdb/duckdb.keywords.js +168 -0
- package/dist/cjs/languages/duckdb/duckdb.keywords.js.map +1 -0
- package/dist/cjs/languages/hive/hive.formatter.d.ts +2 -0
- package/dist/cjs/languages/hive/hive.formatter.js +106 -0
- package/dist/cjs/languages/hive/hive.formatter.js.map +1 -0
- package/dist/cjs/languages/hive/hive.functions.d.ts +1 -0
- package/dist/cjs/languages/hive/hive.functions.js +213 -0
- package/dist/cjs/languages/hive/hive.functions.js.map +1 -0
- package/dist/cjs/languages/hive/hive.keywords.d.ts +2 -0
- package/dist/cjs/languages/hive/hive.keywords.js +342 -0
- package/dist/cjs/languages/hive/hive.keywords.js.map +1 -0
- package/dist/cjs/languages/mariadb/likeMariaDb.d.ts +2 -0
- package/dist/cjs/languages/mariadb/likeMariaDb.js +22 -0
- package/dist/cjs/languages/mariadb/likeMariaDb.js.map +1 -0
- package/dist/cjs/languages/mariadb/mariadb.formatter.d.ts +2 -0
- package/dist/cjs/languages/mariadb/mariadb.formatter.js +317 -0
- package/dist/cjs/languages/mariadb/mariadb.formatter.js.map +1 -0
- package/dist/cjs/languages/mariadb/mariadb.functions.d.ts +1 -0
- package/dist/cjs/languages/mariadb/mariadb.functions.js +243 -0
- package/dist/cjs/languages/mariadb/mariadb.functions.js.map +1 -0
- package/dist/cjs/languages/mariadb/mariadb.keywords.d.ts +2 -0
- package/dist/cjs/languages/mariadb/mariadb.keywords.js +274 -0
- package/dist/cjs/languages/mariadb/mariadb.keywords.js.map +1 -0
- package/dist/cjs/languages/mysql/mysql.formatter.d.ts +2 -0
- package/dist/cjs/languages/mysql/mysql.formatter.js +284 -0
- package/dist/cjs/languages/mysql/mysql.formatter.js.map +1 -0
- package/dist/cjs/languages/mysql/mysql.functions.d.ts +1 -0
- package/dist/cjs/languages/mysql/mysql.functions.js +428 -0
- package/dist/cjs/languages/mysql/mysql.functions.js.map +1 -0
- package/dist/cjs/languages/mysql/mysql.keywords.d.ts +2 -0
- package/dist/cjs/languages/mysql/mysql.keywords.js +288 -0
- package/dist/cjs/languages/mysql/mysql.keywords.js.map +1 -0
- package/dist/cjs/languages/n1ql/n1ql.formatter.d.ts +2 -0
- package/dist/cjs/languages/n1ql/n1ql.formatter.js +109 -0
- package/dist/cjs/languages/n1ql/n1ql.formatter.js.map +1 -0
- package/dist/cjs/languages/n1ql/n1ql.functions.d.ts +1 -0
- package/dist/cjs/languages/n1ql/n1ql.functions.js +235 -0
- package/dist/cjs/languages/n1ql/n1ql.functions.js.map +1 -0
- package/dist/cjs/languages/n1ql/n1ql.keywords.d.ts +2 -0
- package/dist/cjs/languages/n1ql/n1ql.keywords.js +221 -0
- package/dist/cjs/languages/n1ql/n1ql.keywords.js.map +1 -0
- package/dist/cjs/languages/plsql/plsql.formatter.d.ts +2 -0
- package/dist/cjs/languages/plsql/plsql.formatter.js +140 -0
- package/dist/cjs/languages/plsql/plsql.formatter.js.map +1 -0
- package/dist/cjs/languages/plsql/plsql.functions.d.ts +1 -0
- package/dist/cjs/languages/plsql/plsql.functions.js +270 -0
- package/dist/cjs/languages/plsql/plsql.functions.js.map +1 -0
- package/dist/cjs/languages/plsql/plsql.keywords.d.ts +2 -0
- package/dist/cjs/languages/plsql/plsql.keywords.js +349 -0
- package/dist/cjs/languages/plsql/plsql.keywords.js.map +1 -0
- package/dist/cjs/languages/postgresql/postgresql.formatter.d.ts +2 -0
- package/dist/cjs/languages/postgresql/postgresql.formatter.js +391 -0
- package/dist/cjs/languages/postgresql/postgresql.formatter.js.map +1 -0
- package/dist/cjs/languages/postgresql/postgresql.functions.d.ts +1 -0
- package/dist/cjs/languages/postgresql/postgresql.functions.js +693 -0
- package/dist/cjs/languages/postgresql/postgresql.functions.js.map +1 -0
- package/dist/cjs/languages/postgresql/postgresql.keywords.d.ts +2 -0
- package/dist/cjs/languages/postgresql/postgresql.keywords.js +158 -0
- package/dist/cjs/languages/postgresql/postgresql.keywords.js.map +1 -0
- package/dist/cjs/languages/redshift/redshift.formatter.d.ts +2 -0
- package/dist/cjs/languages/redshift/redshift.formatter.js +180 -0
- package/dist/cjs/languages/redshift/redshift.formatter.js.map +1 -0
- package/dist/cjs/languages/redshift/redshift.functions.d.ts +1 -0
- package/dist/cjs/languages/redshift/redshift.functions.js +351 -0
- package/dist/cjs/languages/redshift/redshift.functions.js.map +1 -0
- package/dist/cjs/languages/redshift/redshift.keywords.d.ts +2 -0
- package/dist/cjs/languages/redshift/redshift.keywords.js +216 -0
- package/dist/cjs/languages/redshift/redshift.keywords.js.map +1 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.formatter.d.ts +2 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.formatter.js +286 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.formatter.js.map +1 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.functions.d.ts +1 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.functions.js +285 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.functions.js.map +1 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.keywords.d.ts +2 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.keywords.js +268 -0
- package/dist/cjs/languages/singlestoredb/singlestoredb.keywords.js.map +1 -0
- package/dist/cjs/languages/snowflake/snowflake.formatter.d.ts +2 -0
- package/dist/cjs/languages/snowflake/snowflake.formatter.js +339 -0
- package/dist/cjs/languages/snowflake/snowflake.formatter.js.map +1 -0
- package/dist/cjs/languages/snowflake/snowflake.functions.d.ts +1 -0
- package/dist/cjs/languages/snowflake/snowflake.functions.js +613 -0
- package/dist/cjs/languages/snowflake/snowflake.functions.js.map +1 -0
- package/dist/cjs/languages/snowflake/snowflake.keywords.d.ts +2 -0
- package/dist/cjs/languages/snowflake/snowflake.keywords.js +140 -0
- package/dist/cjs/languages/snowflake/snowflake.keywords.js.map +1 -0
- package/dist/cjs/languages/spark/spark.formatter.d.ts +2 -0
- package/dist/cjs/languages/spark/spark.formatter.js +167 -0
- package/dist/cjs/languages/spark/spark.formatter.js.map +1 -0
- package/dist/cjs/languages/spark/spark.functions.d.ts +1 -0
- package/dist/cjs/languages/spark/spark.functions.js +326 -0
- package/dist/cjs/languages/spark/spark.functions.js.map +1 -0
- package/dist/cjs/languages/spark/spark.keywords.d.ts +2 -0
- package/dist/cjs/languages/spark/spark.keywords.js +302 -0
- package/dist/cjs/languages/spark/spark.keywords.js.map +1 -0
- package/dist/cjs/languages/sql/sql.formatter.d.ts +2 -0
- package/dist/cjs/languages/sql/sql.formatter.js +97 -0
- package/dist/cjs/languages/sql/sql.formatter.js.map +1 -0
- package/dist/cjs/languages/sql/sql.functions.d.ts +1 -0
- package/dist/cjs/languages/sql/sql.functions.js +102 -0
- package/dist/cjs/languages/sql/sql.functions.js.map +1 -0
- package/dist/cjs/languages/sql/sql.keywords.d.ts +2 -0
- package/dist/cjs/languages/sql/sql.keywords.js +244 -0
- package/dist/cjs/languages/sql/sql.keywords.js.map +1 -0
- package/dist/cjs/languages/sqlite/sqlite.formatter.d.ts +2 -0
- package/dist/cjs/languages/sqlite/sqlite.formatter.js +94 -0
- package/dist/cjs/languages/sqlite/sqlite.formatter.js.map +1 -0
- package/dist/cjs/languages/sqlite/sqlite.functions.d.ts +1 -0
- package/dist/cjs/languages/sqlite/sqlite.functions.js +129 -0
- package/dist/cjs/languages/sqlite/sqlite.functions.js.map +1 -0
- package/dist/cjs/languages/sqlite/sqlite.keywords.d.ts +2 -0
- package/dist/cjs/languages/sqlite/sqlite.keywords.js +180 -0
- package/dist/cjs/languages/sqlite/sqlite.keywords.js.map +1 -0
- package/dist/cjs/languages/tidb/tidb.formatter.d.ts +2 -0
- package/dist/cjs/languages/tidb/tidb.formatter.js +218 -0
- package/dist/cjs/languages/tidb/tidb.formatter.js.map +1 -0
- package/dist/cjs/languages/tidb/tidb.functions.d.ts +1 -0
- package/dist/cjs/languages/tidb/tidb.functions.js +331 -0
- package/dist/cjs/languages/tidb/tidb.functions.js.map +1 -0
- package/dist/cjs/languages/tidb/tidb.keywords.d.ts +2 -0
- package/dist/cjs/languages/tidb/tidb.keywords.js +244 -0
- package/dist/cjs/languages/tidb/tidb.keywords.js.map +1 -0
- package/dist/cjs/languages/transactsql/transactsql.formatter.d.ts +2 -0
- package/dist/cjs/languages/transactsql/transactsql.formatter.js +275 -0
- package/dist/cjs/languages/transactsql/transactsql.formatter.js.map +1 -0
- package/dist/cjs/languages/transactsql/transactsql.functions.d.ts +1 -0
- package/dist/cjs/languages/transactsql/transactsql.functions.js +310 -0
- package/dist/cjs/languages/transactsql/transactsql.functions.js.map +1 -0
- package/dist/cjs/languages/transactsql/transactsql.keywords.d.ts +2 -0
- package/dist/cjs/languages/transactsql/transactsql.keywords.js +214 -0
- package/dist/cjs/languages/transactsql/transactsql.keywords.js.map +1 -0
- package/dist/cjs/languages/trino/trino.formatter.d.ts +2 -0
- package/dist/cjs/languages/trino/trino.formatter.js +163 -0
- package/dist/cjs/languages/trino/trino.formatter.js.map +1 -0
- package/dist/cjs/languages/trino/trino.functions.d.ts +1 -0
- package/dist/cjs/languages/trino/trino.functions.js +439 -0
- package/dist/cjs/languages/trino/trino.functions.js.map +1 -0
- package/dist/cjs/languages/trino/trino.keywords.d.ts +2 -0
- package/dist/cjs/languages/trino/trino.keywords.js +282 -0
- package/dist/cjs/languages/trino/trino.keywords.js.map +1 -0
- package/dist/cjs/lexer/NestedComment.d.ts +10 -0
- package/dist/cjs/lexer/NestedComment.js +54 -0
- package/dist/cjs/lexer/NestedComment.js.map +1 -0
- package/dist/cjs/lexer/Tokenizer.d.ts +14 -0
- package/dist/cjs/lexer/Tokenizer.js +293 -0
- package/dist/cjs/lexer/Tokenizer.js.map +1 -0
- package/dist/cjs/lexer/TokenizerEngine.d.ts +31 -0
- package/dist/cjs/lexer/TokenizerEngine.js +95 -0
- package/dist/cjs/lexer/TokenizerEngine.js.map +1 -0
- package/dist/cjs/lexer/TokenizerOptions.d.ts +56 -0
- package/dist/cjs/lexer/TokenizerOptions.js +3 -0
- package/dist/cjs/lexer/TokenizerOptions.js.map +1 -0
- package/dist/cjs/lexer/disambiguateTokens.d.ts +18 -0
- package/dist/cjs/lexer/disambiguateTokens.js +90 -0
- package/dist/cjs/lexer/disambiguateTokens.js.map +1 -0
- package/dist/cjs/lexer/lineColFromIndex.d.ts +8 -0
- package/dist/cjs/lexer/lineColFromIndex.js +12 -0
- package/dist/cjs/lexer/lineColFromIndex.js.map +1 -0
- package/dist/cjs/lexer/regexFactory.d.ts +55 -0
- package/dist/cjs/lexer/regexFactory.js +153 -0
- package/dist/cjs/lexer/regexFactory.js.map +1 -0
- package/dist/cjs/lexer/regexUtil.d.ts +7 -0
- package/dist/cjs/lexer/regexUtil.js +21 -0
- package/dist/cjs/lexer/regexUtil.js.map +1 -0
- package/dist/cjs/lexer/token.d.ts +89 -0
- package/dist/cjs/lexer/token.js +101 -0
- package/dist/cjs/lexer/token.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/parser/LexerAdapter.d.ts +17 -0
- package/dist/cjs/parser/LexerAdapter.js +30 -0
- package/dist/cjs/parser/LexerAdapter.js.map +1 -0
- package/dist/cjs/parser/ast.d.ts +158 -0
- package/dist/cjs/parser/ast.js +31 -0
- package/dist/cjs/parser/ast.js.map +1 -0
- package/dist/cjs/parser/createParser.d.ts +10 -0
- package/dist/cjs/parser/createParser.js +43 -0
- package/dist/cjs/parser/createParser.js.map +1 -0
- package/dist/cjs/parser/grammar.d.ts +28 -0
- package/dist/cjs/parser/grammar.js +371 -0
- package/dist/cjs/parser/grammar.js.map +1 -0
- package/dist/cjs/sqlFormatter.d.ts +31 -0
- package/dist/cjs/sqlFormatter.js +117 -0
- package/dist/cjs/sqlFormatter.js.map +1 -0
- package/dist/cjs/utils.d.ts +8 -0
- package/dist/cjs/utils.js +22 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/validateConfig.d.ts +4 -0
- package/dist/cjs/validateConfig.js +43 -0
- package/dist/cjs/validateConfig.js.map +1 -0
- package/dist/esm/FormatOptions.d.ts +27 -0
- package/dist/esm/FormatOptions.js +2 -0
- package/dist/esm/FormatOptions.js.map +1 -0
- package/dist/esm/allDialects.d.ts +20 -0
- package/dist/esm/allDialects.js +21 -0
- package/dist/esm/allDialects.js.map +1 -0
- package/dist/esm/dialect.d.ts +18 -0
- package/dist/esm/dialect.js +28 -0
- package/dist/esm/dialect.js.map +1 -0
- package/dist/esm/expandPhrases.d.ts +29 -0
- package/dist/esm/expandPhrases.js +127 -0
- package/dist/esm/expandPhrases.js.map +1 -0
- package/dist/esm/formatter/ExpressionFormatter.d.ts +78 -0
- package/dist/esm/formatter/ExpressionFormatter.js +520 -0
- package/dist/esm/formatter/ExpressionFormatter.js.map +1 -0
- package/dist/esm/formatter/Formatter.d.ts +18 -0
- package/dist/esm/formatter/Formatter.js +51 -0
- package/dist/esm/formatter/Formatter.js.map +1 -0
- package/dist/esm/formatter/Indentation.d.ts +43 -0
- package/dist/esm/formatter/Indentation.js +67 -0
- package/dist/esm/formatter/Indentation.js.map +1 -0
- package/dist/esm/formatter/InlineLayout.d.ts +21 -0
- package/dist/esm/formatter/InlineLayout.js +57 -0
- package/dist/esm/formatter/InlineLayout.js.map +1 -0
- package/dist/esm/formatter/Layout.d.ts +41 -0
- package/dist/esm/formatter/Layout.js +118 -0
- package/dist/esm/formatter/Layout.js.map +1 -0
- package/dist/esm/formatter/Params.d.ts +26 -0
- package/dist/esm/formatter/Params.js +34 -0
- package/dist/esm/formatter/Params.js.map +1 -0
- package/dist/esm/formatter/config.d.ts +9 -0
- package/dist/esm/formatter/config.js +20 -0
- package/dist/esm/formatter/config.js.map +1 -0
- package/dist/esm/formatter/tabularStyle.d.ts +11 -0
- package/dist/esm/formatter/tabularStyle.js +34 -0
- package/dist/esm/formatter/tabularStyle.js.map +1 -0
- package/dist/esm/index.d.ts +28 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/languages/bigquery/bigquery.formatter.d.ts +2 -0
- package/dist/esm/languages/bigquery/bigquery.formatter.js +256 -0
- package/dist/esm/languages/bigquery/bigquery.formatter.js.map +1 -0
- package/dist/esm/languages/bigquery/bigquery.functions.d.ts +1 -0
- package/dist/esm/languages/bigquery/bigquery.functions.js +546 -0
- package/dist/esm/languages/bigquery/bigquery.functions.js.map +1 -0
- package/dist/esm/languages/bigquery/bigquery.keywords.d.ts +2 -0
- package/dist/esm/languages/bigquery/bigquery.keywords.js +136 -0
- package/dist/esm/languages/bigquery/bigquery.keywords.js.map +1 -0
- package/dist/esm/languages/clickhouse/clickhouse.formatter.d.ts +2 -0
- package/dist/esm/languages/clickhouse/clickhouse.formatter.js +320 -0
- package/dist/esm/languages/clickhouse/clickhouse.formatter.js.map +1 -0
- package/dist/esm/languages/clickhouse/clickhouse.functions.d.ts +1 -0
- package/dist/esm/languages/clickhouse/clickhouse.functions.js +1753 -0
- package/dist/esm/languages/clickhouse/clickhouse.functions.js.map +1 -0
- package/dist/esm/languages/clickhouse/clickhouse.keywords.d.ts +2 -0
- package/dist/esm/languages/clickhouse/clickhouse.keywords.js +547 -0
- package/dist/esm/languages/clickhouse/clickhouse.keywords.js.map +1 -0
- package/dist/esm/languages/db2/db2.formatter.d.ts +2 -0
- package/dist/esm/languages/db2/db2.formatter.js +301 -0
- package/dist/esm/languages/db2/db2.formatter.js.map +1 -0
- package/dist/esm/languages/db2/db2.functions.d.ts +1 -0
- package/dist/esm/languages/db2/db2.functions.js +322 -0
- package/dist/esm/languages/db2/db2.functions.js.map +1 -0
- package/dist/esm/languages/db2/db2.keywords.d.ts +2 -0
- package/dist/esm/languages/db2/db2.keywords.js +446 -0
- package/dist/esm/languages/db2/db2.keywords.js.map +1 -0
- package/dist/esm/languages/db2i/db2i.formatter.d.ts +2 -0
- package/dist/esm/languages/db2i/db2i.formatter.js +178 -0
- package/dist/esm/languages/db2i/db2i.formatter.js.map +1 -0
- package/dist/esm/languages/db2i/db2i.functions.d.ts +1 -0
- package/dist/esm/languages/db2i/db2i.functions.js +336 -0
- package/dist/esm/languages/db2i/db2i.functions.js.map +1 -0
- package/dist/esm/languages/db2i/db2i.keywords.d.ts +2 -0
- package/dist/esm/languages/db2i/db2i.keywords.js +535 -0
- package/dist/esm/languages/db2i/db2i.keywords.js.map +1 -0
- package/dist/esm/languages/duckdb/duckdb.formatter.d.ts +2 -0
- package/dist/esm/languages/duckdb/duckdb.formatter.js +210 -0
- package/dist/esm/languages/duckdb/duckdb.formatter.js.map +1 -0
- package/dist/esm/languages/duckdb/duckdb.functions.d.ts +1 -0
- package/dist/esm/languages/duckdb/duckdb.functions.js +665 -0
- package/dist/esm/languages/duckdb/duckdb.functions.js.map +1 -0
- package/dist/esm/languages/duckdb/duckdb.keywords.d.ts +2 -0
- package/dist/esm/languages/duckdb/duckdb.keywords.js +165 -0
- package/dist/esm/languages/duckdb/duckdb.keywords.js.map +1 -0
- package/dist/esm/languages/hive/hive.formatter.d.ts +2 -0
- package/dist/esm/languages/hive/hive.formatter.js +103 -0
- package/dist/esm/languages/hive/hive.formatter.js.map +1 -0
- package/dist/esm/languages/hive/hive.functions.d.ts +1 -0
- package/dist/esm/languages/hive/hive.functions.js +210 -0
- package/dist/esm/languages/hive/hive.functions.js.map +1 -0
- package/dist/esm/languages/hive/hive.keywords.d.ts +2 -0
- package/dist/esm/languages/hive/hive.keywords.js +339 -0
- package/dist/esm/languages/hive/hive.keywords.js.map +1 -0
- package/dist/esm/languages/mariadb/likeMariaDb.d.ts +2 -0
- package/dist/esm/languages/mariadb/likeMariaDb.js +18 -0
- package/dist/esm/languages/mariadb/likeMariaDb.js.map +1 -0
- package/dist/esm/languages/mariadb/mariadb.formatter.d.ts +2 -0
- package/dist/esm/languages/mariadb/mariadb.formatter.js +314 -0
- package/dist/esm/languages/mariadb/mariadb.formatter.js.map +1 -0
- package/dist/esm/languages/mariadb/mariadb.functions.d.ts +1 -0
- package/dist/esm/languages/mariadb/mariadb.functions.js +240 -0
- package/dist/esm/languages/mariadb/mariadb.functions.js.map +1 -0
- package/dist/esm/languages/mariadb/mariadb.keywords.d.ts +2 -0
- package/dist/esm/languages/mariadb/mariadb.keywords.js +271 -0
- package/dist/esm/languages/mariadb/mariadb.keywords.js.map +1 -0
- package/dist/esm/languages/mysql/mysql.formatter.d.ts +2 -0
- package/dist/esm/languages/mysql/mysql.formatter.js +281 -0
- package/dist/esm/languages/mysql/mysql.formatter.js.map +1 -0
- package/dist/esm/languages/mysql/mysql.functions.d.ts +1 -0
- package/dist/esm/languages/mysql/mysql.functions.js +425 -0
- package/dist/esm/languages/mysql/mysql.functions.js.map +1 -0
- package/dist/esm/languages/mysql/mysql.keywords.d.ts +2 -0
- package/dist/esm/languages/mysql/mysql.keywords.js +285 -0
- package/dist/esm/languages/mysql/mysql.keywords.js.map +1 -0
- package/dist/esm/languages/n1ql/n1ql.formatter.d.ts +2 -0
- package/dist/esm/languages/n1ql/n1ql.formatter.js +106 -0
- package/dist/esm/languages/n1ql/n1ql.formatter.js.map +1 -0
- package/dist/esm/languages/n1ql/n1ql.functions.d.ts +1 -0
- package/dist/esm/languages/n1ql/n1ql.functions.js +232 -0
- package/dist/esm/languages/n1ql/n1ql.functions.js.map +1 -0
- package/dist/esm/languages/n1ql/n1ql.keywords.d.ts +2 -0
- package/dist/esm/languages/n1ql/n1ql.keywords.js +218 -0
- package/dist/esm/languages/n1ql/n1ql.keywords.js.map +1 -0
- package/dist/esm/languages/plsql/plsql.formatter.d.ts +2 -0
- package/dist/esm/languages/plsql/plsql.formatter.js +137 -0
- package/dist/esm/languages/plsql/plsql.formatter.js.map +1 -0
- package/dist/esm/languages/plsql/plsql.functions.d.ts +1 -0
- package/dist/esm/languages/plsql/plsql.functions.js +267 -0
- package/dist/esm/languages/plsql/plsql.functions.js.map +1 -0
- package/dist/esm/languages/plsql/plsql.keywords.d.ts +2 -0
- package/dist/esm/languages/plsql/plsql.keywords.js +346 -0
- package/dist/esm/languages/plsql/plsql.keywords.js.map +1 -0
- package/dist/esm/languages/postgresql/postgresql.formatter.d.ts +2 -0
- package/dist/esm/languages/postgresql/postgresql.formatter.js +388 -0
- package/dist/esm/languages/postgresql/postgresql.formatter.js.map +1 -0
- package/dist/esm/languages/postgresql/postgresql.functions.d.ts +1 -0
- package/dist/esm/languages/postgresql/postgresql.functions.js +690 -0
- package/dist/esm/languages/postgresql/postgresql.functions.js.map +1 -0
- package/dist/esm/languages/postgresql/postgresql.keywords.d.ts +2 -0
- package/dist/esm/languages/postgresql/postgresql.keywords.js +155 -0
- package/dist/esm/languages/postgresql/postgresql.keywords.js.map +1 -0
- package/dist/esm/languages/redshift/redshift.formatter.d.ts +2 -0
- package/dist/esm/languages/redshift/redshift.formatter.js +177 -0
- package/dist/esm/languages/redshift/redshift.formatter.js.map +1 -0
- package/dist/esm/languages/redshift/redshift.functions.d.ts +1 -0
- package/dist/esm/languages/redshift/redshift.functions.js +348 -0
- package/dist/esm/languages/redshift/redshift.functions.js.map +1 -0
- package/dist/esm/languages/redshift/redshift.keywords.d.ts +2 -0
- package/dist/esm/languages/redshift/redshift.keywords.js +213 -0
- package/dist/esm/languages/redshift/redshift.keywords.js.map +1 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.formatter.d.ts +2 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.formatter.js +283 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.formatter.js.map +1 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.functions.d.ts +1 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.functions.js +282 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.functions.js.map +1 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.keywords.d.ts +2 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.keywords.js +265 -0
- package/dist/esm/languages/singlestoredb/singlestoredb.keywords.js.map +1 -0
- package/dist/esm/languages/snowflake/snowflake.formatter.d.ts +2 -0
- package/dist/esm/languages/snowflake/snowflake.formatter.js +336 -0
- package/dist/esm/languages/snowflake/snowflake.formatter.js.map +1 -0
- package/dist/esm/languages/snowflake/snowflake.functions.d.ts +1 -0
- package/dist/esm/languages/snowflake/snowflake.functions.js +610 -0
- package/dist/esm/languages/snowflake/snowflake.functions.js.map +1 -0
- package/dist/esm/languages/snowflake/snowflake.keywords.d.ts +2 -0
- package/dist/esm/languages/snowflake/snowflake.keywords.js +137 -0
- package/dist/esm/languages/snowflake/snowflake.keywords.js.map +1 -0
- package/dist/esm/languages/spark/spark.formatter.d.ts +2 -0
- package/dist/esm/languages/spark/spark.formatter.js +164 -0
- package/dist/esm/languages/spark/spark.formatter.js.map +1 -0
- package/dist/esm/languages/spark/spark.functions.d.ts +1 -0
- package/dist/esm/languages/spark/spark.functions.js +323 -0
- package/dist/esm/languages/spark/spark.functions.js.map +1 -0
- package/dist/esm/languages/spark/spark.keywords.d.ts +2 -0
- package/dist/esm/languages/spark/spark.keywords.js +299 -0
- package/dist/esm/languages/spark/spark.keywords.js.map +1 -0
- package/dist/esm/languages/sql/sql.formatter.d.ts +2 -0
- package/dist/esm/languages/sql/sql.formatter.js +94 -0
- package/dist/esm/languages/sql/sql.formatter.js.map +1 -0
- package/dist/esm/languages/sql/sql.functions.d.ts +1 -0
- package/dist/esm/languages/sql/sql.functions.js +99 -0
- package/dist/esm/languages/sql/sql.functions.js.map +1 -0
- package/dist/esm/languages/sql/sql.keywords.d.ts +2 -0
- package/dist/esm/languages/sql/sql.keywords.js +241 -0
- package/dist/esm/languages/sql/sql.keywords.js.map +1 -0
- package/dist/esm/languages/sqlite/sqlite.formatter.d.ts +2 -0
- package/dist/esm/languages/sqlite/sqlite.formatter.js +91 -0
- package/dist/esm/languages/sqlite/sqlite.formatter.js.map +1 -0
- package/dist/esm/languages/sqlite/sqlite.functions.d.ts +1 -0
- package/dist/esm/languages/sqlite/sqlite.functions.js +126 -0
- package/dist/esm/languages/sqlite/sqlite.functions.js.map +1 -0
- package/dist/esm/languages/sqlite/sqlite.keywords.d.ts +2 -0
- package/dist/esm/languages/sqlite/sqlite.keywords.js +177 -0
- package/dist/esm/languages/sqlite/sqlite.keywords.js.map +1 -0
- package/dist/esm/languages/tidb/tidb.formatter.d.ts +2 -0
- package/dist/esm/languages/tidb/tidb.formatter.js +215 -0
- package/dist/esm/languages/tidb/tidb.formatter.js.map +1 -0
- package/dist/esm/languages/tidb/tidb.functions.d.ts +1 -0
- package/dist/esm/languages/tidb/tidb.functions.js +328 -0
- package/dist/esm/languages/tidb/tidb.functions.js.map +1 -0
- package/dist/esm/languages/tidb/tidb.keywords.d.ts +2 -0
- package/dist/esm/languages/tidb/tidb.keywords.js +241 -0
- package/dist/esm/languages/tidb/tidb.keywords.js.map +1 -0
- package/dist/esm/languages/transactsql/transactsql.formatter.d.ts +2 -0
- package/dist/esm/languages/transactsql/transactsql.formatter.js +272 -0
- package/dist/esm/languages/transactsql/transactsql.formatter.js.map +1 -0
- package/dist/esm/languages/transactsql/transactsql.functions.d.ts +1 -0
- package/dist/esm/languages/transactsql/transactsql.functions.js +307 -0
- package/dist/esm/languages/transactsql/transactsql.functions.js.map +1 -0
- package/dist/esm/languages/transactsql/transactsql.keywords.d.ts +2 -0
- package/dist/esm/languages/transactsql/transactsql.keywords.js +211 -0
- package/dist/esm/languages/transactsql/transactsql.keywords.js.map +1 -0
- package/dist/esm/languages/trino/trino.formatter.d.ts +2 -0
- package/dist/esm/languages/trino/trino.formatter.js +160 -0
- package/dist/esm/languages/trino/trino.formatter.js.map +1 -0
- package/dist/esm/languages/trino/trino.functions.d.ts +1 -0
- package/dist/esm/languages/trino/trino.functions.js +436 -0
- package/dist/esm/languages/trino/trino.functions.js.map +1 -0
- package/dist/esm/languages/trino/trino.keywords.d.ts +2 -0
- package/dist/esm/languages/trino/trino.keywords.js +279 -0
- package/dist/esm/languages/trino/trino.keywords.js.map +1 -0
- package/dist/esm/lexer/NestedComment.d.ts +10 -0
- package/dist/esm/lexer/NestedComment.js +50 -0
- package/dist/esm/lexer/NestedComment.js.map +1 -0
- package/dist/esm/lexer/Tokenizer.d.ts +14 -0
- package/dist/esm/lexer/Tokenizer.js +264 -0
- package/dist/esm/lexer/Tokenizer.js.map +1 -0
- package/dist/esm/lexer/TokenizerEngine.d.ts +31 -0
- package/dist/esm/lexer/TokenizerEngine.js +92 -0
- package/dist/esm/lexer/TokenizerEngine.js.map +1 -0
- package/dist/esm/lexer/TokenizerOptions.d.ts +56 -0
- package/dist/esm/lexer/TokenizerOptions.js +2 -0
- package/dist/esm/lexer/TokenizerOptions.js.map +1 -0
- package/dist/esm/lexer/disambiguateTokens.d.ts +18 -0
- package/dist/esm/lexer/disambiguateTokens.js +86 -0
- package/dist/esm/lexer/disambiguateTokens.js.map +1 -0
- package/dist/esm/lexer/lineColFromIndex.d.ts +8 -0
- package/dist/esm/lexer/lineColFromIndex.js +8 -0
- package/dist/esm/lexer/lineColFromIndex.js.map +1 -0
- package/dist/esm/lexer/regexFactory.d.ts +55 -0
- package/dist/esm/lexer/regexFactory.js +140 -0
- package/dist/esm/lexer/regexFactory.js.map +1 -0
- package/dist/esm/lexer/regexUtil.d.ts +7 -0
- package/dist/esm/lexer/regexUtil.js +13 -0
- package/dist/esm/lexer/regexUtil.js.map +1 -0
- package/dist/esm/lexer/token.d.ts +89 -0
- package/dist/esm/lexer/token.js +94 -0
- package/dist/esm/lexer/token.js.map +1 -0
- package/dist/esm/parser/LexerAdapter.d.ts +17 -0
- package/dist/esm/parser/LexerAdapter.js +27 -0
- package/dist/esm/parser/LexerAdapter.js.map +1 -0
- package/dist/esm/parser/ast.d.ts +158 -0
- package/dist/esm/parser/ast.js +28 -0
- package/dist/esm/parser/ast.js.map +1 -0
- package/dist/esm/parser/createParser.d.ts +10 -0
- package/dist/esm/parser/createParser.js +36 -0
- package/dist/esm/parser/createParser.js.map +1 -0
- package/dist/esm/parser/grammar.d.ts +28 -0
- package/dist/esm/parser/grammar.js +366 -0
- package/dist/esm/parser/grammar.js.map +1 -0
- package/dist/esm/sqlFormatter.d.ts +31 -0
- package/dist/esm/sqlFormatter.js +86 -0
- package/dist/esm/sqlFormatter.js.map +1 -0
- package/dist/esm/utils.d.ts +8 -0
- package/dist/esm/utils.js +13 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/validateConfig.d.ts +4 -0
- package/dist/esm/validateConfig.js +38 -0
- package/dist/esm/validateConfig.js.map +1 -0
- package/dist/sql-formatter.min.cjs +2 -0
- package/dist/sql-formatter.min.cjs.map +1 -0
- package/dist/sql-formatter.min.js +2 -0
- package/package.json +135 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { lineColFromIndex } from './lineColFromIndex.js';
|
|
2
|
+
import { WHITESPACE_REGEX } from './regexUtil.js';
|
|
3
|
+
export default class TokenizerEngine {
|
|
4
|
+
constructor(rules, dialectName) {
|
|
5
|
+
this.rules = rules;
|
|
6
|
+
this.dialectName = dialectName;
|
|
7
|
+
this.input = ''; // The input SQL string to process
|
|
8
|
+
this.index = 0; // Current position in string
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Takes a SQL string and breaks it into tokens.
|
|
12
|
+
* Each token is an object with type and value.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} input - The SQL string
|
|
15
|
+
* @returns {Token[]} output token stream
|
|
16
|
+
*/
|
|
17
|
+
tokenize(input) {
|
|
18
|
+
this.input = input;
|
|
19
|
+
this.index = 0;
|
|
20
|
+
const tokens = [];
|
|
21
|
+
let token;
|
|
22
|
+
// Keep processing the string until end is reached
|
|
23
|
+
while (this.index < this.input.length) {
|
|
24
|
+
// skip any preceding whitespace
|
|
25
|
+
const precedingWhitespace = this.getWhitespace();
|
|
26
|
+
if (this.index < this.input.length) {
|
|
27
|
+
// Get the next token and the token type
|
|
28
|
+
token = this.getNextToken();
|
|
29
|
+
if (!token) {
|
|
30
|
+
throw this.createParseError();
|
|
31
|
+
}
|
|
32
|
+
tokens.push(Object.assign(Object.assign({}, token), { precedingWhitespace }));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return tokens;
|
|
36
|
+
}
|
|
37
|
+
createParseError() {
|
|
38
|
+
const text = this.input.slice(this.index, this.index + 10);
|
|
39
|
+
const { line, col } = lineColFromIndex(this.input, this.index);
|
|
40
|
+
return new Error(`Parse error: Unexpected "${text}" at line ${line} column ${col}.\n${this.dialectInfo()}`);
|
|
41
|
+
}
|
|
42
|
+
dialectInfo() {
|
|
43
|
+
if (this.dialectName === 'sql') {
|
|
44
|
+
return (`This likely happens because you're using the default "sql" dialect.\n` +
|
|
45
|
+
`If possible, please select a more specific dialect (like sqlite, postgresql, etc).`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return `SQL dialect used: "${this.dialectName}".`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
getWhitespace() {
|
|
52
|
+
WHITESPACE_REGEX.lastIndex = this.index;
|
|
53
|
+
const matches = WHITESPACE_REGEX.exec(this.input);
|
|
54
|
+
if (matches) {
|
|
55
|
+
// Advance current position by matched whitespace length
|
|
56
|
+
this.index += matches[0].length;
|
|
57
|
+
return matches[0];
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
getNextToken() {
|
|
62
|
+
for (const rule of this.rules) {
|
|
63
|
+
const token = this.match(rule);
|
|
64
|
+
if (token) {
|
|
65
|
+
return token;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
// Attempts to match token rule regex at current position in input
|
|
71
|
+
match(rule) {
|
|
72
|
+
rule.regex.lastIndex = this.index;
|
|
73
|
+
const matches = rule.regex.exec(this.input);
|
|
74
|
+
if (matches) {
|
|
75
|
+
const matchedText = matches[0];
|
|
76
|
+
const token = {
|
|
77
|
+
type: rule.type,
|
|
78
|
+
raw: matchedText,
|
|
79
|
+
text: rule.text ? rule.text(matchedText) : matchedText,
|
|
80
|
+
start: this.index,
|
|
81
|
+
};
|
|
82
|
+
if (rule.key) {
|
|
83
|
+
token.key = rule.key(matchedText);
|
|
84
|
+
}
|
|
85
|
+
// Advance current position by matched token length
|
|
86
|
+
this.index += matchedText.length;
|
|
87
|
+
return token;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=TokenizerEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenizerEngine.js","sourceRoot":"","sources":["../../../src/lexer/TokenizerEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { quotePatterns } from './regexFactory.js';
|
|
2
|
+
import { Token } from './token.js';
|
|
3
|
+
export interface IdentChars {
|
|
4
|
+
first?: string;
|
|
5
|
+
rest?: string;
|
|
6
|
+
dashes?: boolean;
|
|
7
|
+
allowFirstCharNumber?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export type PlainQuoteType = keyof typeof quotePatterns;
|
|
10
|
+
export interface PrefixedQuoteType {
|
|
11
|
+
quote: PlainQuoteType;
|
|
12
|
+
prefixes: string[];
|
|
13
|
+
requirePrefix?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RegexPattern {
|
|
16
|
+
regex: string;
|
|
17
|
+
}
|
|
18
|
+
export type QuoteType = PlainQuoteType | PrefixedQuoteType | RegexPattern;
|
|
19
|
+
export type VariableType = RegexPattern | PrefixedQuoteType;
|
|
20
|
+
export interface ParamTypes {
|
|
21
|
+
positional?: boolean;
|
|
22
|
+
numbered?: ('?' | ':' | '$')[];
|
|
23
|
+
named?: (':' | '@' | '$')[];
|
|
24
|
+
quoted?: (':' | '@' | '$')[];
|
|
25
|
+
custom?: CustomParameter[];
|
|
26
|
+
}
|
|
27
|
+
export interface CustomParameter {
|
|
28
|
+
regex: string;
|
|
29
|
+
key?: (text: string) => string;
|
|
30
|
+
}
|
|
31
|
+
export interface TokenizerOptions {
|
|
32
|
+
reservedSelect: string[];
|
|
33
|
+
reservedClauses: string[];
|
|
34
|
+
supportsXor?: boolean;
|
|
35
|
+
reservedSetOperations: string[];
|
|
36
|
+
reservedJoins: string[];
|
|
37
|
+
reservedKeywordPhrases?: string[];
|
|
38
|
+
reservedDataTypePhrases?: string[];
|
|
39
|
+
reservedFunctionNames: string[];
|
|
40
|
+
reservedDataTypes: string[];
|
|
41
|
+
reservedKeywords: string[];
|
|
42
|
+
stringTypes: QuoteType[];
|
|
43
|
+
identTypes: QuoteType[];
|
|
44
|
+
variableTypes?: VariableType[];
|
|
45
|
+
extraParens?: ('[]' | '{}')[];
|
|
46
|
+
paramTypes?: ParamTypes;
|
|
47
|
+
lineCommentTypes?: string[];
|
|
48
|
+
nestedBlockComments?: boolean;
|
|
49
|
+
identChars?: IdentChars;
|
|
50
|
+
paramChars?: IdentChars;
|
|
51
|
+
operators?: string[];
|
|
52
|
+
propertyAccessOperators?: string[];
|
|
53
|
+
operatorKeyword?: boolean;
|
|
54
|
+
underscoresInNumbers?: boolean;
|
|
55
|
+
postProcess?: (tokens: Token[]) => Token[];
|
|
56
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenizerOptions.js","sourceRoot":"","sources":["../../../src/lexer/TokenizerOptions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Token } from './token.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ensures that no keyword token (RESERVED_*) is preceded or followed by a dot (.)
|
|
4
|
+
* or any other property-access operator.
|
|
5
|
+
*
|
|
6
|
+
* Ensures that all RESERVED_FUNCTION_NAME tokens are followed by "(".
|
|
7
|
+
* If they're not, converts the token to IDENTIFIER.
|
|
8
|
+
*
|
|
9
|
+
* Converts RESERVED_DATA_TYPE tokens followed by "(" to RESERVED_PARAMETERIZED_DATA_TYPE.
|
|
10
|
+
*
|
|
11
|
+
* When IDENTIFIER or RESERVED_DATA_TYPE token is followed by "["
|
|
12
|
+
* converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.
|
|
13
|
+
*
|
|
14
|
+
* This is needed to avoid ambiguity in parser which expects function names
|
|
15
|
+
* to always be followed by open-paren, and to distinguish between
|
|
16
|
+
* array accessor `foo[1]` and array literal `[1, 2, 3]`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function disambiguateTokens(tokens: Token[]): Token[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isReserved, TokenType } from './token.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ensures that no keyword token (RESERVED_*) is preceded or followed by a dot (.)
|
|
4
|
+
* or any other property-access operator.
|
|
5
|
+
*
|
|
6
|
+
* Ensures that all RESERVED_FUNCTION_NAME tokens are followed by "(".
|
|
7
|
+
* If they're not, converts the token to IDENTIFIER.
|
|
8
|
+
*
|
|
9
|
+
* Converts RESERVED_DATA_TYPE tokens followed by "(" to RESERVED_PARAMETERIZED_DATA_TYPE.
|
|
10
|
+
*
|
|
11
|
+
* When IDENTIFIER or RESERVED_DATA_TYPE token is followed by "["
|
|
12
|
+
* converts it to ARRAY_IDENTIFIER or ARRAY_KEYWORD accordingly.
|
|
13
|
+
*
|
|
14
|
+
* This is needed to avoid ambiguity in parser which expects function names
|
|
15
|
+
* to always be followed by open-paren, and to distinguish between
|
|
16
|
+
* array accessor `foo[1]` and array literal `[1, 2, 3]`.
|
|
17
|
+
*/
|
|
18
|
+
export function disambiguateTokens(tokens) {
|
|
19
|
+
return tokens
|
|
20
|
+
.map(propertyNameKeywordToIdent)
|
|
21
|
+
.map(funcNameToIdent)
|
|
22
|
+
.map(dataTypeToParameterizedDataType)
|
|
23
|
+
.map(identToArrayIdent)
|
|
24
|
+
.map(dataTypeToArrayKeyword);
|
|
25
|
+
}
|
|
26
|
+
const propertyNameKeywordToIdent = (token, i, tokens) => {
|
|
27
|
+
if (isReserved(token.type)) {
|
|
28
|
+
const prevToken = prevNonCommentToken(tokens, i);
|
|
29
|
+
if (prevToken && prevToken.type === TokenType.PROPERTY_ACCESS_OPERATOR) {
|
|
30
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.IDENTIFIER, text: token.raw });
|
|
31
|
+
}
|
|
32
|
+
const nextToken = nextNonCommentToken(tokens, i);
|
|
33
|
+
if (nextToken && nextToken.type === TokenType.PROPERTY_ACCESS_OPERATOR) {
|
|
34
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.IDENTIFIER, text: token.raw });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return token;
|
|
38
|
+
};
|
|
39
|
+
const funcNameToIdent = (token, i, tokens) => {
|
|
40
|
+
if (token.type === TokenType.RESERVED_FUNCTION_NAME) {
|
|
41
|
+
const nextToken = nextNonCommentToken(tokens, i);
|
|
42
|
+
if (!nextToken || !isOpenParen(nextToken)) {
|
|
43
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.IDENTIFIER, text: token.raw });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return token;
|
|
47
|
+
};
|
|
48
|
+
const dataTypeToParameterizedDataType = (token, i, tokens) => {
|
|
49
|
+
if (token.type === TokenType.RESERVED_DATA_TYPE) {
|
|
50
|
+
const nextToken = nextNonCommentToken(tokens, i);
|
|
51
|
+
if (nextToken && isOpenParen(nextToken)) {
|
|
52
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.RESERVED_PARAMETERIZED_DATA_TYPE });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return token;
|
|
56
|
+
};
|
|
57
|
+
const identToArrayIdent = (token, i, tokens) => {
|
|
58
|
+
if (token.type === TokenType.IDENTIFIER) {
|
|
59
|
+
const nextToken = nextNonCommentToken(tokens, i);
|
|
60
|
+
if (nextToken && isOpenBracket(nextToken)) {
|
|
61
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.ARRAY_IDENTIFIER });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return token;
|
|
65
|
+
};
|
|
66
|
+
const dataTypeToArrayKeyword = (token, i, tokens) => {
|
|
67
|
+
if (token.type === TokenType.RESERVED_DATA_TYPE) {
|
|
68
|
+
const nextToken = nextNonCommentToken(tokens, i);
|
|
69
|
+
if (nextToken && isOpenBracket(nextToken)) {
|
|
70
|
+
return Object.assign(Object.assign({}, token), { type: TokenType.ARRAY_KEYWORD });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return token;
|
|
74
|
+
};
|
|
75
|
+
const prevNonCommentToken = (tokens, index) => nextNonCommentToken(tokens, index, -1);
|
|
76
|
+
const nextNonCommentToken = (tokens, index, dir = 1) => {
|
|
77
|
+
let i = 1;
|
|
78
|
+
while (tokens[index + i * dir] && isComment(tokens[index + i * dir])) {
|
|
79
|
+
i++;
|
|
80
|
+
}
|
|
81
|
+
return tokens[index + i * dir];
|
|
82
|
+
};
|
|
83
|
+
const isOpenParen = (t) => t.type === TokenType.OPEN_PAREN && t.text === '(';
|
|
84
|
+
const isOpenBracket = (t) => t.type === TokenType.OPEN_PAREN && t.text === '[';
|
|
85
|
+
const isComment = (t) => t.type === TokenType.BLOCK_COMMENT || t.type === TokenType.LINE_COMMENT;
|
|
86
|
+
//# sourceMappingURL=disambiguateTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disambiguateTokens.js","sourceRoot":"","sources":["../../../src/lexer/disambiguateTokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines line and column number of character index in source code.
|
|
3
|
+
*/
|
|
4
|
+
export function lineColFromIndex(source, index) {
|
|
5
|
+
const lines = source.slice(0, index).split(/\n/);
|
|
6
|
+
return { line: lines.length, col: lines[lines.length - 1].length + 1 };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=lineColFromIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineColFromIndex.js","sourceRoot":"","sources":["../../../src/lexer/lineColFromIndex.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,KAAa;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { IdentChars, QuoteType, VariableType } from './TokenizerOptions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds a RegExp for valid line comments in a SQL dialect
|
|
4
|
+
* @param {string[]} lineCommentTypes - list of character strings that denote line comments
|
|
5
|
+
*/
|
|
6
|
+
export declare const lineComment: (lineCommentTypes: string[]) => RegExp;
|
|
7
|
+
/**
|
|
8
|
+
* Builds a RegExp for matching either open- or close-parenthesis patterns
|
|
9
|
+
*/
|
|
10
|
+
export declare const parenthesis: (kind: 'open' | 'close', extraParens?: ('[]' | '{}')[]) => RegExp;
|
|
11
|
+
/**
|
|
12
|
+
* Builds a RegExp containing all operators for a SQL dialect
|
|
13
|
+
*/
|
|
14
|
+
export declare const operator: (operators: string[]) => RegExp;
|
|
15
|
+
/**
|
|
16
|
+
* Builds a RegExp for all Reserved Keywords in a SQL dialect
|
|
17
|
+
*/
|
|
18
|
+
export declare const reservedWord: (reservedKeywords: string[], identChars?: IdentChars) => RegExp;
|
|
19
|
+
/**
|
|
20
|
+
* Builds a RegExp for parameter placeholder patterns
|
|
21
|
+
* @param {string[]} paramTypes - list of strings that denote placeholder types
|
|
22
|
+
* @param {string} pattern - string that denotes placeholder pattern
|
|
23
|
+
*/
|
|
24
|
+
export declare const parameter: (paramTypes: string[], pattern: string) => RegExp | undefined;
|
|
25
|
+
export declare const quotePatterns: {
|
|
26
|
+
'``': string;
|
|
27
|
+
'[]': string;
|
|
28
|
+
'""-qq': string;
|
|
29
|
+
'""-bs': string;
|
|
30
|
+
'""-qq-bs': string;
|
|
31
|
+
'""-raw': string;
|
|
32
|
+
"''-qq": string;
|
|
33
|
+
"''-bs": string;
|
|
34
|
+
"''-qq-bs": string;
|
|
35
|
+
"''-raw": string;
|
|
36
|
+
$$: string;
|
|
37
|
+
"'''..'''": string;
|
|
38
|
+
'""".."""': string;
|
|
39
|
+
'{}': string;
|
|
40
|
+
"q''": string;
|
|
41
|
+
};
|
|
42
|
+
/** Builds a RegExp for matching variables */
|
|
43
|
+
export declare const variable: (varTypes: VariableType[]) => RegExp;
|
|
44
|
+
/** Builds a quote-delimited pattern for matching all given quote types */
|
|
45
|
+
export declare const stringPattern: (quoteTypes: QuoteType[]) => string;
|
|
46
|
+
/** Builds a RegExp for matching quote-delimited patterns */
|
|
47
|
+
export declare const string: (quoteTypes: QuoteType[]) => RegExp;
|
|
48
|
+
/**
|
|
49
|
+
* Builds a RegExp for valid identifiers in a SQL dialect
|
|
50
|
+
*/
|
|
51
|
+
export declare const identifier: (specialChars?: IdentChars) => RegExp;
|
|
52
|
+
/**
|
|
53
|
+
* Builds a RegExp string for valid identifiers in a SQL dialect
|
|
54
|
+
*/
|
|
55
|
+
export declare const identifierPattern: ({ first, rest, dashes, allowFirstCharNumber, }?: IdentChars) => string;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { sortByLengthDesc } from '../utils.js';
|
|
2
|
+
import { escapeRegExp, patternToRegex, prefixesPattern, withDashes } from './regexUtil.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a RegExp for valid line comments in a SQL dialect
|
|
5
|
+
* @param {string[]} lineCommentTypes - list of character strings that denote line comments
|
|
6
|
+
*/
|
|
7
|
+
export const lineComment = (lineCommentTypes) => new RegExp(`(?:${lineCommentTypes.map(escapeRegExp).join('|')}).*?(?=\r\n|\r|\n|$)`, 'uy');
|
|
8
|
+
/**
|
|
9
|
+
* Builds a RegExp for matching either open- or close-parenthesis patterns
|
|
10
|
+
*/
|
|
11
|
+
export const parenthesis = (kind, extraParens = []) => {
|
|
12
|
+
const index = kind === 'open' ? 0 : 1;
|
|
13
|
+
const parens = ['()', ...extraParens].map(pair => pair[index]);
|
|
14
|
+
return patternToRegex(parens.map(escapeRegExp).join('|'));
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Builds a RegExp containing all operators for a SQL dialect
|
|
18
|
+
*/
|
|
19
|
+
export const operator = (operators) => patternToRegex(`${sortByLengthDesc(operators).map(escapeRegExp).join('|')}`);
|
|
20
|
+
// Negative lookahead to avoid matching a keyword that's actually part of identifier,
|
|
21
|
+
// which can happen when identifier allows word-boundary characters inside it.
|
|
22
|
+
//
|
|
23
|
+
// For example "SELECT$ME" should be tokenized as:
|
|
24
|
+
// - ["SELECT$ME"] when $ is allowed inside identifiers
|
|
25
|
+
// - ["SELECT", "$", "ME"] when $ can't be part of identifiers.
|
|
26
|
+
const rejectIdentCharsPattern = ({ rest, dashes }) => rest || dashes ? `(?![${rest || ''}${dashes ? '-' : ''}])` : '';
|
|
27
|
+
/**
|
|
28
|
+
* Builds a RegExp for all Reserved Keywords in a SQL dialect
|
|
29
|
+
*/
|
|
30
|
+
export const reservedWord = (reservedKeywords, identChars = {}) => {
|
|
31
|
+
if (reservedKeywords.length === 0) {
|
|
32
|
+
return /^\b$/u;
|
|
33
|
+
}
|
|
34
|
+
const avoidIdentChars = rejectIdentCharsPattern(identChars);
|
|
35
|
+
const reservedKeywordsPattern = sortByLengthDesc(reservedKeywords)
|
|
36
|
+
.map(escapeRegExp)
|
|
37
|
+
.join('|')
|
|
38
|
+
.replace(/ /gu, '\\s+');
|
|
39
|
+
return new RegExp(`(?:${reservedKeywordsPattern})${avoidIdentChars}\\b`, 'iuy');
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Builds a RegExp for parameter placeholder patterns
|
|
43
|
+
* @param {string[]} paramTypes - list of strings that denote placeholder types
|
|
44
|
+
* @param {string} pattern - string that denotes placeholder pattern
|
|
45
|
+
*/
|
|
46
|
+
export const parameter = (paramTypes, pattern) => {
|
|
47
|
+
if (!paramTypes.length) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const typesRegex = paramTypes.map(escapeRegExp).join('|');
|
|
51
|
+
return patternToRegex(`(?:${typesRegex})(?:${pattern})`);
|
|
52
|
+
};
|
|
53
|
+
const buildQStringPatterns = () => {
|
|
54
|
+
const specialDelimiterMap = {
|
|
55
|
+
'<': '>',
|
|
56
|
+
'[': ']',
|
|
57
|
+
'(': ')',
|
|
58
|
+
'{': '}',
|
|
59
|
+
};
|
|
60
|
+
// base pattern for special delimiters, left must correspond with right
|
|
61
|
+
const singlePattern = "{left}(?:(?!{right}').)*?{right}";
|
|
62
|
+
// replace {left} and {right} with delimiters, collect as array
|
|
63
|
+
const patternList = Object.entries(specialDelimiterMap).map(([left, right]) => singlePattern.replace(/{left}/g, escapeRegExp(left)).replace(/{right}/g, escapeRegExp(right)));
|
|
64
|
+
const specialDelimiters = escapeRegExp(Object.keys(specialDelimiterMap).join(''));
|
|
65
|
+
// standard pattern for common delimiters, ignores special delimiters
|
|
66
|
+
const standardDelimiterPattern = String.raw `(?<tag>[^\s${specialDelimiters}])(?:(?!\k<tag>').)*?\k<tag>`;
|
|
67
|
+
// constructs final pattern by joining all cases
|
|
68
|
+
const qStringPattern = `[Qq]'(?:${standardDelimiterPattern}|${patternList.join('|')})'`;
|
|
69
|
+
return qStringPattern;
|
|
70
|
+
};
|
|
71
|
+
// Regex patterns for all supported quote styles.
|
|
72
|
+
//
|
|
73
|
+
// Most of them have a single escaping-style built in,
|
|
74
|
+
// but "" and '' support multiple versions of escapes,
|
|
75
|
+
// which must be selected with suffixes: -qq, -bs, -qq-bs, -raw
|
|
76
|
+
export const quotePatterns = {
|
|
77
|
+
// - backtick quoted (using `` to escape)
|
|
78
|
+
'``': '(?:`[^`]*`)+',
|
|
79
|
+
// - Transact-SQL square bracket quoted (using ]] to escape)
|
|
80
|
+
'[]': String.raw `(?:\[[^\]]*\])(?:\][^\]]*\])*`,
|
|
81
|
+
// double-quoted
|
|
82
|
+
'""-qq': String.raw `(?:"[^"]*")+`,
|
|
83
|
+
'""-bs': String.raw `(?:"[^"\\]*(?:\\.[^"\\]*)*")`,
|
|
84
|
+
'""-qq-bs': String.raw `(?:"[^"\\]*(?:\\.[^"\\]*)*")+`,
|
|
85
|
+
'""-raw': String.raw `(?:"[^"]*")`,
|
|
86
|
+
// single-quoted
|
|
87
|
+
"''-qq": String.raw `(?:'[^']*')+`,
|
|
88
|
+
"''-bs": String.raw `(?:'[^'\\]*(?:\\.[^'\\]*)*')`,
|
|
89
|
+
"''-qq-bs": String.raw `(?:'[^'\\]*(?:\\.[^'\\]*)*')+`,
|
|
90
|
+
"''-raw": String.raw `(?:'[^']*')`,
|
|
91
|
+
// PostgreSQL dollar-quoted
|
|
92
|
+
'$$': String.raw `(?<tag>\$\w*\$)[\s\S]*?\k<tag>`,
|
|
93
|
+
// BigQuery '''triple-quoted''' (using \' to escape)
|
|
94
|
+
"'''..'''": String.raw `'''[^\\]*?(?:\\.[^\\]*?)*?'''`,
|
|
95
|
+
// BigQuery """triple-quoted""" (using \" to escape)
|
|
96
|
+
'""".."""': String.raw `"""[^\\]*?(?:\\.[^\\]*?)*?"""`,
|
|
97
|
+
// Hive and Spark variables: ${name}
|
|
98
|
+
'{}': String.raw `(?:\{[^\}]*\})`,
|
|
99
|
+
// Oracle q'' strings: q'<text>' q'|text|' ...
|
|
100
|
+
"q''": buildQStringPatterns(),
|
|
101
|
+
};
|
|
102
|
+
const singleQuotePattern = (quoteTypes) => {
|
|
103
|
+
if (typeof quoteTypes === 'string') {
|
|
104
|
+
return quotePatterns[quoteTypes];
|
|
105
|
+
}
|
|
106
|
+
else if ('regex' in quoteTypes) {
|
|
107
|
+
return quoteTypes.regex;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
return prefixesPattern(quoteTypes) + quotePatterns[quoteTypes.quote];
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/** Builds a RegExp for matching variables */
|
|
114
|
+
export const variable = (varTypes) => patternToRegex(varTypes
|
|
115
|
+
.map(varType => ('regex' in varType ? varType.regex : singleQuotePattern(varType)))
|
|
116
|
+
.join('|'));
|
|
117
|
+
/** Builds a quote-delimited pattern for matching all given quote types */
|
|
118
|
+
export const stringPattern = (quoteTypes) => quoteTypes.map(singleQuotePattern).join('|');
|
|
119
|
+
/** Builds a RegExp for matching quote-delimited patterns */
|
|
120
|
+
export const string = (quoteTypes) => patternToRegex(stringPattern(quoteTypes));
|
|
121
|
+
/**
|
|
122
|
+
* Builds a RegExp for valid identifiers in a SQL dialect
|
|
123
|
+
*/
|
|
124
|
+
export const identifier = (specialChars = {}) => patternToRegex(identifierPattern(specialChars));
|
|
125
|
+
/**
|
|
126
|
+
* Builds a RegExp string for valid identifiers in a SQL dialect
|
|
127
|
+
*/
|
|
128
|
+
export const identifierPattern = ({ first, rest, dashes, allowFirstCharNumber, } = {}) => {
|
|
129
|
+
// Unicode letters, diacritical marks and underscore
|
|
130
|
+
const letter = '\\p{Alphabetic}\\p{Mark}_';
|
|
131
|
+
// Numbers 0..9, plus various unicode numbers
|
|
132
|
+
const number = '\\p{Decimal_Number}';
|
|
133
|
+
const firstChars = escapeRegExp(first !== null && first !== void 0 ? first : '');
|
|
134
|
+
const restChars = escapeRegExp(rest !== null && rest !== void 0 ? rest : '');
|
|
135
|
+
const pattern = allowFirstCharNumber
|
|
136
|
+
? `[${letter}${number}${firstChars}][${letter}${number}${restChars}]*`
|
|
137
|
+
: `[${letter}${firstChars}][${letter}${number}${restChars}]*`;
|
|
138
|
+
return dashes ? withDashes(pattern) : pattern;
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=regexFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexFactory.js","sourceRoot":"","sources":["../../../src/lexer/regexFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PrefixedQuoteType } from './TokenizerOptions.js';
|
|
2
|
+
export declare const escapeRegExp: (string: string) => string;
|
|
3
|
+
export declare const WHITESPACE_REGEX: RegExp;
|
|
4
|
+
export declare const patternToRegex: (pattern: string) => RegExp;
|
|
5
|
+
export declare const toCaseInsensitivePattern: (prefix: string) => string;
|
|
6
|
+
export declare const withDashes: (pattern: string) => string;
|
|
7
|
+
export declare const prefixesPattern: ({ prefixes, requirePrefix }: PrefixedQuoteType) => string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Escapes regex special chars
|
|
2
|
+
export const escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
3
|
+
export const WHITESPACE_REGEX = /\s+/uy;
|
|
4
|
+
export const patternToRegex = (pattern) => new RegExp(`(?:${pattern})`, 'uy');
|
|
5
|
+
// Converts "ab" to "[Aa][Bb]"
|
|
6
|
+
export const toCaseInsensitivePattern = (prefix) => prefix
|
|
7
|
+
.split('')
|
|
8
|
+
.map(char => (/ /gu.test(char) ? '\\s+' : `[${char.toUpperCase()}${char.toLowerCase()}]`))
|
|
9
|
+
.join('');
|
|
10
|
+
export const withDashes = (pattern) => pattern + '(?:-' + pattern + ')*';
|
|
11
|
+
// Converts ["a", "b"] to "(?:[Aa]|[Bb]|)" or "(?:[Aa]|[Bb])" when required = true
|
|
12
|
+
export const prefixesPattern = ({ prefixes, requirePrefix }) => `(?:${prefixes.map(toCaseInsensitivePattern).join('|')}${requirePrefix ? '' : '|'})`;
|
|
13
|
+
//# sourceMappingURL=regexUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexUtil.js","sourceRoot":"","sources":["../../../src/lexer/regexUtil.ts"],"names":[],"mappings":"AAEA,8BAA8B;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAE/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC;AAE9F,8BAA8B;AAC9B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAU,EAAE,CACjE,MAAM;KACH,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;KACzF,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAEzF,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAqB,EAAU,EAAE,CACxF,MAAM,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/** Token type enum for all possible Token categories */
|
|
2
|
+
export declare enum TokenType {
|
|
3
|
+
QUOTED_IDENTIFIER = "QUOTED_IDENTIFIER",
|
|
4
|
+
IDENTIFIER = "IDENTIFIER",
|
|
5
|
+
STRING = "STRING",
|
|
6
|
+
VARIABLE = "VARIABLE",
|
|
7
|
+
RESERVED_DATA_TYPE = "RESERVED_DATA_TYPE",
|
|
8
|
+
RESERVED_PARAMETERIZED_DATA_TYPE = "RESERVED_PARAMETERIZED_DATA_TYPE",
|
|
9
|
+
RESERVED_KEYWORD = "RESERVED_KEYWORD",
|
|
10
|
+
RESERVED_FUNCTION_NAME = "RESERVED_FUNCTION_NAME",
|
|
11
|
+
RESERVED_KEYWORD_PHRASE = "RESERVED_KEYWORD_PHRASE",
|
|
12
|
+
RESERVED_DATA_TYPE_PHRASE = "RESERVED_DATA_TYPE_PHRASE",
|
|
13
|
+
RESERVED_SET_OPERATION = "RESERVED_SET_OPERATION",
|
|
14
|
+
RESERVED_CLAUSE = "RESERVED_CLAUSE",
|
|
15
|
+
RESERVED_SELECT = "RESERVED_SELECT",
|
|
16
|
+
RESERVED_JOIN = "RESERVED_JOIN",
|
|
17
|
+
ARRAY_IDENTIFIER = "ARRAY_IDENTIFIER",
|
|
18
|
+
ARRAY_KEYWORD = "ARRAY_KEYWORD",
|
|
19
|
+
CASE = "CASE",
|
|
20
|
+
END = "END",
|
|
21
|
+
WHEN = "WHEN",
|
|
22
|
+
ELSE = "ELSE",
|
|
23
|
+
THEN = "THEN",
|
|
24
|
+
LIMIT = "LIMIT",
|
|
25
|
+
BETWEEN = "BETWEEN",
|
|
26
|
+
AND = "AND",
|
|
27
|
+
OR = "OR",
|
|
28
|
+
XOR = "XOR",
|
|
29
|
+
OPERATOR = "OPERATOR",
|
|
30
|
+
COMMA = "COMMA",
|
|
31
|
+
ASTERISK = "ASTERISK",
|
|
32
|
+
PROPERTY_ACCESS_OPERATOR = "PROPERTY_ACCESS_OPERATOR",
|
|
33
|
+
OPEN_PAREN = "OPEN_PAREN",
|
|
34
|
+
CLOSE_PAREN = "CLOSE_PAREN",
|
|
35
|
+
LINE_COMMENT = "LINE_COMMENT",
|
|
36
|
+
BLOCK_COMMENT = "BLOCK_COMMENT",
|
|
37
|
+
DISABLE_COMMENT = "DISABLE_COMMENT",
|
|
38
|
+
NUMBER = "NUMBER",
|
|
39
|
+
NAMED_PARAMETER = "NAMED_PARAMETER",
|
|
40
|
+
QUOTED_PARAMETER = "QUOTED_PARAMETER",
|
|
41
|
+
NUMBERED_PARAMETER = "NUMBERED_PARAMETER",
|
|
42
|
+
POSITIONAL_PARAMETER = "POSITIONAL_PARAMETER",
|
|
43
|
+
CUSTOM_PARAMETER = "CUSTOM_PARAMETER",
|
|
44
|
+
DELIMITER = "DELIMITER",
|
|
45
|
+
EOF = "EOF"
|
|
46
|
+
}
|
|
47
|
+
/** Struct to store the most basic cohesive unit of language grammar */
|
|
48
|
+
export interface Token {
|
|
49
|
+
type: TokenType;
|
|
50
|
+
raw: string;
|
|
51
|
+
text: string;
|
|
52
|
+
key?: string;
|
|
53
|
+
start: number;
|
|
54
|
+
precedingWhitespace?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Creates EOF token positioned at given location */
|
|
57
|
+
export declare const createEofToken: (index: number) => {
|
|
58
|
+
type: TokenType;
|
|
59
|
+
raw: string;
|
|
60
|
+
text: string;
|
|
61
|
+
start: number;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* For use as a "missing token"
|
|
65
|
+
* e.g. in lookAhead and lookBehind to avoid dealing with null values
|
|
66
|
+
*/
|
|
67
|
+
export declare const EOF_TOKEN: {
|
|
68
|
+
type: TokenType;
|
|
69
|
+
raw: string;
|
|
70
|
+
text: string;
|
|
71
|
+
start: number;
|
|
72
|
+
};
|
|
73
|
+
/** Checks if two tokens are equivalent */
|
|
74
|
+
export declare const testToken: (compareToken: {
|
|
75
|
+
type: TokenType;
|
|
76
|
+
text: string;
|
|
77
|
+
}) => (token: Token) => boolean;
|
|
78
|
+
/** Util object that allows for easy checking of Reserved Keywords */
|
|
79
|
+
export declare const isToken: {
|
|
80
|
+
ARRAY: (token: Token) => boolean;
|
|
81
|
+
BY: (token: Token) => boolean;
|
|
82
|
+
SET: (token: Token) => boolean;
|
|
83
|
+
STRUCT: (token: Token) => boolean;
|
|
84
|
+
WINDOW: (token: Token) => boolean;
|
|
85
|
+
VALUES: (token: Token) => boolean;
|
|
86
|
+
};
|
|
87
|
+
/** Checks if token is any Reserved Keyword or Clause */
|
|
88
|
+
export declare const isReserved: (type: TokenType) => boolean;
|
|
89
|
+
export declare const isLogicalOperator: (type: TokenType) => boolean;
|