@@ -30,21 +30,37 @@ npm install @pgsql/parser@lts
30
30
### Dynamic Version Selection
31
31
32
32
``` javascript
33
- import { parse , PgParser } from ' @pgsql/parser' ;
33
+ import Parser from ' @pgsql/parser' ;
34
+ // or: import { Parser } from '@pgsql/parser';
34
35
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' );
37
39
console .log (result);
38
- // { version: 17, result: { version: 170004, stmts: [...] } }
40
+ // { version: 170004, stmts: [...] }
39
41
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' );
42
45
console .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
44
55
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
+ }
48
64
```
49
65
50
66
### Static Version Imports
@@ -53,61 +69,122 @@ For better tree-shaking and when you know which version you need:
53
69
54
70
``` javascript
55
71
// Import specific version
56
- import * as pg17 from ' @pgsql/parser/v17' ;
72
+ import { parse } from ' @pgsql/parser/v17' ;
57
73
58
- await pg17 .loadModule ();
59
- const result = await pg17 .parse (' SELECT 1' );
74
+ const result = await parse (' SELECT 1' );
60
75
console .log (result);
61
76
// { 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' );
62
81
```
63
82
64
83
### Error Handling
65
84
66
- The parser returns errors in a consistent format :
85
+ The parser throws errors directly (not wrapped in result objects) :
67
86
68
87
``` 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, ... }
73
97
}
74
98
```
75
99
76
100
## API
77
101
78
- ### ` parse(query: string, version?: 13 | 14 | 15 | 16 | 17): Promise<ParseResult> `
102
+ ### ` Parser `
79
103
80
- Parse a SQL query with the specified PostgreSQL version.
104
+ The main parser class for parsing SQL with a specific PostgreSQL version.
81
105
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 ' ;
84
108
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
88
115
89
- ### ` PgParser `
116
+ #### Methods
90
117
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.
92
120
93
121
``` 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
+ }
97
160
```
98
161
99
162
## Version Exports
100
163
164
+ Each PostgreSQL version can be imported directly for better tree-shaking:
165
+
101
166
- ` @pgsql/parser/v13 ` - PostgreSQL 13 parser
102
167
- ` @pgsql/parser/v14 ` - PostgreSQL 14 parser
103
168
- ` @pgsql/parser/v15 ` - PostgreSQL 15 parser
104
169
- ` @pgsql/parser/v16 ` - PostgreSQL 16 parser
105
170
- ` @pgsql/parser/v17 ` - PostgreSQL 17 parser
106
171
107
172
Each 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
+ ```
111
188
112
189
## Build Configurations
113
190
0 commit comments