Skip to content

devscast/queryforge-ts

QueryForge: TypeScript SQL Formatter and Highlighter

npm npm CI Lint Tests GitHub

QueryForge is a TypeScript library for formatting and syntax highlighting SQL queries, It provides a simple API to format, highlight, and compress SQL strings for better readability in both HTML and CLI environments.

Installation

Using Bun:

bun add @devscast/queryforge

Usage

Programmatic API

Format (plain text)

Use NullHighlighter when you want formatted SQL without ANSI or HTML markup.

import { NullHighlighter, SqlFormatter } from "@devscast/queryforge";

const query = `
SELECT count(*), \`Column1\`, \`Testing\`, \`Testing Three\`
FROM \`Table1\`
WHERE Column1 = 'testing' AND ((\`Column2\` = \`Column3\` OR Column4 >= NOW()))
GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10
`;

const formatter = new SqlFormatter(new NullHighlighter());

console.log(formatter.format(query));

Highlight only (HTML)

highlight() preserves original whitespace and only adds syntax highlighting.

import { HtmlHighlighter, SqlFormatter } from "@devscast/queryforge";

const formatter = new SqlFormatter(new HtmlHighlighter());

console.log(formatter.highlight("SELECT * FROM users WHERE id = 1"));

Compress query

compress() removes comments and collapses whitespace.

import { NullHighlighter, SqlFormatter } from "@devscast/queryforge";

const formatter = new SqlFormatter(new NullHighlighter());

const sql = `
-- comment
SELECT /* block comment */ id, name
FROM users
WHERE active = 1
`;

console.log(formatter.compress(sql));
// SELECT id, name FROM users WHERE active = 1

Convenience functions

import { compress, format, highlight } from "@devscast/queryforge";

format("select * from users");
highlight("select * from users", "html");
highlight("select * from users", "cli");
compress("select /*x*/ 1");

CLI Usage

The package provides a compiled binary named sql-forge.

Run in this repo

This script builds first, then runs the compiled CLI:

bun run sql-forge "select id,name from users where active = 1"

Run installed binary

sql-forge "select * from users"

Read SQL from stdin

echo "select * from users where id = 1" | sql-forge

Modes

sql-forge "select * from users" --format
sql-forge "select * from users" --highlight
sql-forge "select * from users" --compress

Output styles

sql-forge "select * from users" --plain
sql-forge "select * from users" --cli
sql-forge "select * from users" --html

Custom indentation

sql-forge "select a,b from t" --indent "    "
sql-forge "select a,b from t" --indent "\\t"

Notes

  • SqlFormatter defaults to a CLI highlighter in Node/CLI environments and HTML highlighting otherwise.
  • Use NullHighlighter for logs, snapshots, and plain text output.

Attribution

This project is fully inspired by the architecture and design of doctrine/sql-formatter. QueryForge is an independent TypeScript/Node implementation and is not affiliated with Doctrine.

Contributors

contributors

About

A lightweight utility for formatting sql statements. Handles automatic indentation and syntax highlighting.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors