A headless Svelte utility and parser for Google API filter expressions, using a Peggy grammar. This module provides parsing, validation, and AST utilities for Google-style filter strings, suitable for use in Svelte apps or as a standalone JS utility.
import { parse, prettyPrintAst, summarizeGrammar } from "./parser";
const result = parse('post = "posts/1234-1234-1234-1234"');
if (result.isSuccess) {
console.log("AST:", result.ast);
console.log("Pretty:", prettyPrintAst(result.ast));
console.log("Summary:", summarizeGrammar(result.ast));
} else {
console.error("Parse error:", result.errors);
}
<script lang="ts">
import FilterParser from './FilterParser.svelte';
let filter = 'post = "posts/1234-1234-1234-1234"';
</script>
<FilterParser {filter} let:ast let:isValid let:error let:prettyAst let:summary />
parse(input: string): ParseResult
{ isSuccess, errors, ast }
.prettyPrintAst(ast: any): string
summarizeGrammar(ast: any): string
<FilterParser filter={string} let:ast let:isValid let:error let:prettyAst let:summary />
This package is fully compatible with server-side rendering (SSR) environments like SvelteKit. The parser functions work in both Node.js and browser environments, and the FilterParser component is designed to be SSR-safe.
<script lang="ts">
import { parse } from 'aip-svelte-filter';
import FilterParser from 'aip-svelte-filter/FilterParser.svelte';
let filter = 'name = "example"';
// This works in both SSR and client-side
const result = parse(filter);
</script>
<!-- This component is SSR-safe -->
<FilterParser {filter} let:ast let:isValid let:error>
{#if isValid}
<p>Filter is valid!</p>
{:else}
<p>Error: {error}</p>
{/if}
</FilterParser>
git clone https://github.com/stevenklar/aip-svelte-filter.git
cd aip-svelte-filter
npm install
# Build the grammar file
npm run build:grammar
# Build the package
npm run build
# Run tests once
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
# Type check
npm run check
# Lint code
npm run lint
# Format code
npm run format
The project uses GitHub Actions for continuous integration:
MIT License.