Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions .changeset/b7580ab9.md

This file was deleted.

108 changes: 63 additions & 45 deletions packages/bigquery/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,71 @@
# @filter-def/bigquery

## 1.0.0

### Major Changes

- 7f24812: Enforce non-null filter inputs for all filter types.

**Breaking change**: Filter inputs can no longer accept `null` or `undefined` values. The `CoreFilterInput` type now excludes these values, requiring explicit filter values. When a value can be nullable, prefer the `isNull` filter kind instead.

Refactored `CoreFilterInputMap` type to use a new `FieldTypeForFilter` helper, reducing type repetition and improving maintainability.

Added type tests for `CoreFilterInput` behavior via vitest.

### Patch Changes

- Updated dependencies [7f24812]
- @filter-def/core@1.0.0

## 0.1.0

### Minor Changes

- 64c1efc: Add new BigQuery adapter package for filter-def.

This package generates parameterized SQL queries compatible with `@google-cloud/bigquery`.

## Features
- All primitive filters: `eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`
- Boolean filters: `and`, `or` for combining conditions
- Custom filters for complex SQL expressions
- Type-safe filter inputs inferred from your entity type
- Parameterized queries with `@paramName` placeholders
- Always returns valid SQL - empty filters return `{ sql: "true", params: {} }` for seamless query composition

## Basic Usage

```typescript
import { bigqueryFilter } from "@filter-def/bigquery";
import { BigQuery } from "@google-cloud/bigquery";

// This is used to define the shape of the data you expect to be returned from BigQuery.
// It also helps define the input types or your filters.
interface User {
id: number;
name: string;
email: string;
age: number;
}

const userFilter = bigqueryFilter<User>().def({
name: { kind: "eq" },
emailContains: { kind: "contains", field: "email" },
minAge: { kind: "gte", field: "age" },
});

const where = userFilter({ name: "John", minAge: 18 });
// where = {
// sql: "name = @name AND age >= @minAge",
// params: { name: "John", minAge: 18 }
// }

// Use with @google-cloud/bigquery
// Filter always returns valid SQL (empty filters return 'WHERE true')
const bigquery = new BigQuery();
const [rows] = await bigquery.query({
query: `SELECT * FROM \`myproject.dataset.users\` WHERE ${where.sql}`,
params: where.params,
});
```
This package generates parameterized SQL queries compatible with `@google-cloud/bigquery`.

## Features

- All primitive filters: `eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`
- Boolean filters: `and`, `or` for combining conditions
- Custom filters for complex SQL expressions
- Type-safe filter inputs inferred from your entity type
- Parameterized queries with `@paramName` placeholders
- Always returns valid SQL - empty filters return `{ sql: "true", params: {} }` for seamless query composition

## Basic Usage

```typescript
import { bigqueryFilter } from "@filter-def/bigquery";
import { BigQuery } from "@google-cloud/bigquery";

// This is used to define the shape of the data you expect to be returned from BigQuery.
// It also helps define the input types or your filters.
interface User {
id: number;
name: string;
email: string;
age: number;
}

const userFilter = bigqueryFilter<User>().def({
name: { kind: "eq" },
emailContains: { kind: "contains", field: "email" },
minAge: { kind: "gte", field: "age" },
});

const where = userFilter({ name: "John", minAge: 18 });
// where = {
// sql: "name = @name AND age >= @minAge",
// params: { name: "John", minAge: 18 }
// }

// Use with @google-cloud/bigquery
// Filter always returns valid SQL (empty filters return 'WHERE true')
const bigquery = new BigQuery();
const [rows] = await bigquery.query({
query: `SELECT * FROM \`myproject.dataset.users\` WHERE ${where.sql}`,
params: where.params,
});
```
2 changes: 1 addition & 1 deletion packages/bigquery/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@filter-def/bigquery",
"version": "0.1.0",
"version": "1.0.0",
"description": "BigQuery adapter for filter-def",
"homepage": "https://github.com/rmarganti/filter-def#readme",
"bugs": {
Expand Down
64 changes: 40 additions & 24 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# @filter-def/core

## 1.0.0

### Major Changes

- 7f24812: Enforce non-null filter inputs for all filter types.

**Breaking change**: Filter inputs can no longer accept `null` or `undefined` values. The `CoreFilterInput` type now excludes these values, requiring explicit filter values. When a value can be nullable, prefer the `isNull` filter kind instead.

Refactored `CoreFilterInputMap` type to use a new `FieldTypeForFilter` helper, reducing type repetition and improving maintainability.

Added type tests for `CoreFilterInput` behavior via vitest.

## 0.2.0

### Minor Changes
Expand All @@ -12,33 +24,37 @@

- 8445c2f: ### Monorepo Restructure

Restructured filter-def as a pnpm monorepo with three packages:
- `@filter-def/core` - Core types and utilities (types-only)
- `@filter-def/in-memory` - In-memory filtering with native array methods
- `@filter-def/drizzle` - Drizzle ORM adapter for SQL databases
Restructured filter-def as a pnpm monorepo with three packages:

- `@filter-def/core` - Core types and utilities (types-only)
- `@filter-def/in-memory` - In-memory filtering with native array methods
- `@filter-def/drizzle` - Drizzle ORM adapter for SQL databases

### @filter-def/core

New types-only package containing shared filter definition types:

- `FilterDef<Entity>` and all primitive filter types (`eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter types (`and`, `or`)
- `CustomFilter<Entity, Input>` for adapter-specific implementations
- Type utilities for adapter authors (`ExtractFilterKind`, `GetFieldForFilter`, etc.)

### @filter-def/core
### @filter-def/in-memory

New types-only package containing shared filter definition types:
- `FilterDef<Entity>` and all primitive filter types (`eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter types (`and`, `or`)
- `CustomFilter<Entity, Input>` for adapter-specific implementations
- Type utilities for adapter authors (`ExtractFilterKind`, `GetFieldForFilter`, etc.)
Existing in-memory filtering implementation, now as a standalone package:

### @filter-def/in-memory
- `inMemoryFilter<T>().def()` API for defining filters
- `makeFilterHelpers()` for convenient array filtering
- Full custom filter support
- Re-exports core types for convenience

Existing in-memory filtering implementation, now as a standalone package:
- `inMemoryFilter<T>().def()` API for defining filters
- `makeFilterHelpers()` for convenient array filtering
- Full custom filter support
- Re-exports core types for convenience
### @filter-def/drizzle

### @filter-def/drizzle
New Drizzle ORM adapter for SQL database filtering:

New Drizzle ORM adapter for SQL database filtering:
- `drizzleFilter(table).def()` API matching the memory package pattern
- Compiles filter definitions to Drizzle `SQL` expressions
- Maps all primitive filters to Drizzle operators (`eq`, `ne`, `like`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter composition with `and()`/`or()`
- Custom filters return `SQL | undefined` for EXISTS subqueries and complex conditions
- `contains` filter uses case-insensitive `ilike` with `%value%` pattern
- `drizzleFilter(table).def()` API matching the memory package pattern
- Compiles filter definitions to Drizzle `SQL` expressions
- Maps all primitive filters to Drizzle operators (`eq`, `ne`, `like`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter composition with `and()`/`or()`
- Custom filters return `SQL | undefined` for EXISTS subqueries and complex conditions
- `contains` filter uses case-insensitive `ilike` with `%value%` pattern
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@filter-def/core",
"version": "0.2.0",
"version": "1.0.0",
"description": "Core types and utilities for filter-def",
"homepage": "https://github.com/rmarganti/filter-def#readme",
"bugs": {
Expand Down
73 changes: 47 additions & 26 deletions packages/drizzle/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# @filter-def/drizzle

## 1.0.0

### Major Changes

- 7f24812: Enforce non-null filter inputs for all filter types.

**Breaking change**: Filter inputs can no longer accept `null` or `undefined` values. The `CoreFilterInput` type now excludes these values, requiring explicit filter values. When a value can be nullable, prefer the `isNull` filter kind instead.

Refactored `CoreFilterInputMap` type to use a new `FieldTypeForFilter` helper, reducing type repetition and improving maintainability.

Added type tests for `CoreFilterInput` behavior via vitest.

### Patch Changes

- Updated dependencies [7f24812]
- @filter-def/core@1.0.0

## 0.2.0

### Minor Changes
Expand All @@ -9,46 +26,50 @@
### Patch Changes

- Updated dependencies [f41a01b]
- @filter-def/core@0.2.0
- @filter-def/core@0.2.0

## 0.1.0

### Minor Changes

- 8445c2f: ### Monorepo Restructure

Restructured filter-def as a pnpm monorepo with three packages:
- `@filter-def/core` - Core types and utilities (types-only)
- `@filter-def/in-memory` - In-memory filtering with native array methods
- `@filter-def/drizzle` - Drizzle ORM adapter for SQL databases
Restructured filter-def as a pnpm monorepo with three packages:

- `@filter-def/core` - Core types and utilities (types-only)
- `@filter-def/in-memory` - In-memory filtering with native array methods
- `@filter-def/drizzle` - Drizzle ORM adapter for SQL databases

### @filter-def/core

New types-only package containing shared filter definition types:

- `FilterDef<Entity>` and all primitive filter types (`eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter types (`and`, `or`)
- `CustomFilter<Entity, Input>` for adapter-specific implementations
- Type utilities for adapter authors (`ExtractFilterKind`, `GetFieldForFilter`, etc.)

### @filter-def/core
### @filter-def/in-memory

New types-only package containing shared filter definition types:
- `FilterDef<Entity>` and all primitive filter types (`eq`, `neq`, `contains`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter types (`and`, `or`)
- `CustomFilter<Entity, Input>` for adapter-specific implementations
- Type utilities for adapter authors (`ExtractFilterKind`, `GetFieldForFilter`, etc.)
Existing in-memory filtering implementation, now as a standalone package:

### @filter-def/in-memory
- `inMemoryFilter<T>().def()` API for defining filters
- `makeFilterHelpers()` for convenient array filtering
- Full custom filter support
- Re-exports core types for convenience

Existing in-memory filtering implementation, now as a standalone package:
- `inMemoryFilter<T>().def()` API for defining filters
- `makeFilterHelpers()` for convenient array filtering
- Full custom filter support
- Re-exports core types for convenience
### @filter-def/drizzle

### @filter-def/drizzle
New Drizzle ORM adapter for SQL database filtering:

New Drizzle ORM adapter for SQL database filtering:
- `drizzleFilter(table).def()` API matching the memory package pattern
- Compiles filter definitions to Drizzle `SQL` expressions
- Maps all primitive filters to Drizzle operators (`eq`, `ne`, `like`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter composition with `and()`/`or()`
- Custom filters return `SQL | undefined` for EXISTS subqueries and complex conditions
- `contains` filter uses case-insensitive `ilike` with `%value%` pattern
- `drizzleFilter(table).def()` API matching the memory package pattern
- Compiles filter definitions to Drizzle `SQL` expressions
- Maps all primitive filters to Drizzle operators (`eq`, `ne`, `like`, `inArray`, `gt`, `gte`, `lt`, `lte`, `isNull`, `isNotNull`)
- Boolean filter composition with `and()`/`or()`
- Custom filters return `SQL | undefined` for EXISTS subqueries and complex conditions
- `contains` filter uses case-insensitive `ilike` with `%value%` pattern

### Patch Changes

- Updated dependencies [8445c2f]
- @filter-def/core@0.1.0
- @filter-def/core@0.1.0
2 changes: 1 addition & 1 deletion packages/drizzle/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@filter-def/drizzle",
"version": "0.2.0",
"version": "1.0.0",
"description": "Drizzle ORM adapter for filter-def",
"homepage": "https://github.com/rmarganti/filter-def#readme",
"bugs": {
Expand Down
Loading