JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2067
  • Score
    100M100P100Q107112F
  • License MIT

Multi-version PostgreSQL parser with dynamic version selection

Package Exports

  • @pgsql/parser
  • @pgsql/parser/v15
  • @pgsql/parser/v16
  • @pgsql/parser/v17

Readme

@pgsql/parser

hyperweb.io


Multi-version PostgreSQL parser with dynamic version selection. This package provides a unified interface to parse PostgreSQL queries using different parser versions (15, 16, 17).

Installation

npm install @pgsql/parser

Usage

Dynamic Version Selection

import { parse, PgParser } from '@pgsql/parser';

// Parse with default version (17)
const result = await parse('SELECT 1+1 as sum');
console.log(result);
// { version: 17, result: { version: 170004, stmts: [...] } }

// Parse with specific version
const result15 = await parse('SELECT 1+1 as sum', 15);
console.log(result15);
// { version: 15, result: { version: 150007, stmts: [...] } }

// Using PgParser class
const parser = new PgParser(16);
const result16 = await parser.parse('SELECT * FROM users');

Static Version Imports

For better tree-shaking and when you know which version you need:

// Import specific version
import * as pg17 from '@pgsql/parser/v17';

await pg17.loadModule();
const result = await pg17.parse('SELECT 1');
console.log(result);
// { version: 170004, stmts: [...] }

Error Handling

The parser returns errors in a consistent format:

const result = await parse('INVALID SQL');
if (result.error) {
  console.error(result.error);
  // { type: 'syntax', message: 'syntax error at or near "INVALID"', position: 0 }
}

API

parse(query: string, version?: 15 | 16 | 17): Promise<ParseResult>

Parse a SQL query with the specified PostgreSQL version.

  • query: The SQL query string to parse
  • version: PostgreSQL version (15, 16, or 17). Defaults to 17.

Returns a promise that resolves to:

  • On success: { version: number, result: AST }
  • On error: { version: number, error: { type: string, message: string, position: number } }

PgParser

Class for creating a parser instance with a specific version.

const parser = new PgParser(version);
await parser.parse(query);
parser.parseSync(query); // Only available after first parse()

Version Exports

  • @pgsql/parser/v15 - PostgreSQL 15 parser
  • @pgsql/parser/v16 - PostgreSQL 16 parser
  • @pgsql/parser/v17 - PostgreSQL 17 parser

Each version export provides:

  • loadModule(): Initialize the WASM module
  • parse(query): Parse a query (async)
  • parseSync(query): Parse a query (sync, requires loadModule first)

Credits

Built on the excellent work of several contributors:

  • pgsql-parser: The real PostgreSQL parser for Node.js, providing symmetric parsing and deparsing of SQL statements with actual PostgreSQL parser integration.
  • pgsql-deparser: A streamlined tool designed for converting PostgreSQL ASTs back into SQL queries, focusing solely on deparser functionality to complement pgsql-parser.
  • @pgsql/types: Offers TypeScript type definitions for PostgreSQL AST nodes, facilitating type-safe construction, analysis, and manipulation of ASTs.
  • @pgsql/enums: Provides TypeScript enum definitions for PostgreSQL constants, enabling type-safe usage of PostgreSQL enums and constants in your applications.
  • @pgsql/utils: A comprehensive utility library for PostgreSQL, offering type-safe AST node creation and enum value conversions, simplifying the construction and manipulation of PostgreSQL ASTs.
  • pg-proto-parser: A TypeScript tool that parses PostgreSQL Protocol Buffers definitions to generate TypeScript interfaces, utility functions, and JSON mappings for enums.
  • libpg-query: The real PostgreSQL parser exposed for Node.js, used primarily in pgsql-parser for parsing and deparsing SQL queries.

Disclaimer

AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.

No developer or entity involved in creating Software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the Software code or Software CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.