Skip to content

Commit 8d7f9f1

Browse files
committed
feat: improve code splitting by introducing subpackage entry points
1 parent ea8c0d5 commit 8d7f9f1

File tree

28 files changed

+166
-104
lines changed

28 files changed

+166
-104
lines changed

.eslintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"import/no-extraneous-dependencies": [
1717
"error",
1818
{
19-
"devDependencies": ["test/**", "**/*.test.js", "**/*.test.ts"],
19+
"devDependencies": ["test/**", "**/*.test.js", "**/*.test.ts", "tsup.config.ts"],
2020
"packageDir": ["./"]
2121
}
2222
],

package.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
".": {
1212
"import": "./dist/index.js",
1313
"require": "./dist/index.cjs"
14+
},
15+
"./dialect": {
16+
"import": "./dist/dialect.js",
17+
"require": "./dist/dialect.cjs"
18+
},
19+
"./languages/*": {
20+
"import": "./dist/languages/*/index.js",
21+
"require": "./dist/languages/*/index.cjs"
1422
}
1523
},
1624
"bin": {
@@ -62,7 +70,7 @@
6270
"prepare": "yarn clean && yarn grammar && yarn fix && yarn check && yarn build",
6371
"pre-commit": "npm-run-all --parallel ts:changes lint:changes",
6472
"grammar": "nearleyc src/parser/grammar.ne -o src/parser/grammar.ts",
65-
"build:tsup": "tsup src/index.ts --format cjs,esm --sourcemap --dts",
73+
"build:tsup": "tsup",
6674
"build:webpack": "webpack --config webpack.prod.js && cp dist/sql-formatter.min.cjs dist/sql-formatter.min.js",
6775
"build": "yarn grammar && npm-run-all --parallel build:tsup build:webpack",
6876
"release": "release-it"

src/FormatOptions.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,70 @@ export type FunctionCase = KeywordCase;
1212
export type LogicalOperatorNewline = 'before' | 'after';
1313

1414
export interface FormatOptions {
15+
/**
16+
* Number of spaces per indentation level. Defaults to `2`
17+
*/
1518
tabWidth: number;
19+
/**
20+
* Use tabs for indentation instead of spaces. Defaults to `false`
21+
*/
1622
useTabs: boolean;
23+
/**
24+
* Transform case of keywords. Defaults to `"preserve"`
25+
*/
1726
keywordCase: KeywordCase;
27+
/**
28+
* Transform case of identifiers. Defaults to `"preserve"`
29+
*/
1830
identifierCase: IdentifierCase;
31+
/**
32+
* Transform case of data types. Defaults to `"preserve"`
33+
*/
1934
dataTypeCase: DataTypeCase;
35+
/**
36+
* Transform case of function names. Defaults to `"preserve"`
37+
*/
2038
functionCase: FunctionCase;
39+
/**
40+
* Indentation style. Defaults to `"standard"`
41+
*/
2142
indentStyle: IndentStyle;
43+
/**
44+
* Position of logical operators in multiline conditions. Defaults to `"before"`
45+
*/
2246
logicalOperatorNewline: LogicalOperatorNewline;
47+
/**
48+
* Maximum length of expressions before breaking into multiple lines. Defaults to `50`
49+
*/
2350
expressionWidth: number;
51+
/**
52+
* Number of blank lines between queries. Defaults to `1`
53+
*/
2454
linesBetweenQueries: number;
55+
/**
56+
* Remove spaces around operators. Defaults to `false`
57+
*/
2558
denseOperators: boolean;
59+
/**
60+
* Place semicolon on new line. Defaults to `false`
61+
*/
2662
newlineBeforeSemicolon: boolean;
63+
2764
params?: ParamItems | string[];
2865
paramTypes?: ParamTypes;
2966
}
67+
68+
export const defaultFormatOptions: FormatOptions = {
69+
tabWidth: 2,
70+
useTabs: false,
71+
keywordCase: 'preserve',
72+
identifierCase: 'preserve',
73+
dataTypeCase: 'preserve',
74+
functionCase: 'preserve',
75+
indentStyle: 'standard',
76+
logicalOperatorNewline: 'before',
77+
expressionWidth: 50,
78+
linesBetweenQueries: 1,
79+
denseOperators: false,
80+
newlineBeforeSemicolon: false,
81+
};

src/allDialects.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
export { bigquery } from './languages/bigquery/bigquery.formatter.js';
2-
export { db2 } from './languages/db2/db2.formatter.js';
3-
export { db2i } from './languages/db2i/db2i.formatter.js';
4-
export { hive } from './languages/hive/hive.formatter.js';
5-
export { mariadb } from './languages/mariadb/mariadb.formatter.js';
6-
export { mysql } from './languages/mysql/mysql.formatter.js';
7-
export { tidb } from './languages/tidb/tidb.formatter.js';
8-
export { n1ql } from './languages/n1ql/n1ql.formatter.js';
9-
export { plsql } from './languages/plsql/plsql.formatter.js';
10-
export { postgresql } from './languages/postgresql/postgresql.formatter.js';
11-
export { redshift } from './languages/redshift/redshift.formatter.js';
12-
export { spark } from './languages/spark/spark.formatter.js';
13-
export { sqlite } from './languages/sqlite/sqlite.formatter.js';
14-
export { sql } from './languages/sql/sql.formatter.js';
15-
export { trino } from './languages/trino/trino.formatter.js';
16-
export { transactsql } from './languages/transactsql/transactsql.formatter.js';
17-
export { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';
18-
export { snowflake } from './languages/snowflake/snowflake.formatter.js';
1+
export { bigquery } from './languages/bigquery/index.js';
2+
export { db2 } from './languages/db2/index.js';
3+
export { db2i } from './languages/db2i/index.js';
4+
export { hive } from './languages/hive/index.js';
5+
export { mariadb } from './languages/mariadb/index.js';
6+
export { mysql } from './languages/mysql/index.js';
7+
export { tidb } from './languages/tidb/index.js';
8+
export { n1ql } from './languages/n1ql/index.js';
9+
export { plsql } from './languages/plsql/index.js';
10+
export { postgresql } from './languages/postgresql/index.js';
11+
export { redshift } from './languages/redshift/index.js';
12+
export { spark } from './languages/spark/index.js';
13+
export { sqlite } from './languages/sqlite/index.js';
14+
export { sql } from './languages/sql/index.js';
15+
export { trino } from './languages/trino/index.js';
16+
export { transactsql } from './languages/transactsql/index.js';
17+
export { singlestoredb } from './languages/singlestoredb/index.js';
18+
export { snowflake } from './languages/snowflake/index.js';

src/dialect.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import {
55
import Tokenizer from './lexer/Tokenizer.js';
66
import { TokenizerOptions } from './lexer/TokenizerOptions.js';
77

8+
import { defaultFormatOptions, FormatOptions } from './FormatOptions.js';
9+
import Formatter from './formatter/Formatter.js';
10+
import { validateConfig } from './validateConfig.js';
11+
812
export interface DialectOptions {
913
name: string;
1014
tokenizerOptions: TokenizerOptions;
@@ -46,3 +50,31 @@ const processDialectFormatOptions = (
4650
(options.tabularOnelineClauses ?? options.onelineClauses).map(name => [name, true])
4751
),
4852
});
53+
54+
export type FormatOptionsWithDialect = Partial<FormatOptions> & {
55+
dialect: DialectOptions;
56+
};
57+
58+
/**
59+
* Formats and SQL query string similar to `format` function, however it works directly with dialect objects instead of dialect names.
60+
* Provides better bundling performance and control over the formatting process.
61+
*
62+
* @param {string} query - The SQL query string to format
63+
* @param {FormatOptionsWithDialect} options - Configuration options
64+
* @return {string} formatted query
65+
*/
66+
export const formatDialect = (
67+
query: string,
68+
{ dialect, ...cfg }: FormatOptionsWithDialect
69+
): string => {
70+
if (typeof query !== 'string') {
71+
throw new Error('Invalid query argument. Expected string, instead got ' + typeof query);
72+
}
73+
74+
const options = validateConfig({
75+
...defaultFormatOptions,
76+
...cfg,
77+
});
78+
79+
return new Formatter(createDialect(dialect), options).format(query);
80+
};

src/index.ts

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,10 @@
1-
export { supportedDialects, format, formatDialect } from './sqlFormatter.js';
1+
export { supportedDialects, format } from './sqlFormatter.js';
22
export { expandPhrases } from './expandPhrases.js';
33
export { ConfigError } from './validateConfig.js';
44

5-
// When adding a new dialect, be sure to add it to the list of exports below.
6-
export { bigquery } from './languages/bigquery/bigquery.formatter.js';
7-
export { db2 } from './languages/db2/db2.formatter.js';
8-
export { db2i } from './languages/db2i/db2i.formatter.js';
9-
export { hive } from './languages/hive/hive.formatter.js';
10-
export { mariadb } from './languages/mariadb/mariadb.formatter.js';
11-
export { mysql } from './languages/mysql/mysql.formatter.js';
12-
export { tidb } from './languages/tidb/tidb.formatter.js';
13-
export { n1ql } from './languages/n1ql/n1ql.formatter.js';
14-
export { plsql } from './languages/plsql/plsql.formatter.js';
15-
export { postgresql } from './languages/postgresql/postgresql.formatter.js';
16-
export { redshift } from './languages/redshift/redshift.formatter.js';
17-
export { spark } from './languages/spark/spark.formatter.js';
18-
export { sqlite } from './languages/sqlite/sqlite.formatter.js';
19-
export { sql } from './languages/sql/sql.formatter.js';
20-
export { trino } from './languages/trino/trino.formatter.js';
21-
export { transactsql } from './languages/transactsql/transactsql.formatter.js';
22-
export { singlestoredb } from './languages/singlestoredb/singlestoredb.formatter.js';
23-
export { snowflake } from './languages/snowflake/snowflake.formatter.js';
24-
255
// NB! To re-export types the "export type" syntax is required by webpack.
266
// Otherwise webpack build will fail.
27-
export type {
28-
SqlLanguage,
29-
FormatOptionsWithLanguage,
30-
FormatOptionsWithDialect,
31-
} from './sqlFormatter.js';
7+
export type { SqlLanguage, FormatOptionsWithLanguage } from './sqlFormatter.js';
328
export type {
339
IndentStyle,
3410
KeywordCase,
@@ -40,4 +16,3 @@ export type {
4016
} from './FormatOptions.js';
4117
export type { ParamItems } from './formatter/Params.js';
4218
export type { ParamTypes } from './lexer/TokenizerOptions.js';
43-
export type { DialectOptions } from './dialect.js';

src/languages/bigquery/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { bigquery } from './bigquery.formatter.js';

src/languages/db2/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { db2 } from './db2.formatter.js';

src/languages/db2i/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { db2i } from './db2i.formatter.js';

src/languages/hive/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { hive } from './hive.formatter.js';

0 commit comments

Comments
 (0)