Skip to content

feat: improve code splitting by introducing subpackage entry points #836

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": ["test/**", "**/*.test.js", "**/*.test.ts"],
"devDependencies": ["test/**", "**/*.test.js", "**/*.test.ts", "tsup.config.ts"],
"packageDir": ["./"]
}
],
Expand Down
5 changes: 3 additions & 2 deletions docs/dialect.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ Specifies the SQL dialect to use.
## Usage

```ts
import { formatDialect, sqlite } from 'sql-formatter';
import { formatDialect } from 'sql-formatter/dialect';
import sqlite from 'sql-formatter/languages/sqlite';

const result = formatDialect('SELECT * FROM tbl', { dialect: sqlite });
```
Expand Down Expand Up @@ -49,7 +50,7 @@ Better to always pick something more specific if possible.
The `dialect` parameter can also be used to specify a custom SQL dialect configuration:

```ts
import { formatDialect, DialectOptions } from 'sql-formatter';
import { formatDialect, DialectOptions } from 'sql-formatter/dialect';

const myDialect: DialectOptions {
name: 'my_dialect',
Expand Down
10 changes: 9 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@
".": {
"import": "./dist/index.js",
"require": "./dist/index.cjs"
},
"./dialect": {
"import": "./dist/dialect.js",
"require": "./dist/dialect.cjs"
},
"./languages/*": {
"import": "./dist/languages/*/index.js",
"require": "./dist/languages/*/index.cjs"
}
},
"bin": {
Expand Down Expand Up @@ -62,7 +70,7 @@
"prepare": "yarn clean && yarn grammar && yarn fix && yarn check && yarn build",
"pre-commit": "npm-run-all --parallel ts:changes lint:changes",
"grammar": "nearleyc src/parser/grammar.ne -o src/parser/grammar.ts",
"build:tsup": "tsup src/index.ts --format cjs,esm --sourcemap --dts",
"build:tsup": "tsup",
"build:webpack": "webpack --config webpack.prod.js && cp dist/sql-formatter.min.cjs dist/sql-formatter.min.js",
"build": "yarn grammar && npm-run-all --parallel build:tsup build:webpack",
"release": "release-it"
Expand Down
52 changes: 52 additions & 0 deletions src/FormatOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,70 @@ export type FunctionCase = KeywordCase;
export type LogicalOperatorNewline = 'before' | 'after';

export interface FormatOptions {
/**
* Number of spaces per indentation level. Defaults to `2`
*/
tabWidth: number;
/**
* Use tabs for indentation instead of spaces. Defaults to `false`
*/
useTabs: boolean;
/**
* Transform case of keywords. Defaults to `"preserve"`
*/
keywordCase: KeywordCase;
/**
* Transform case of identifiers. Defaults to `"preserve"`
*/
identifierCase: IdentifierCase;
/**
* Transform case of data types. Defaults to `"preserve"`
*/
dataTypeCase: DataTypeCase;
/**
* Transform case of function names. Defaults to `"preserve"`
*/
functionCase: FunctionCase;
/**
* Indentation style. Defaults to `"standard"`
*/
indentStyle: IndentStyle;
/**
* Position of logical operators in multiline conditions. Defaults to `"before"`
*/
logicalOperatorNewline: LogicalOperatorNewline;
/**
* Maximum length of expressions before breaking into multiple lines. Defaults to `50`
*/
expressionWidth: number;
/**
* Number of blank lines between queries. Defaults to `1`
*/
linesBetweenQueries: number;
/**
* Remove spaces around operators. Defaults to `false`
*/
denseOperators: boolean;
/**
* Place semicolon on new line. Defaults to `false`
*/
newlineBeforeSemicolon: boolean;

params?: ParamItems | string[];
paramTypes?: ParamTypes;
}

export const defaultFormatOptions: FormatOptions = {
tabWidth: 2,
useTabs: false,
keywordCase: 'preserve',
identifierCase: 'preserve',
dataTypeCase: 'preserve',
functionCase: 'preserve',
indentStyle: 'standard',
logicalOperatorNewline: 'before',
expressionWidth: 50,
linesBetweenQueries: 1,
denseOperators: false,
newlineBeforeSemicolon: false,
};
37 changes: 19 additions & 18 deletions src/allDialects.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
export { bigquery } from './languages/bigquery/bigquery.formatter.js';
export { db2 } from './languages/db2/db2.formatter.js';
export { db2i } from './languages/db2i/db2i.formatter.js';
export { hive } from './languages/hive/hive.formatter.js';
export { mariadb } from './languages/mariadb/mariadb.formatter.js';
export { mysql } from './languages/mysql/mysql.formatter.js';
export { tidb } from './languages/tidb/tidb.formatter.js';
export { n1ql } from './languages/n1ql/n1ql.formatter.js';
export { plsql } from './languages/plsql/plsql.formatter.js';
export { postgresql } from './languages/postgresql/postgresql.formatter.js';
export { redshift } from './languages/redshift/redshift.formatter.js';
export { spark } from './languages/spark/spark.formatter.js';
export { sqlite } from './languages/sqlite/sqlite.formatter.js';
export { sql } from './languages/sql/sql.formatter.js';
export { trino } from './languages/trino/trino.formatter.js';
export { transactsql } from './languages/transactsql/transactsql.formatter.js';
export { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';
export { snowflake } from './languages/snowflake/snowflake.formatter.js';
// When adding a new dialect, be sure to add it to the list of exports below.
export { default as bigquery } from './languages/bigquery/index.js';
export { default as db2 } from './languages/db2/index.js';
export { default as db2i } from './languages/db2i/index.js';
export { default as hive } from './languages/hive/index.js';
export { default as mariadb } from './languages/mariadb/index.js';
export { default as mysql } from './languages/mysql/index.js';
export { default as tidb } from './languages/tidb/index.js';
export { default as n1ql } from './languages/n1ql/index.js';
export { default as plsql } from './languages/plsql/index.js';
export { default as postgresql } from './languages/postgresql/index.js';
export { default as redshift } from './languages/redshift/index.js';
export { default as spark } from './languages/spark/index.js';
export { default as sqlite } from './languages/sqlite/index.js';
export { default as sql } from './languages/sql/index.js';
export { default as trino } from './languages/trino/index.js';
export { default as transactsql } from './languages/transactsql/index.js';
export { default as singlestoredb } from './languages/singlestoredb/index.js';
export { default as snowflake } from './languages/snowflake/index.js';
32 changes: 32 additions & 0 deletions src/dialect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import {
import Tokenizer from './lexer/Tokenizer.js';
import { TokenizerOptions } from './lexer/TokenizerOptions.js';

import { defaultFormatOptions, FormatOptions } from './FormatOptions.js';
import Formatter from './formatter/Formatter.js';
import { validateConfig } from './validateConfig.js';

export interface DialectOptions {
name: string;
tokenizerOptions: TokenizerOptions;
Expand Down Expand Up @@ -46,3 +50,31 @@ const processDialectFormatOptions = (
(options.tabularOnelineClauses ?? options.onelineClauses).map(name => [name, true])
),
});

export type FormatOptionsWithDialect = Partial<FormatOptions> & {
dialect: DialectOptions;
};

/**
* Formats and SQL query string similar to `format` function, however it works directly with dialect objects instead of dialect names.
* Provides better bundling performance and control over the formatting process.
*
* @param {string} query - The SQL query string to format
* @param {FormatOptionsWithDialect} options - Configuration options
* @return {string} formatted query
*/
export const formatDialect = (
query: string,
{ dialect, ...cfg }: FormatOptionsWithDialect
): string => {
if (typeof query !== 'string') {
throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);
}

const options = validateConfig({
...defaultFormatOptions,
...cfg,
});

return new Formatter(createDialect(dialect), options).format(query);
};
29 changes: 2 additions & 27 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,10 @@
export { supportedDialects, format, formatDialect } from './sqlFormatter.js';
export { supportedDialects, format } from './sqlFormatter.js';
export { expandPhrases } from './expandPhrases.js';
export { ConfigError } from './validateConfig.js';

// When adding a new dialect, be sure to add it to the list of exports below.
export { bigquery } from './languages/bigquery/bigquery.formatter.js';
export { db2 } from './languages/db2/db2.formatter.js';
export { db2i } from './languages/db2i/db2i.formatter.js';
export { hive } from './languages/hive/hive.formatter.js';
export { mariadb } from './languages/mariadb/mariadb.formatter.js';
export { mysql } from './languages/mysql/mysql.formatter.js';
export { tidb } from './languages/tidb/tidb.formatter.js';
export { n1ql } from './languages/n1ql/n1ql.formatter.js';
export { plsql } from './languages/plsql/plsql.formatter.js';
export { postgresql } from './languages/postgresql/postgresql.formatter.js';
export { redshift } from './languages/redshift/redshift.formatter.js';
export { spark } from './languages/spark/spark.formatter.js';
export { sqlite } from './languages/sqlite/sqlite.formatter.js';
export { sql } from './languages/sql/sql.formatter.js';
export { trino } from './languages/trino/trino.formatter.js';
export { transactsql } from './languages/transactsql/transactsql.formatter.js';
export { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';
export { snowflake } from './languages/snowflake/snowflake.formatter.js';

// NB! To re-export types the "export type" syntax is required by webpack.
// Otherwise webpack build will fail.
export type {
SqlLanguage,
FormatOptionsWithLanguage,
FormatOptionsWithDialect,
} from './sqlFormatter.js';
export type { SqlLanguage, FormatOptionsWithLanguage } from './sqlFormatter.js';
export type {
IndentStyle,
KeywordCase,
Expand All @@ -40,4 +16,3 @@ export type {
} from './FormatOptions.js';
export type { ParamItems } from './formatter/Params.js';
export type { ParamTypes } from './lexer/TokenizerOptions.js';
export type { DialectOptions } from './dialect.js';
3 changes: 3 additions & 0 deletions src/languages/bigquery/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { bigquery } from './bigquery.formatter.js';

export default bigquery;
3 changes: 3 additions & 0 deletions src/languages/db2/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { db2 } from './db2.formatter.js';

export default db2;
3 changes: 3 additions & 0 deletions src/languages/db2i/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { db2i } from './db2i.formatter.js';

export default db2i;
3 changes: 3 additions & 0 deletions src/languages/hive/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { hive } from './hive.formatter.js';

export default hive;
3 changes: 3 additions & 0 deletions src/languages/mariadb/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { mariadb } from './mariadb.formatter.js';

export default mariadb;
3 changes: 3 additions & 0 deletions src/languages/mysql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { mysql } from './mysql.formatter.js';

export default mysql;
3 changes: 3 additions & 0 deletions src/languages/n1ql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { n1ql } from './n1ql.formatter.js';

export default n1ql;
3 changes: 3 additions & 0 deletions src/languages/plsql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { plsql } from './plsql.formatter.js';

export default plsql;
3 changes: 3 additions & 0 deletions src/languages/postgresql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { postgresql } from './postgresql.formatter.js';

export default postgresql;
3 changes: 3 additions & 0 deletions src/languages/redshift/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { redshift } from './redshift.formatter.js';

export default redshift;
3 changes: 3 additions & 0 deletions src/languages/singlestoredb/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { singlestoredb } from './singlestoredb.formatter.js';

export default singlestoredb;
3 changes: 3 additions & 0 deletions src/languages/snowflake/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { snowflake } from './snowflake.formatter.js';

export default snowflake;
3 changes: 3 additions & 0 deletions src/languages/spark/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { spark } from './spark.formatter.js';

export default spark;
3 changes: 3 additions & 0 deletions src/languages/sql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { sql } from './sql.formatter.js';

export default sql;
3 changes: 3 additions & 0 deletions src/languages/sqlite/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { sqlite } from './sqlite.formatter.js';

export default sqlite;
3 changes: 3 additions & 0 deletions src/languages/tidb/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { tidb } from './tidb.formatter.js';

export default tidb;
3 changes: 3 additions & 0 deletions src/languages/transactsql/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { transactsql } from './transactsql.formatter.js';

export default transactsql;
3 changes: 3 additions & 0 deletions src/languages/trino/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { trino } from './trino.formatter.js';

export default trino;
Loading