diff --git a/README.md b/README.md index c2881d7c..42d45f93 100644 --- a/README.md +++ b/README.md @@ -100,12 +100,14 @@ For SQLite: ```bash npm install better-sqlite3 +npm install -D @types/better-sqlite3 ``` For Postgres: ```bash -npm install pg +npm install pg pg-connection-string +npm install -D @types/pg ``` ## Pushing schema to the database @@ -132,14 +134,32 @@ A `schema.ts` file will be created inside the `zenstack` folder. The file should ## Creating ZenStack client -Now you can use the compiled TypeScript schema to instantiate a database client: +Now you can use the compiled TypeScript schema to instantiate a database client. + +### SQLite ```ts import { ZenStackClient } from '@zenstackhq/runtime'; import { schema } from './zenstack/schema'; +import SQLite from 'better-sqlite3'; const client = new ZenStackClient(schema, { - dialectConfig: { ... } + dialectConfig: { database: new SQLite('./dev.db') }, +}); +``` + +### Postgres + +```ts +import { ZenStackClient } from '@zenstackhq/runtime'; +import { schema } from './zenstack/schema'; +import { Pool } from 'pg'; +import { parseIntoClientConfig } from 'pg-connection-string'; + +const client = new ZenStackClient(schema, { + dialectConfig: { + pool: new Pool(parseIntoClientConfig(process.env.DATABASE_URL)), + }, }); ``` @@ -376,6 +396,7 @@ See [Prisma Migrate](https://www.prisma.io/docs/orm/prisma-migrate) documentatio # Limitations -1. Only SQLite (better-sqlite3) and Postgres (pg) database providers are supported. +1. Only SQLite (better-sqlite3) and Postgres (pg) database providers are supported for now. 1. Prisma client extensions are not supported. 1. Prisma custom generators are not supported (may add support in the future). +1. [Filtering on JSON fields](https://www.prisma.io/docs/orm/prisma-client/special-fields-and-types/working-with-json-fields#filter-on-a-json-field-advanced) is not supported yet. diff --git a/TODO.md b/TODO.md index ffaf68d7..fdc34f53 100644 --- a/TODO.md +++ b/TODO.md @@ -6,7 +6,7 @@ - [x] generate - [x] migrate - [x] info - - [ ] init + - [x] init - [ ] ORM - [x] Create - [x] Input validation @@ -36,6 +36,7 @@ - [x] Sorting - [x] Pagination - [x] Distinct + - [ ] JSON filtering - [x] Update - [x] Input validation - [x] Top-level @@ -65,7 +66,6 @@ - [ ] Error system - [x] Custom table name - [x] Custom field name - - [ ] Strict undefined check - [ ] Implement changesets - [ ] Polymorphism - [ ] Validation diff --git a/package.json b/package.json index 3d7a55f5..171f319c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenstack-v3", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "ZenStack", "packageManager": "pnpm@10.12.1", "scripts": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 10bda869..d648d1eb 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,7 +3,7 @@ "publisher": "zenstack", "displayName": "ZenStack CLI", "description": "FullStack database toolkit with built-in access control and automatic API generation.", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "type": "module", "author": { "name": "ZenStack Team" diff --git a/packages/create-zenstack/package.json b/packages/create-zenstack/package.json index 09577002..77fdbe70 100644 --- a/packages/create-zenstack/package.json +++ b/packages/create-zenstack/package.json @@ -1,6 +1,6 @@ { "name": "create-zenstack", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "Create a new ZenStack project", "type": "module", "scripts": { diff --git a/packages/language/package.json b/packages/language/package.json index bc4a1614..3f68cf9b 100644 --- a/packages/language/package.json +++ b/packages/language/package.json @@ -1,7 +1,7 @@ { "name": "@zenstackhq/language", "description": "ZenStack ZModel language specification", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "license": "MIT", "author": "ZenStack Team", "files": [ diff --git a/packages/runtime/package.json b/packages/runtime/package.json index f7860645..df8cddc3 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/runtime", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "ZenStack Runtime", "type": "module", "scripts": { diff --git a/packages/runtime/src/client/options.ts b/packages/runtime/src/client/options.ts index 6300d86e..81f91528 100644 --- a/packages/runtime/src/client/options.ts +++ b/packages/runtime/src/client/options.ts @@ -24,7 +24,7 @@ import type { ToKyselySchema } from './query-builder'; type DialectConfig = Provider['type'] extends 'sqlite' ? Optional - : Provider extends 'postgresql' + : Provider['type'] extends 'postgresql' ? Optional : never; diff --git a/packages/runtime/test/client-api/filter.test.ts b/packages/runtime/test/client-api/filter.test.ts index f4925442..9c27350b 100644 --- a/packages/runtime/test/client-api/filter.test.ts +++ b/packages/runtime/test/client-api/filter.test.ts @@ -549,6 +549,13 @@ describe.each(createClientSpecs(PG_DB_NAME))( ).toResolveTruthy(); }); + it('ignores undefined filters', async () => { + await createUser(); + await expect( + client.user.findMany({ where: { id: undefined } }) + ).toResolveWithLength(1); + }); + // TODO: filter for bigint, decimal, bytes } ); diff --git a/packages/runtime/test/client-api/find.test.ts b/packages/runtime/test/client-api/find.test.ts index e63e6fba..80b59055 100644 --- a/packages/runtime/test/client-api/find.test.ts +++ b/packages/runtime/test/client-api/find.test.ts @@ -30,6 +30,7 @@ describe.each(createClientSpecs(PG_DB_NAME))( r = await client.user.findMany(); expect(r).toHaveLength(1); expect(r[0]?.createdAt).toBeInstanceOf(Date); + r = await client.user.findMany({ where: { id: user.id } }); expect(r).toHaveLength(1); diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 5ba4a8f4..ee3331b5 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/sdk", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "ZenStack SDK", "type": "module", "scripts": { diff --git a/packages/tanstack-query/package.json b/packages/tanstack-query/package.json index 70dabd37..08627453 100644 --- a/packages/tanstack-query/package.json +++ b/packages/tanstack-query/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/tanstack-query", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "", "main": "index.js", "type": "module", diff --git a/packages/testtools/package.json b/packages/testtools/package.json index df9f4fb4..290c771d 100644 --- a/packages/testtools/package.json +++ b/packages/testtools/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/testtools", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "ZenStack Test Tools", "type": "module", "scripts": { diff --git a/packages/zod/package.json b/packages/zod/package.json index 413c9202..254731b4 100644 --- a/packages/zod/package.json +++ b/packages/zod/package.json @@ -1,6 +1,6 @@ { "name": "@zenstackhq/zod", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "", "type": "module", "main": "index.js", diff --git a/samples/blog/package.json b/samples/blog/package.json index bbd6f6d9..db96353a 100644 --- a/samples/blog/package.json +++ b/samples/blog/package.json @@ -1,6 +1,6 @@ { "name": "sample-todo", - "version": "3.0.0-alpha.2", + "version": "3.0.0-alpha.4", "description": "", "main": "index.js", "scripts": {