Skip to content

Commit

Permalink
Merge branch 'main' of github.com:drizzle-team/drizzle-orm into beta
Browse files Browse the repository at this point in the history
  • Loading branch information
AndriiSherman committed Oct 24, 2024
2 parents 89e39c6 + 526996b commit a866c0e
Show file tree
Hide file tree
Showing 69 changed files with 4,684 additions and 304 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/release-feature-branch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ jobs:
XATA_API_KEY: ${{ secrets.XATA_API_KEY }}
XATA_BRANCH: ${{ secrets.XATA_BRANCH }}
LIBSQL_URL: file:local.db
LIBSQL_REMOTE_URL: ${{ secrets.LIBSQL_REMOTE_URL }}
LIBSQL_REMOTE_TOKEN: ${{ secrets.LIBSQL_REMOTE_TOKEN }}
run: |
if [[ ${{ github.event_name }} != "push" && "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]]; then
export SKIP_EXTERNAL_DB_TESTS=1
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release-latest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ jobs:
XATA_API_KEY: ${{ secrets.XATA_API_KEY }}
XATA_BRANCH: ${{ secrets.XATA_BRANCH }}
LIBSQL_URL: file:local.db
LIBSQL_REMOTE_URL: ${{ secrets.LIBSQL_REMOTE_URL }}
LIBSQL_REMOTE_TOKEN: ${{ secrets.LIBSQL_REMOTE_TOKEN }}
run: |
if [[ "${{ matrix.package }}" == "drizzle-orm" ]]; then
pnpm test --filter ${{ matrix.package }} --filter integration-tests
Expand Down
1 change: 1 addition & 0 deletions changelogs/drizzle-kit/0.26.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Fix `data is malformed` for views
1 change: 1 addition & 0 deletions changelogs/drizzle-kit/0.26.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Updated internal versions for the drizzle-kit and drizzle-orm packages. Changes were introduced in the last minor release, and you are required to upgrade both packages to ensure they work as expected
1 change: 1 addition & 0 deletions changelogs/drizzle-orm/0.35.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Updated internal versions for the drizzle-kit and drizzle-orm packages. Changes were introduced in the last minor release, and you are required to upgrade both packages to ensure they work as expected
6 changes: 6 additions & 0 deletions changelogs/drizzle-orm/0.35.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- Fix issues with importing in several environments after updating the Drizzle driver implementation

We've added approximately 240 tests to check the ESM and CJS builds for all the drivers we have. You can check them [here](https://github.com/drizzle-team/drizzle-orm/tree/main/integration-tests/js-tests/driver-init)

- Fixed [[BUG]: Type Error in PgTransaction Missing $client Property After Upgrading to [email protected]](https://github.com/drizzle-team/drizzle-orm/issues/3140)
- Fixed [[BUG]: New critical Build error drizzle 0.35.0 deploying on Cloudflare ](https://github.com/drizzle-team/drizzle-orm/issues/3137)
80 changes: 80 additions & 0 deletions changelogs/drizzle-orm/0.35.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# New LibSQL driver modules

Drizzle now has native support for all `@libsql/client` driver variations:

1. `@libsql/client` - defaults to node import, automatically changes to web if target or platform is set for bundler, e.g. `esbuild --platform=browser`

```ts
import { drizzle } from 'drizzle-orm/libsql';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

2. `@libsql/client/node` node compatible module, supports :memory:, file, wss, http and turso connection protocols

```ts
import { drizzle } from 'drizzle-orm/libsql/node';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

3. `@libsql/client/web` module for fullstack web frameworks like next, nuxt, astro, etc.

```ts
import { drizzle } from 'drizzle-orm/libsql/web';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

4. `@libsql/client/http` module for http and https connection protocols

```ts
import { drizzle } from 'drizzle-orm/libsql/http';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

5. `@libsql/client/ws` module for ws and wss connection protocols

```ts
import { drizzle } from 'drizzle-orm/libsql/ws';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

6. `@libsql/client/sqlite3` module for :memory: and file connection protocols

```ts
import { drizzle } from 'drizzle-orm/libsql/wasm';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```

7. `@libsql/client-wasm` Separate experimental package for WASM

```ts
import { drizzle } from 'drizzle-orm/libsql';

const db = drizzle({ connection: {
url: process.env.DATABASE_URL,
authToken: process.env.DATABASE_AUTH_TOKEN
}});
```
4 changes: 2 additions & 2 deletions drizzle-kit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "drizzle-kit",
"version": "0.26.0",
"version": "0.26.2",
"homepage": "https://orm.drizzle.team",
"keywords": [
"drizzle",
Expand Down Expand Up @@ -51,7 +51,7 @@
"@arethetypeswrong/cli": "^0.15.3",
"@aws-sdk/client-rds-data": "^3.556.0",
"@cloudflare/workers-types": "^4.20230518.0",
"@electric-sql/pglite": "^0.1.5",
"@electric-sql/pglite": "^0.2.12",
"@hono/node-server": "^1.9.0",
"@hono/zod-validator": "^0.2.1",
"@libsql/client": "^0.10.0",
Expand Down
2 changes: 1 addition & 1 deletion drizzle-kit/src/cli/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export const assertEitherPackage = async (
process.exit(1);
};

const requiredApiVersion = 8;
const requiredApiVersion = 9;
export const assertOrmCoreVersion = async () => {
try {
const { compatibilityVersion } = await import('drizzle-orm/version');
Expand Down
2 changes: 1 addition & 1 deletion drizzle-kit/src/serializer/mysqlSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ export const schemaInternal = object({
version: literal('5'),
dialect: dialect,
tables: record(string(), table),
views: record(string(), view),
views: record(string(), view).default({}),
_meta: object({
tables: record(string(), string()),
columns: record(string(), string()),
Expand Down
4 changes: 2 additions & 2 deletions drizzle-kit/src/serializer/sqliteSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export const schemaInternalV4 = object({
version: literal('4'),
dialect: dialect,
tables: record(string(), table),
views: record(string(), view),
views: record(string(), view).default({}),
enums: object({}),
}).strict();

Expand Down Expand Up @@ -122,7 +122,7 @@ export const schemaInternal = object({
version: latestVersion,
dialect: dialect,
tables: record(string(), table),
views: record(string(), view),
views: record(string(), view).default({}),
enums: object({}),
_meta: object({
tables: record(string(), string()),
Expand Down
6 changes: 4 additions & 2 deletions drizzle-orm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "drizzle-orm",
"version": "0.35.0",
"version": "0.35.3",
"description": "Drizzle ORM package for SQL databases",
"type": "module",
"scripts": {
Expand Down Expand Up @@ -47,6 +47,7 @@
"@cloudflare/workers-types": ">=3",
"@electric-sql/pglite": ">=0.1.1",
"@libsql/client": ">=0.10.0",
"@libsql/client-wasm": ">=0.10.0",
"@neondatabase/serverless": ">=0.1",
"@op-engineering/op-sqlite": ">=2",
"@opentelemetry/api": "^1.4.1",
Expand Down Expand Up @@ -160,8 +161,9 @@
"devDependencies": {
"@aws-sdk/client-rds-data": "^3.549.0",
"@cloudflare/workers-types": "^4.20230904.0",
"@electric-sql/pglite": "^0.1.1",
"@electric-sql/pglite": "^0.2.12",
"@libsql/client": "^0.10.0",
"@libsql/client-wasm": "^0.10.0",
"@miniflare/d1": "^2.14.4",
"@neondatabase/serverless": "^0.9.0",
"@op-engineering/op-sqlite": "^2.0.16",
Expand Down
15 changes: 7 additions & 8 deletions drizzle-orm/src/better-sqlite3/driver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
} from '~/relations.ts';
import { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';
import { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';
import type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';
import { type DrizzleConfig, type IfNotImported, type ImportTypeError, isConfig } from '~/utils.ts';
import { BetterSQLiteSession } from './session.ts';

export type DrizzleBetterSQLite3DatabaseConfig =
Expand Down Expand Up @@ -89,12 +89,13 @@ export function drizzle<
): BetterSQLite3Database<TSchema> & {
$client: Database;
} {
// eslint-disable-next-line no-instanceof/no-instanceof
if (params[0] instanceof Client) {
return construct(params[0] as Database, params[1] as DrizzleConfig<TSchema> | undefined) as any;
if (params[0] === undefined || typeof params[0] === 'string') {
const instance = params[0] === undefined ? new Client() : new Client(params[0]);

return construct(instance, params[1]) as any;
}

if (typeof params[0] === 'object') {
if (isConfig(params[0])) {
const { connection, client, ...drizzleConfig } = params[0] as
& {
connection?: DrizzleBetterSQLite3DatabaseConfig;
Expand All @@ -117,9 +118,7 @@ export function drizzle<
return construct(instance, drizzleConfig) as any;
}

const instance = new Client(params[0]);

return construct(instance, params[1]) as any;
return construct(params[0] as Database, params[1] as DrizzleConfig<TSchema> | undefined) as any;
}

export namespace drizzle {
Expand Down
15 changes: 7 additions & 8 deletions drizzle-orm/src/bun-sqlite/driver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
} from '~/relations.ts';
import { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';
import { SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';
import type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';
import { type DrizzleConfig, type IfNotImported, type ImportTypeError, isConfig } from '~/utils.ts';
import { SQLiteBunSession } from './session.ts';

export class BunSQLiteDatabase<
Expand Down Expand Up @@ -111,12 +111,13 @@ export function drizzle<
): BunSQLiteDatabase<TSchema> & {
$client: TClient;
} {
// eslint-disable-next-line no-instanceof/no-instanceof
if (params[0] instanceof Database) {
return construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;
if (params[0] === undefined || typeof params[0] === 'string') {
const instance = params[0] === undefined ? new Database() : new Database(params[0]);

return construct(instance, params[1]) as any;
}

if (typeof params[0] === 'object') {
if (isConfig(params[0])) {
const { connection, client, ...drizzleConfig } = params[0] as
& ({
connection?: DrizzleBunSqliteDatabaseConfig | string;
Expand All @@ -141,9 +142,7 @@ export function drizzle<
return construct(instance, drizzleConfig) as any;
}

const instance = new Database(params[0]);

return construct(instance, params[1]) as any;
return construct(params[0] as Database, params[1] as DrizzleConfig<TSchema> | undefined) as any;
}

export namespace drizzle {
Expand Down
64 changes: 64 additions & 0 deletions drizzle-orm/src/libsql/driver-core.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import type { Client, ResultSet } from '@libsql/client';
import type { BatchItem, BatchResponse } from '~/batch.ts';
import { entityKind } from '~/entity.ts';
import { DefaultLogger } from '~/logger.ts';
import {
createTableRelationsHelpers,
extractTablesRelationalConfig,
type ExtractTablesWithRelations,
type RelationalSchemaConfig,
type TablesRelationalConfig,
} from '~/relations.ts';
import { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';
import { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';
import type { DrizzleConfig } from '~/utils.ts';
import { LibSQLSession } from './session.ts';

export class LibSQLDatabase<
TSchema extends Record<string, unknown> = Record<string, never>,
> extends BaseSQLiteDatabase<'async', ResultSet, TSchema> {
static override readonly [entityKind]: string = 'LibSQLDatabase';

/** @internal */
declare readonly session: LibSQLSession<TSchema, ExtractTablesWithRelations<TSchema>>;

async batch<U extends BatchItem<'sqlite'>, T extends Readonly<[U, ...U[]]>>(
batch: T,
): Promise<BatchResponse<T>> {
return this.session.batch(batch) as Promise<BatchResponse<T>>;
}
}

/** @internal */
export function construct<
TSchema extends Record<string, unknown> = Record<string, never>,
>(client: Client, config: DrizzleConfig<TSchema> = {}): LibSQLDatabase<TSchema> & {
$client: Client;
} {
const dialect = new SQLiteAsyncDialect({ casing: config.casing });
let logger;
if (config.logger === true) {
logger = new DefaultLogger();
} else if (config.logger !== false) {
logger = config.logger;
}

let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;
if (config.schema) {
const tablesConfig = extractTablesRelationalConfig(
config.schema,
createTableRelationsHelpers,
);
schema = {
fullSchema: config.schema,
schema: tablesConfig.tables,
tableNamesMap: tablesConfig.tableNamesMap,
};
}

const session = new LibSQLSession(client, dialect, schema, { logger }, undefined);
const db = new LibSQLDatabase('async', dialect, session, schema) as LibSQLDatabase<TSchema>;
(<any> db).$client = client;

return db as any;
}
Loading

0 comments on commit a866c0e

Please sign in to comment.