@@ -30,21 +30,37 @@ npm install @pgsql/parser@lts
3030### Dynamic Version Selection
3131
3232``` javascript
33- import { parse , PgParser } from ' @pgsql/parser' ;
33+ import Parser from ' @pgsql/parser' ;
34+ // or: import { Parser } from '@pgsql/parser';
3435
35- // Parse with default version (17)
36- const result = await parse (' SELECT 1+1 as sum' );
36+ // Create parser with default version (17)
37+ const parser = new Parser ();
38+ const result = await parser .parse (' SELECT 1+1 as sum' );
3739console .log (result);
38- // { version: 17, result: { version: 170004, stmts: [...] } }
40+ // { version: 170004, stmts: [...] }
3941
40- // Parse with specific version
41- const result15 = await parse (' SELECT 1+1 as sum' , 15 );
42+ // Create parser with specific version
43+ const parser15 = new Parser ({ version: 15 });
44+ const result15 = await parser15 .parse (' SELECT 1+1 as sum' );
4245console .log (result15);
43- // { version: 15, result: { version: 150007, stmts: [...] } }
46+ // { version: 150007, stmts: [...] }
47+
48+ // Check supported versions
49+ import { isSupportedVersion , getSupportedVersions } from ' @pgsql/parser' ;
50+ console .log (getSupportedVersions ()); // [13, 14, 15, 16, 17]
51+ console .log (isSupportedVersion (15 )); // true
52+ ```
53+
54+ ### CommonJS Usage
4455
45- // Using PgParser class
46- const parser = new PgParser (16 );
47- const result16 = await parser .parse (' SELECT * FROM users' );
56+ ``` javascript
57+ const { Parser , isSupportedVersion , getSupportedVersions } = require (' @pgsql/parser' );
58+
59+ async function parseSQL () {
60+ const parser = new Parser ({ version: 16 });
61+ const result = await parser .parse (' SELECT * FROM users' );
62+ console .log (result);
63+ }
4864```
4965
5066### Static Version Imports
@@ -53,61 +69,122 @@ For better tree-shaking and when you know which version you need:
5369
5470``` javascript
5571// Import specific version
56- import * as pg17 from ' @pgsql/parser/v17' ;
72+ import { parse } from ' @pgsql/parser/v17' ;
5773
58- await pg17 .loadModule ();
59- const result = await pg17 .parse (' SELECT 1' );
74+ const result = await parse (' SELECT 1' );
6075console .log (result);
6176// { version: 170004, stmts: [...] }
77+
78+ // Or access via the main module
79+ import { v17 } from ' @pgsql/parser' ;
80+ const result2 = await v17 .parse (' SELECT 1' );
6281```
6382
6483### Error Handling
6584
66- The parser returns errors in a consistent format :
85+ The parser throws errors directly (not wrapped in result objects) :
6786
6887``` javascript
69- const result = await parse (' INVALID SQL' );
70- if (result .error ) {
71- console .error (result .error );
72- // { type: 'syntax', message: 'syntax error at or near "INVALID"', position: 0 }
88+ import Parser from ' @pgsql/parser' ;
89+
90+ const parser = new Parser ();
91+ try {
92+ const result = await parser .parse (' INVALID SQL' );
93+ } catch (error) {
94+ console .error (error .name ); // 'SqlError'
95+ console .error (error .message ); // 'syntax error at or near "INVALID"'
96+ console .error (error .sqlDetails ); // { cursorPosition: 0, ... }
7397}
7498```
7599
76100## API
77101
78- ### ` parse(query: string, version?: 13 | 14 | 15 | 16 | 17): Promise<ParseResult> `
102+ ### ` Parser `
79103
80- Parse a SQL query with the specified PostgreSQL version.
104+ The main parser class for parsing SQL with a specific PostgreSQL version.
81105
82- - ` query ` : The SQL query string to parse
83- - ` version ` : PostgreSQL version (13, 14, 15, 16, or 17). Defaults to 17.
106+ ``` typescript
107+ import Parser from ' @pgsql/parser ' ;
84108
85- Returns a promise that resolves to:
86- - On success: ` { version: number, result: AST } `
87- - On error: ` { version: number, error: { type: string, message: string, position: number } } `
109+ const parser = new Parser (options ?: { version?: 13 | 14 | 15 | 16 | 17 });
110+ ```
111+
112+ #### Properties
113+ - ` version ` : The PostgreSQL version used by this parser instance
114+ - ` ready ` : A promise that resolves when the parser is fully loaded
88115
89- ### ` PgParser `
116+ #### Methods
90117
91- Class for creating a parser instance with a specific version.
118+ ##### ` parse(query: string): Promise<ParseResult> `
119+ Parse a SQL query asynchronously. Automatically loads the parser if needed.
92120
93121``` javascript
94- const parser = new PgParser (version);
95- const result = await parser .parse (query);
96- const syncResult = parser .parseSync (query); // Only available after first parse()
122+ const result = await parser .parse (' SELECT 1' );
123+ // Returns: { version: 170004, stmts: [...] }
124+ ```
125+
126+ ##### ` parseSync(query: string): ParseResult `
127+ Parse a SQL query synchronously. Requires the parser to be loaded first.
128+
129+ ``` javascript
130+ await parser .loadParser (); // or await parser.ready
131+ const result = parser .parseSync (' SELECT 1' );
132+ ```
133+
134+ ##### ` loadParser(): Promise<void> `
135+ Explicitly load the parser. Usually not needed as ` parse() ` loads automatically.
136+
137+ ### Utility Functions
138+
139+ ##### ` isSupportedVersion(version: number): boolean `
140+ Check if a PostgreSQL version is supported.
141+
142+ ##### ` getSupportedVersions(): number[] `
143+ Get an array of all supported PostgreSQL versions.
144+
145+ ### Error Handling
146+
147+ All parsing errors throw ` SqlError ` with the following structure:
148+
149+ ``` typescript
150+ class SqlError extends Error {
151+ name: ' SqlError' ;
152+ message: string ;
153+ sqlDetails? : {
154+ cursorPosition? : number ;
155+ fileName? : string ;
156+ functionName? : string ;
157+ lineNumber? : number ;
158+ };
159+ }
97160```
98161
99162## Version Exports
100163
164+ Each PostgreSQL version can be imported directly for better tree-shaking:
165+
101166- ` @pgsql/parser/v13 ` - PostgreSQL 13 parser
102167- ` @pgsql/parser/v14 ` - PostgreSQL 14 parser
103168- ` @pgsql/parser/v15 ` - PostgreSQL 15 parser
104169- ` @pgsql/parser/v16 ` - PostgreSQL 16 parser
105170- ` @pgsql/parser/v17 ` - PostgreSQL 17 parser
106171
107172Each version export provides:
108- - ` loadModule() ` : Initialize the WASM module
109- - ` parse(query) ` : Parse a query (async)
110- - ` parseSync(query) ` : Parse a query (sync, requires loadModule first)
173+ - ` parse(query: string): Promise<ParseResult> ` - Parse a query asynchronously
174+ - ` parseSync(query: string): ParseResult ` - Parse a query synchronously (auto-loads if needed)
175+ - ` SqlError ` - The error class for parsing errors
176+ - All TypeScript types for that PostgreSQL version
177+
178+ Example:
179+ ``` javascript
180+ import { parse , parseSync } from ' @pgsql/parser/v17' ;
181+
182+ // Async parsing
183+ const result = await parse (' SELECT 1' );
184+
185+ // Sync parsing (auto-loads on first use)
186+ const result2 = parseSync (' SELECT 2' );
187+ ```
111188
112189## Build Configurations
113190
0 commit comments