drizzle-orm 0.34.1-f9ec555 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/aws-data-api/pg/driver.cjs +21 -1
- package/aws-data-api/pg/driver.cjs.map +1 -1
- package/aws-data-api/pg/driver.d.cts +20 -3
- package/aws-data-api/pg/driver.d.ts +20 -3
- package/aws-data-api/pg/driver.js +21 -1
- package/aws-data-api/pg/driver.js.map +1 -1
- package/better-sqlite3/driver.cjs +37 -1
- package/better-sqlite3/driver.cjs.map +1 -1
- package/better-sqlite3/driver.d.cts +24 -3
- package/better-sqlite3/driver.d.ts +24 -3
- package/better-sqlite3/driver.js +27 -1
- package/better-sqlite3/driver.js.map +1 -1
- package/bun-sqlite/driver.cjs +28 -1
- package/bun-sqlite/driver.cjs.map +1 -1
- package/bun-sqlite/driver.d.cts +46 -4
- package/bun-sqlite/driver.d.ts +46 -4
- package/bun-sqlite/driver.js +28 -1
- package/bun-sqlite/driver.js.map +1 -1
- package/libsql/driver.cjs +27 -1
- package/libsql/driver.cjs.map +1 -1
- package/libsql/driver.d.cts +22 -4
- package/libsql/driver.d.ts +22 -4
- package/libsql/driver.js +27 -1
- package/libsql/driver.js.map +1 -1
- package/mysql-core/dialect.cjs +17 -13
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.d.cts +4 -2
- package/mysql-core/dialect.d.ts +4 -2
- package/mysql-core/dialect.js +17 -13
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/delete.cjs +22 -0
- package/mysql-core/query-builders/delete.cjs.map +1 -1
- package/mysql-core/query-builders/delete.d.cts +8 -1
- package/mysql-core/query-builders/delete.d.ts +8 -1
- package/mysql-core/query-builders/delete.js +22 -0
- package/mysql-core/query-builders/delete.js.map +1 -1
- package/mysql-core/query-builders/update.cjs +22 -0
- package/mysql-core/query-builders/update.cjs.map +1 -1
- package/mysql-core/query-builders/update.d.cts +8 -2
- package/mysql-core/query-builders/update.d.ts +8 -2
- package/mysql-core/query-builders/update.js +22 -0
- package/mysql-core/query-builders/update.js.map +1 -1
- package/mysql2/driver.cjs +29 -1
- package/mysql2/driver.cjs.map +1 -1
- package/mysql2/driver.d.cts +23 -3
- package/mysql2/driver.d.ts +23 -3
- package/mysql2/driver.js +29 -1
- package/mysql2/driver.js.map +1 -1
- package/neon-http/driver.cjs +26 -1
- package/neon-http/driver.cjs.map +1 -1
- package/neon-http/driver.d.cts +23 -3
- package/neon-http/driver.d.ts +23 -3
- package/neon-http/driver.js +27 -2
- package/neon-http/driver.js.map +1 -1
- package/neon-serverless/driver.cjs +29 -1
- package/neon-serverless/driver.cjs.map +1 -1
- package/neon-serverless/driver.d.cts +23 -2
- package/neon-serverless/driver.d.ts +23 -2
- package/neon-serverless/driver.js +29 -1
- package/neon-serverless/driver.js.map +1 -1
- package/node-postgres/driver.cjs +37 -1
- package/node-postgres/driver.cjs.map +1 -1
- package/node-postgres/driver.d.cts +21 -2
- package/node-postgres/driver.d.ts +21 -2
- package/node-postgres/driver.js +27 -1
- package/node-postgres/driver.js.map +1 -1
- package/package.json +49 -85
- package/pglite/driver.cjs +27 -1
- package/pglite/driver.cjs.map +1 -1
- package/pglite/driver.d.cts +24 -3
- package/pglite/driver.d.ts +24 -3
- package/pglite/driver.js +27 -1
- package/pglite/driver.js.map +1 -1
- package/planetscale-serverless/driver.cjs +27 -1
- package/planetscale-serverless/driver.cjs.map +1 -1
- package/planetscale-serverless/driver.d.cts +21 -3
- package/planetscale-serverless/driver.d.ts +21 -3
- package/planetscale-serverless/driver.js +27 -1
- package/planetscale-serverless/driver.js.map +1 -1
- package/postgres-js/driver.cjs +37 -1
- package/postgres-js/driver.cjs.map +1 -1
- package/postgres-js/driver.d.cts +24 -4
- package/postgres-js/driver.d.ts +24 -4
- package/postgres-js/driver.js +27 -1
- package/postgres-js/driver.js.map +1 -1
- package/sqlite-core/dialect.cjs +25 -15
- package/sqlite-core/dialect.cjs.map +1 -1
- package/sqlite-core/dialect.d.cts +4 -2
- package/sqlite-core/dialect.d.ts +4 -2
- package/sqlite-core/dialect.js +25 -15
- package/sqlite-core/dialect.js.map +1 -1
- package/sqlite-core/query-builders/delete.cjs +22 -0
- package/sqlite-core/query-builders/delete.cjs.map +1 -1
- package/sqlite-core/query-builders/delete.d.cts +8 -2
- package/sqlite-core/query-builders/delete.d.ts +8 -2
- package/sqlite-core/query-builders/delete.js +22 -0
- package/sqlite-core/query-builders/delete.js.map +1 -1
- package/sqlite-core/query-builders/update.cjs +22 -0
- package/sqlite-core/query-builders/update.cjs.map +1 -1
- package/sqlite-core/query-builders/update.d.cts +8 -2
- package/sqlite-core/query-builders/update.d.ts +8 -2
- package/sqlite-core/query-builders/update.js +26 -1
- package/sqlite-core/query-builders/update.js.map +1 -1
- package/tidb-serverless/driver.cjs +26 -1
- package/tidb-serverless/driver.cjs.map +1 -1
- package/tidb-serverless/driver.d.cts +22 -4
- package/tidb-serverless/driver.d.ts +22 -4
- package/tidb-serverless/driver.js +26 -1
- package/tidb-serverless/driver.js.map +1 -1
- package/utils.cjs.map +1 -1
- package/utils.d.cts +1 -0
- package/utils.d.ts +1 -0
- package/utils.js.map +1 -1
- package/vercel-postgres/driver.cjs +18 -1
- package/vercel-postgres/driver.cjs.map +1 -1
- package/vercel-postgres/driver.d.cts +23 -3
- package/vercel-postgres/driver.d.ts +23 -3
- package/vercel-postgres/driver.js +18 -1
- package/vercel-postgres/driver.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/connect.cjs +0 -25
- package/connect.cjs.map +0 -1
- package/connect.d.cts +0 -2
- package/connect.d.ts +0 -2
- package/connect.js +0 -3
- package/connect.js.map +0 -1
- package/monodriver.cjs +0 -283
- package/monodriver.cjs.map +0 -1
- package/monodriver.d.cts +0 -192
- package/monodriver.d.ts +0 -192
- package/monodriver.js +0 -249
- package/monodriver.js.map +0 -1
- package/monomigrator.cjs +0 -99
- package/monomigrator.cjs.map +0 -1
- package/monomigrator.d.cts +0 -16
- package/monomigrator.d.ts +0 -16
- package/monomigrator.js +0 -65
- package/monomigrator.js.map +0 -1
|
@@ -4,12 +4,15 @@ import type { MySqlDialect } from "../dialect.js";
|
|
|
4
4
|
import type { AnyMySqlQueryResultHKT, MySqlPreparedQueryConfig, MySqlQueryResultHKT, MySqlQueryResultKind, MySqlSession, PreparedQueryHKTBase, PreparedQueryKind } from "../session.js";
|
|
5
5
|
import type { MySqlTable } from "../table.js";
|
|
6
6
|
import { QueryPromise } from "../../query-promise.js";
|
|
7
|
-
import type { Query, SQL, SQLWrapper } from "../../sql/sql.js";
|
|
7
|
+
import type { Placeholder, Query, SQL, SQLWrapper } from "../../sql/sql.js";
|
|
8
8
|
import type { Subquery } from "../../subquery.js";
|
|
9
|
-
import { type UpdateSet } from "../../utils.js";
|
|
9
|
+
import { type UpdateSet, type ValueOrArray } from "../../utils.js";
|
|
10
|
+
import type { MySqlColumn } from "../columns/common.js";
|
|
10
11
|
import type { SelectedFieldsOrdered } from "./select.types.js";
|
|
11
12
|
export interface MySqlUpdateConfig {
|
|
12
13
|
where?: SQL | undefined;
|
|
14
|
+
limit?: number | Placeholder;
|
|
15
|
+
orderBy?: (MySqlColumn | SQL | SQL.Aliased)[];
|
|
13
16
|
set: UpdateSet;
|
|
14
17
|
table: MySqlTable;
|
|
15
18
|
returning?: SelectedFieldsOrdered;
|
|
@@ -87,6 +90,9 @@ export declare class MySqlUpdateBase<TTable extends MySqlTable, TQueryResult ext
|
|
|
87
90
|
* ```
|
|
88
91
|
*/
|
|
89
92
|
where(where: SQL | undefined): MySqlUpdateWithout<this, TDynamic, 'where'>;
|
|
93
|
+
orderBy(builder: (updateTable: TTable) => ValueOrArray<MySqlColumn | SQL | SQL.Aliased>): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;
|
|
94
|
+
orderBy(...columns: (MySqlColumn | SQL | SQL.Aliased)[]): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;
|
|
95
|
+
limit(limit: number | Placeholder): MySqlUpdateWithout<this, TDynamic, 'limit'>;
|
|
90
96
|
toSQL(): Query;
|
|
91
97
|
prepare(): MySqlUpdatePrepare<this>;
|
|
92
98
|
execute: ReturnType<this['prepare']>['execute'];
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { entityKind } from "../../entity.js";
|
|
2
2
|
import { QueryPromise } from "../../query-promise.js";
|
|
3
|
+
import { SelectionProxyHandler } from "../../selection-proxy.js";
|
|
4
|
+
import { Table } from "../../table.js";
|
|
3
5
|
import { mapUpdateSet } from "../../utils.js";
|
|
4
6
|
class MySqlUpdateBuilder {
|
|
5
7
|
constructor(table, session, dialect, withList) {
|
|
@@ -59,6 +61,26 @@ class MySqlUpdateBase extends QueryPromise {
|
|
|
59
61
|
this.config.where = where;
|
|
60
62
|
return this;
|
|
61
63
|
}
|
|
64
|
+
orderBy(...columns) {
|
|
65
|
+
if (typeof columns[0] === "function") {
|
|
66
|
+
const orderBy = columns[0](
|
|
67
|
+
new Proxy(
|
|
68
|
+
this.config.table[Table.Symbol.Columns],
|
|
69
|
+
new SelectionProxyHandler({ sqlAliasedBehavior: "alias", sqlBehavior: "sql" })
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
const orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];
|
|
73
|
+
this.config.orderBy = orderByArray;
|
|
74
|
+
} else {
|
|
75
|
+
const orderByArray = columns;
|
|
76
|
+
this.config.orderBy = orderByArray;
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
limit(limit) {
|
|
81
|
+
this.config.limit = limit;
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
62
84
|
/** @internal */
|
|
63
85
|
getSQL() {
|
|
64
86
|
return this.dialect.buildUpdateQuery(this.config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mysql-core/query-builders/update.ts"],"sourcesContent":["import type { GetColumnData } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type {\n\tAnyMySqlQueryResultHKT,\n\tMySqlPreparedQueryConfig,\n\tMySqlQueryResultHKT,\n\tMySqlQueryResultKind,\n\tMySqlSession,\n\tPreparedQueryHKTBase,\n\tPreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { MySqlTable } from '~/mysql-core/table.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { mapUpdateSet, type UpdateSet } from '~/utils.ts';\nimport type { SelectedFieldsOrdered } from './select.types.ts';\n\nexport interface MySqlUpdateConfig {\n\twhere?: SQL | undefined;\n\tset: UpdateSet;\n\ttable: MySqlTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type MySqlUpdateSetSource<TTable extends MySqlTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL;\n\t}\n\t& {};\n\nexport class MySqlUpdateBuilder<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n> {\n\tstatic readonly [entityKind]: string = 'MySqlUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: MySqlSession,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(values: MySqlUpdateSetSource<TTable>): MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT> {\n\t\treturn new MySqlUpdateBase(this.table, mapUpdateSet(this.table, values), this.session, this.dialect, this.withList);\n\t}\n}\n\nexport type MySqlUpdateWithout<\n\tT extends AnyMySqlUpdateBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tMySqlUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['preparedQueryHKT'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type MySqlUpdatePrepare<T extends AnyMySqlUpdateBase> = PreparedQueryKind<\n\tT['_']['preparedQueryHKT'],\n\tMySqlPreparedQueryConfig & {\n\t\texecute: MySqlQueryResultKind<T['_']['queryResult'], never>;\n\t\titerator: never;\n\t},\n\ttrue\n>;\n\nexport type MySqlUpdateDynamic<T extends AnyMySqlUpdateBase> = MySqlUpdate<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['preparedQueryHKT']\n>;\n\nexport type MySqlUpdate<\n\tTTable extends MySqlTable = MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT = AnyMySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase,\n> = MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT, true, never>;\n\nexport type AnyMySqlUpdateBase = MySqlUpdateBase<any, any, any, any, any>;\n\nexport interface MySqlUpdateBase<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>>, SQLWrapper {\n\treadonly _: {\n\t\treadonly table: TTable;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly preparedQueryHKT: TPreparedQueryHKT;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t};\n}\n\nexport class MySqlUpdateBase<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>> implements SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'MySqlUpdate';\n\n\tprivate config: MySqlUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: MySqlSession,\n\t\tprivate dialect: MySqlDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList };\n\t}\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): MySqlUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tprepare(): MySqlUpdatePrepare<this> {\n\t\treturn this.session.prepareQuery(\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t) as MySqlUpdatePrepare<this>;\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn this.prepare().execute(placeholderValues);\n\t};\n\n\tprivate createIterator = (): ReturnType<this['prepare']>['iterator'] => {\n\t\tconst self = this;\n\t\treturn async function*(placeholderValues) {\n\t\t\tyield* self.prepare().iterator(placeholderValues);\n\t\t};\n\t};\n\n\titerator = this.createIterator();\n\n\t$dynamic(): MySqlUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAY3B,SAAS,oBAAoB;
|
|
1
|
+
{"version":3,"sources":["../../../src/mysql-core/query-builders/update.ts"],"sourcesContent":["import type { GetColumnData } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type {\n\tAnyMySqlQueryResultHKT,\n\tMySqlPreparedQueryConfig,\n\tMySqlQueryResultHKT,\n\tMySqlQueryResultKind,\n\tMySqlSession,\n\tPreparedQueryHKTBase,\n\tPreparedQueryKind,\n} from '~/mysql-core/session.ts';\nimport type { MySqlTable } from '~/mysql-core/table.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { mapUpdateSet, type UpdateSet, type ValueOrArray } from '~/utils.ts';\nimport type { MySqlColumn } from '../columns/common.ts';\nimport type { SelectedFieldsOrdered } from './select.types.ts';\n\nexport interface MySqlUpdateConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (MySqlColumn | SQL | SQL.Aliased)[];\n\tset: UpdateSet;\n\ttable: MySqlTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type MySqlUpdateSetSource<TTable extends MySqlTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL;\n\t}\n\t& {};\n\nexport class MySqlUpdateBuilder<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n> {\n\tstatic readonly [entityKind]: string = 'MySqlUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: MySqlSession,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(values: MySqlUpdateSetSource<TTable>): MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT> {\n\t\treturn new MySqlUpdateBase(this.table, mapUpdateSet(this.table, values), this.session, this.dialect, this.withList);\n\t}\n}\n\nexport type MySqlUpdateWithout<\n\tT extends AnyMySqlUpdateBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tMySqlUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['queryResult'],\n\t\tT['_']['preparedQueryHKT'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type MySqlUpdatePrepare<T extends AnyMySqlUpdateBase> = PreparedQueryKind<\n\tT['_']['preparedQueryHKT'],\n\tMySqlPreparedQueryConfig & {\n\t\texecute: MySqlQueryResultKind<T['_']['queryResult'], never>;\n\t\titerator: never;\n\t},\n\ttrue\n>;\n\nexport type MySqlUpdateDynamic<T extends AnyMySqlUpdateBase> = MySqlUpdate<\n\tT['_']['table'],\n\tT['_']['queryResult'],\n\tT['_']['preparedQueryHKT']\n>;\n\nexport type MySqlUpdate<\n\tTTable extends MySqlTable = MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT = AnyMySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase = PreparedQueryHKTBase,\n> = MySqlUpdateBase<TTable, TQueryResult, TPreparedQueryHKT, true, never>;\n\nexport type AnyMySqlUpdateBase = MySqlUpdateBase<any, any, any, any, any>;\n\nexport interface MySqlUpdateBase<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>>, SQLWrapper {\n\treadonly _: {\n\t\treadonly table: TTable;\n\t\treadonly queryResult: TQueryResult;\n\t\treadonly preparedQueryHKT: TPreparedQueryHKT;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t};\n}\n\nexport class MySqlUpdateBase<\n\tTTable extends MySqlTable,\n\tTQueryResult extends MySqlQueryResultHKT,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<MySqlQueryResultKind<TQueryResult, never>> implements SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'MySqlUpdate';\n\n\tprivate config: MySqlUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: MySqlSession,\n\t\tprivate dialect: MySqlDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList };\n\t}\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): MySqlUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (updateTable: TTable) => ValueOrArray<MySqlColumn | SQL | SQL.Aliased>,\n\t): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (MySqlColumn | SQL | SQL.Aliased)[]): MySqlUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(updateTable: TTable) => ValueOrArray<MySqlColumn | SQL | SQL.Aliased>]\n\t\t\t| (MySqlColumn | SQL | SQL.Aliased)[]\n\t): MySqlUpdateWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (MySqlColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): MySqlUpdateWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tprepare(): MySqlUpdatePrepare<this> {\n\t\treturn this.session.prepareQuery(\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t) as MySqlUpdatePrepare<this>;\n\t}\n\n\toverride execute: ReturnType<this['prepare']>['execute'] = (placeholderValues) => {\n\t\treturn this.prepare().execute(placeholderValues);\n\t};\n\n\tprivate createIterator = (): ReturnType<this['prepare']>['iterator'] => {\n\t\tconst self = this;\n\t\treturn async function*(placeholderValues) {\n\t\t\tyield* self.prepare().iterator(placeholderValues);\n\t\t};\n\t};\n\n\titerator = this.createIterator();\n\n\t$dynamic(): MySqlUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAY3B,SAAS,oBAAoB;AAC7B,SAAS,6BAA6B;AAGtC,SAAS,aAAa;AACtB,SAAS,oBAAuD;AAsBzD,MAAM,mBAIX;AAAA,EAOD,YACS,OACA,SACA,SACA,UACP;AAJO;AACA;AACA;AACA;AAAA,EACN;AAAA,EAXH,QAAiB,UAAU,IAAY;AAAA,EAavC,IAAI,QAAgG;AACnG,WAAO,IAAI,gBAAgB,KAAK,OAAO,aAAa,KAAK,OAAO,MAAM,GAAG,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ;AAAA,EACnH;AACD;AAwDO,MAAM,wBASH,aAA8E;AAAA,EAKvF,YACC,OACA,KACQ,SACA,SACR,UACC;AACD,UAAM;AAJE;AACA;AAIR,SAAK,SAAS,EAAE,KAAK,OAAO,SAAS;AAAA,EACtC;AAAA,EAbA,QAA0B,UAAU,IAAY;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8CR,MAAM,OAAqE;AAC1E,SAAK,OAAO,QAAQ;AACpB,WAAO;AAAA,EACR;AAAA,EAMA,WACI,SAG6C;AAChD,QAAI,OAAO,QAAQ,CAAC,MAAM,YAAY;AACrC,YAAM,UAAU,QAAQ,CAAC;AAAA,QACxB,IAAI;AAAA,UACH,KAAK,OAAO,MAAM,MAAM,OAAO,OAAO;AAAA,UACtC,IAAI,sBAAsB,EAAE,oBAAoB,SAAS,aAAa,MAAM,CAAC;AAAA,QAC9E;AAAA,MACD;AAEA,YAAM,eAAe,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAChE,WAAK,OAAO,UAAU;AAAA,IACvB,OAAO;AACN,YAAM,eAAe;AACrB,WAAK,OAAO,UAAU;AAAA,IACvB;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,OAA0E;AAC/E,SAAK,OAAO,QAAQ;AACpB,WAAO;AAAA,EACR;AAAA;AAAA,EAGA,SAAc;AACb,WAAO,KAAK,QAAQ,iBAAiB,KAAK,MAAM;AAAA,EACjD;AAAA,EAEA,QAAe;AACd,UAAM,EAAE,SAAS,UAAU,GAAG,KAAK,IAAI,KAAK,QAAQ,WAAW,KAAK,OAAO,CAAC;AAC5E,WAAO;AAAA,EACR;AAAA,EAEA,UAAoC;AACnC,WAAO,KAAK,QAAQ;AAAA,MACnB,KAAK,QAAQ,WAAW,KAAK,OAAO,CAAC;AAAA,MACrC,KAAK,OAAO;AAAA,IACb;AAAA,EACD;AAAA,EAES,UAAkD,CAAC,sBAAsB;AACjF,WAAO,KAAK,QAAQ,EAAE,QAAQ,iBAAiB;AAAA,EAChD;AAAA,EAEQ,iBAAiB,MAA+C;AACvE,UAAM,OAAO;AACb,WAAO,iBAAgB,mBAAmB;AACzC,aAAO,KAAK,QAAQ,EAAE,SAAS,iBAAiB;AAAA,IACjD;AAAA,EACD;AAAA,EAEA,WAAW,KAAK,eAAe;AAAA,EAE/B,WAAqC;AACpC,WAAO;AAAA,EACR;AACD;","names":[]}
|
package/mysql2/driver.cjs
CHANGED
|
@@ -24,6 +24,8 @@ __export(driver_exports, {
|
|
|
24
24
|
drizzle: () => drizzle
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(driver_exports);
|
|
27
|
+
var import_events = require("events");
|
|
28
|
+
var import_mysql2 = require("mysql2");
|
|
27
29
|
var import_entity = require("../entity.cjs");
|
|
28
30
|
var import_logger = require("../logger.cjs");
|
|
29
31
|
var import_db = require("../mysql-core/db.cjs");
|
|
@@ -46,7 +48,7 @@ class MySql2Driver {
|
|
|
46
48
|
class MySql2Database extends import_db.MySqlDatabase {
|
|
47
49
|
static [import_entity.entityKind] = "MySql2Database";
|
|
48
50
|
}
|
|
49
|
-
function
|
|
51
|
+
function construct(client, config = {}) {
|
|
50
52
|
const dialect = new import_dialect.MySqlDialect({ casing: config.casing });
|
|
51
53
|
let logger;
|
|
52
54
|
if (config.logger === true) {
|
|
@@ -82,6 +84,32 @@ function drizzle(client, config = {}) {
|
|
|
82
84
|
function isCallbackClient(client) {
|
|
83
85
|
return typeof client.promise === "function";
|
|
84
86
|
}
|
|
87
|
+
function drizzle(...params) {
|
|
88
|
+
if (params[0] instanceof import_events.EventEmitter) {
|
|
89
|
+
return construct(params[0], params[1]);
|
|
90
|
+
}
|
|
91
|
+
if (typeof params[0] === "object") {
|
|
92
|
+
const { connection, client, ...drizzleConfig } = params[0];
|
|
93
|
+
if (client)
|
|
94
|
+
return construct(client, drizzleConfig);
|
|
95
|
+
const instance2 = typeof connection === "string" ? (0, import_mysql2.createPool)({
|
|
96
|
+
uri: connection
|
|
97
|
+
}) : (0, import_mysql2.createPool)(connection);
|
|
98
|
+
const db = construct(instance2, drizzleConfig);
|
|
99
|
+
return db;
|
|
100
|
+
}
|
|
101
|
+
const connectionString = params[0];
|
|
102
|
+
const instance = (0, import_mysql2.createPool)({
|
|
103
|
+
uri: connectionString
|
|
104
|
+
});
|
|
105
|
+
return construct(instance, params[1]);
|
|
106
|
+
}
|
|
107
|
+
((drizzle2) => {
|
|
108
|
+
function mock(config) {
|
|
109
|
+
return construct({}, config);
|
|
110
|
+
}
|
|
111
|
+
drizzle2.mock = mock;
|
|
112
|
+
})(drizzle || (drizzle = {}));
|
|
85
113
|
// Annotate the CommonJS export names for ESM import in node:
|
|
86
114
|
0 && (module.exports = {
|
|
87
115
|
MySql2Database,
|
package/mysql2/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, schema, { logger: this.options.logger, mode });\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema> = {},\n): MySql2Database<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger });\n\tconst session = driver.createSession(schema, mode);\n\tconst db = new MySql2Database(dialect, session, schema as any, mode) as MySql2Database<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnyMySql2Connection = CallbackPool,\n>(\n\t...params: IfNotImported<\n\t\tCallbackPool,\n\t\t[ImportTypeError<'mysql2'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tMySql2DrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& MySql2DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | PoolOptions;\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): MySql2Database<TSchema> & {\n\t$client: TClient;\n} {\n\t// eslint-disable-next-line no-instanceof/no-instanceof\n\tif (params[0] instanceof EventEmitter) {\n\t\treturn construct(params[0] as TClient, params[1] as MySql2DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (typeof params[0] === 'object') {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& MySql2DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? createPool({\n\t\t\t\turi: connection,\n\t\t\t})\n\t\t\t: createPool(connection!);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\tconst connectionString = params[0]!;\n\tconst instance = createPool({\n\t\turi: connectionString,\n\t});\n\n\treturn construct(instance, params[1]) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema>,\n\t): MySql2Database<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA6B;AAC7B,oBAA+G;AAE/G,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA8B;AAC9B,qBAA6B;AAE7B,uBAKO;AAEP,oBAA6B;AAE7B,qBAA8B;AAwB9B,IAAAA,aAA8B;AAlBvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA8B,CAAC,GACtC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,QACA,MACiE;AACjE,WAAO,IAAI,6BAAc,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,EAClG;AACD;AAIO,MAAM,uBAEH,wBAAqE;AAAA,EAC9E,QAA0B,wBAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAuC,CAAC,GAGvC;AACD,QAAM,UAAU,IAAI,4BAAa,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC1D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,QAAI,OAAO,SAAS,QAAW;AAC9B,YAAM,IAAI,2BAAa;AAAA,QACtB,SACC;AAAA,MACF,CAAC;AAAA,IACF;AAEA,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,SAAS,IAAI,aAAa,mBAAmC,SAAS,EAAE,OAAO,CAAC;AACtF,QAAM,UAAU,OAAO,cAAc,QAAQ,IAAI;AACjD,QAAM,KAAK,IAAI,eAAe,SAAS,SAAS,QAAe,IAAI;AACnE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAIZ,QAqBF;AAED,MAAI,OAAO,CAAC,aAAa,4BAAc;AACtC,WAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAA6C;AAAA,EAC7F;AAEA,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,UAAMC,YAAW,OAAO,eAAe,eACpC,0BAAW;AAAA,MACZ,KAAK;AAAA,IACN,CAAC,QACC,0BAAW,UAAW;AACzB,UAAM,KAAK,UAAUA,WAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,OAAO,CAAC;AACjC,QAAM,eAAW,0BAAW;AAAA,IAC3B,KAAK;AAAA,EACN,CAAC;AAED,SAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AACrC;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["import_db","instance","drizzle"]}
|
package/mysql2/driver.d.cts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Connection as CallbackConnection, type Pool as CallbackPool, type PoolOptions } from 'mysql2';
|
|
2
|
+
import type { Connection, Pool } from 'mysql2/promise';
|
|
2
3
|
import { entityKind } from "../entity.cjs";
|
|
3
4
|
import type { Logger } from "../logger.cjs";
|
|
4
5
|
import { MySqlDatabase } from "../mysql-core/db.cjs";
|
|
5
6
|
import { MySqlDialect } from "../mysql-core/dialect.cjs";
|
|
6
7
|
import type { Mode } from "../mysql-core/session.cjs";
|
|
7
8
|
import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.cjs";
|
|
8
|
-
import type { DrizzleConfig } from "../utils.cjs";
|
|
9
|
+
import type { DrizzleConfig, IfNotImported, ImportTypeError } from "../utils.cjs";
|
|
9
10
|
import type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from "./session.cjs";
|
|
10
11
|
import { MySql2Session } from "./session.cjs";
|
|
11
12
|
export interface MySqlDriverOptions {
|
|
@@ -30,6 +31,25 @@ export type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record
|
|
|
30
31
|
schema?: undefined;
|
|
31
32
|
mode?: Mode;
|
|
32
33
|
});
|
|
33
|
-
export
|
|
34
|
+
export type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;
|
|
35
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnyMySql2Connection = CallbackPool>(...params: IfNotImported<CallbackPool, [
|
|
36
|
+
ImportTypeError<'mysql2'>
|
|
37
|
+
], [
|
|
38
|
+
TClient | string
|
|
39
|
+
] | [
|
|
40
|
+
TClient | string,
|
|
41
|
+
MySql2DrizzleConfig<TSchema>
|
|
42
|
+
] | [
|
|
43
|
+
(MySql2DrizzleConfig<TSchema> & ({
|
|
44
|
+
connection: string | PoolOptions;
|
|
45
|
+
} | {
|
|
46
|
+
client: TClient;
|
|
47
|
+
}))
|
|
48
|
+
]>): MySql2Database<TSchema> & {
|
|
34
49
|
$client: TClient;
|
|
35
50
|
};
|
|
51
|
+
export declare namespace drizzle {
|
|
52
|
+
function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: MySql2DrizzleConfig<TSchema>): MySql2Database<TSchema> & {
|
|
53
|
+
$client: '$client is not available on drizzle.mock()';
|
|
54
|
+
};
|
|
55
|
+
}
|
package/mysql2/driver.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Connection as CallbackConnection, type Pool as CallbackPool, type PoolOptions } from 'mysql2';
|
|
2
|
+
import type { Connection, Pool } from 'mysql2/promise';
|
|
2
3
|
import { entityKind } from "../entity.js";
|
|
3
4
|
import type { Logger } from "../logger.js";
|
|
4
5
|
import { MySqlDatabase } from "../mysql-core/db.js";
|
|
5
6
|
import { MySqlDialect } from "../mysql-core/dialect.js";
|
|
6
7
|
import type { Mode } from "../mysql-core/session.js";
|
|
7
8
|
import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.js";
|
|
8
|
-
import type { DrizzleConfig } from "../utils.js";
|
|
9
|
+
import type { DrizzleConfig, IfNotImported, ImportTypeError } from "../utils.js";
|
|
9
10
|
import type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from "./session.js";
|
|
10
11
|
import { MySql2Session } from "./session.js";
|
|
11
12
|
export interface MySqlDriverOptions {
|
|
@@ -30,6 +31,25 @@ export type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record
|
|
|
30
31
|
schema?: undefined;
|
|
31
32
|
mode?: Mode;
|
|
32
33
|
});
|
|
33
|
-
export
|
|
34
|
+
export type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;
|
|
35
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnyMySql2Connection = CallbackPool>(...params: IfNotImported<CallbackPool, [
|
|
36
|
+
ImportTypeError<'mysql2'>
|
|
37
|
+
], [
|
|
38
|
+
TClient | string
|
|
39
|
+
] | [
|
|
40
|
+
TClient | string,
|
|
41
|
+
MySql2DrizzleConfig<TSchema>
|
|
42
|
+
] | [
|
|
43
|
+
(MySql2DrizzleConfig<TSchema> & ({
|
|
44
|
+
connection: string | PoolOptions;
|
|
45
|
+
} | {
|
|
46
|
+
client: TClient;
|
|
47
|
+
}))
|
|
48
|
+
]>): MySql2Database<TSchema> & {
|
|
34
49
|
$client: TClient;
|
|
35
50
|
};
|
|
51
|
+
export declare namespace drizzle {
|
|
52
|
+
function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: MySql2DrizzleConfig<TSchema>): MySql2Database<TSchema> & {
|
|
53
|
+
$client: '$client is not available on drizzle.mock()';
|
|
54
|
+
};
|
|
55
|
+
}
|
package/mysql2/driver.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import { createPool } from "mysql2";
|
|
1
3
|
import { entityKind } from "../entity.js";
|
|
2
4
|
import { DefaultLogger } from "../logger.js";
|
|
3
5
|
import { MySqlDatabase } from "../mysql-core/db.js";
|
|
@@ -23,7 +25,7 @@ import { MySqlDatabase as MySqlDatabase2 } from "../mysql-core/db.js";
|
|
|
23
25
|
class MySql2Database extends MySqlDatabase {
|
|
24
26
|
static [entityKind] = "MySql2Database";
|
|
25
27
|
}
|
|
26
|
-
function
|
|
28
|
+
function construct(client, config = {}) {
|
|
27
29
|
const dialect = new MySqlDialect({ casing: config.casing });
|
|
28
30
|
let logger;
|
|
29
31
|
if (config.logger === true) {
|
|
@@ -59,6 +61,32 @@ function drizzle(client, config = {}) {
|
|
|
59
61
|
function isCallbackClient(client) {
|
|
60
62
|
return typeof client.promise === "function";
|
|
61
63
|
}
|
|
64
|
+
function drizzle(...params) {
|
|
65
|
+
if (params[0] instanceof EventEmitter) {
|
|
66
|
+
return construct(params[0], params[1]);
|
|
67
|
+
}
|
|
68
|
+
if (typeof params[0] === "object") {
|
|
69
|
+
const { connection, client, ...drizzleConfig } = params[0];
|
|
70
|
+
if (client)
|
|
71
|
+
return construct(client, drizzleConfig);
|
|
72
|
+
const instance2 = typeof connection === "string" ? createPool({
|
|
73
|
+
uri: connection
|
|
74
|
+
}) : createPool(connection);
|
|
75
|
+
const db = construct(instance2, drizzleConfig);
|
|
76
|
+
return db;
|
|
77
|
+
}
|
|
78
|
+
const connectionString = params[0];
|
|
79
|
+
const instance = createPool({
|
|
80
|
+
uri: connectionString
|
|
81
|
+
});
|
|
82
|
+
return construct(instance, params[1]);
|
|
83
|
+
}
|
|
84
|
+
((drizzle2) => {
|
|
85
|
+
function mock(config) {
|
|
86
|
+
return construct({}, config);
|
|
87
|
+
}
|
|
88
|
+
drizzle2.mock = mock;
|
|
89
|
+
})(drizzle || (drizzle = {}));
|
|
62
90
|
export {
|
|
63
91
|
MySql2Database,
|
|
64
92
|
MySql2Driver,
|
package/mysql2/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/mysql2/driver.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { MySqlDatabase } from '~/mysql-core/db.ts';\nimport { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { Mode } from '~/mysql-core/session.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';\nimport { DrizzleError } from '../errors.ts';\nimport type { MySql2Client, MySql2PreparedQueryHKT, MySql2QueryResultHKT } from './session.ts';\nimport { MySql2Session } from './session.ts';\n\nexport interface MySqlDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class MySql2Driver {\n\tstatic readonly [entityKind]: string = 'MySql2Driver';\n\n\tconstructor(\n\t\tprivate client: MySql2Client,\n\t\tprivate dialect: MySqlDialect,\n\t\tprivate options: MySqlDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t\tmode: Mode,\n\t): MySql2Session<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new MySql2Session(this.client, this.dialect, schema, { logger: this.options.logger, mode });\n\t}\n}\n\nexport { MySqlDatabase } from '~/mysql-core/db.ts';\n\nexport class MySql2Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends MySqlDatabase<MySql2QueryResultHKT, MySql2PreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'MySql2Database';\n}\n\nexport type MySql2DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema; mode: Mode } | { schema?: undefined; mode?: Mode });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: MySql2DrizzleConfig<TSchema> = {},\n): MySql2Database<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new MySqlDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tif (config.mode === undefined) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t'You need to specify \"mode\": \"planetscale\" or \"default\" when providing a schema. Read more: https://orm.drizzle.team/docs/rqb#modes',\n\t\t\t});\n\t\t}\n\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst mode = config.mode ?? 'default';\n\n\tconst driver = new MySql2Driver(clientForInstance as MySql2Client, dialect, { logger });\n\tconst session = driver.createSession(schema, mode);\n\tconst db = new MySql2Database(dialect, session, schema as any, mode) as MySql2Database<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): MySql2Client;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnyMySql2Connection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnyMySql2Connection = CallbackPool,\n>(\n\t...params: IfNotImported<\n\t\tCallbackPool,\n\t\t[ImportTypeError<'mysql2'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tMySql2DrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& MySql2DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | PoolOptions;\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): MySql2Database<TSchema> & {\n\t$client: TClient;\n} {\n\t// eslint-disable-next-line no-instanceof/no-instanceof\n\tif (params[0] instanceof EventEmitter) {\n\t\treturn construct(params[0] as TClient, params[1] as MySql2DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (typeof params[0] === 'object') {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& MySql2DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? createPool({\n\t\t\t\turi: connection,\n\t\t\t})\n\t\t\t: createPool(connection!);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\tconst connectionString = params[0]!;\n\tconst instance = createPool({\n\t\turi: connectionString,\n\t});\n\n\treturn construct(instance, params[1]) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: MySql2DrizzleConfig<TSchema>,\n\t): MySql2Database<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AAAA,SAAS,oBAAoB;AAC7B,SAAgD,kBAA+D;AAE/G,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAE7B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AAEP,SAAS,oBAAoB;AAE7B,SAAS,qBAAqB;AAMvB,MAAM,aAAa;AAAA,EAGzB,YACS,QACA,SACA,UAA8B,CAAC,GACtC;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,QACA,MACiE;AACjE,WAAO,IAAI,cAAc,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,QAAQ,KAAK,CAAC;AAAA,EAClG;AACD;AAEA,SAAS,iBAAAA,sBAAqB;AAEvB,MAAM,uBAEH,cAAqE;AAAA,EAC9E,QAA0B,UAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAuC,CAAC,GAGvC;AACD,QAAM,UAAU,IAAI,aAAa,EAAE,QAAQ,OAAO,OAAO,CAAC;AAC1D,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,QAAI,OAAO,SAAS,QAAW;AAC9B,YAAM,IAAI,aAAa;AAAA,QACtB,SACC;AAAA,MACF,CAAC;AAAA,IACF;AAEA,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,QAAQ;AAE5B,QAAM,SAAS,IAAI,aAAa,mBAAmC,SAAS,EAAE,OAAO,CAAC;AACtF,QAAM,UAAU,OAAO,cAAc,QAAQ,IAAI;AACjD,QAAM,KAAK,IAAI,eAAe,SAAS,SAAS,QAAe,IAAI;AACnE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAIZ,QAqBF;AAED,MAAI,OAAO,CAAC,aAAa,cAAc;AACtC,WAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAA6C;AAAA,EAC7F;AAEA,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,UAAMC,YAAW,OAAO,eAAe,WACpC,WAAW;AAAA,MACZ,KAAK;AAAA,IACN,CAAC,IACC,WAAW,UAAW;AACzB,UAAM,KAAK,UAAUA,WAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,OAAO,CAAC;AACjC,QAAM,WAAW,WAAW;AAAA,IAC3B,KAAK;AAAA,EACN,CAAC;AAED,SAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AACrC;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["MySqlDatabase","instance","drizzle"]}
|
package/neon-http/driver.cjs
CHANGED
|
@@ -54,7 +54,7 @@ class NeonHttpDatabase extends import_db.PgDatabase {
|
|
|
54
54
|
return this.session.batch(batch);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
function
|
|
57
|
+
function construct(client, config = {}) {
|
|
58
58
|
const dialect = new import_dialect.PgDialect({ casing: config.casing });
|
|
59
59
|
let logger;
|
|
60
60
|
if (config.logger === true) {
|
|
@@ -84,6 +84,31 @@ function drizzle(client, config = {}) {
|
|
|
84
84
|
db.$client = client;
|
|
85
85
|
return db;
|
|
86
86
|
}
|
|
87
|
+
function drizzle(...params) {
|
|
88
|
+
if (typeof params[0] === "function") {
|
|
89
|
+
return construct(params[0], params[1]);
|
|
90
|
+
}
|
|
91
|
+
if (typeof params[0] === "object") {
|
|
92
|
+
const { connection, client, ...drizzleConfig } = params[0];
|
|
93
|
+
if (client)
|
|
94
|
+
return construct(client, drizzleConfig);
|
|
95
|
+
if (typeof connection === "object") {
|
|
96
|
+
const { connectionString, ...options } = connection;
|
|
97
|
+
const instance3 = (0, import_serverless.neon)(connectionString, options);
|
|
98
|
+
return construct(instance3, drizzleConfig);
|
|
99
|
+
}
|
|
100
|
+
const instance2 = (0, import_serverless.neon)(connection);
|
|
101
|
+
return construct(instance2, drizzleConfig);
|
|
102
|
+
}
|
|
103
|
+
const instance = (0, import_serverless.neon)(params[0]);
|
|
104
|
+
return construct(instance, params[1]);
|
|
105
|
+
}
|
|
106
|
+
((drizzle2) => {
|
|
107
|
+
function mock(config) {
|
|
108
|
+
return construct({}, config);
|
|
109
|
+
}
|
|
110
|
+
drizzle2.mock = mock;
|
|
111
|
+
})(drizzle || (drizzle = {}));
|
|
87
112
|
// Annotate the CommonJS export names for ESM import in node:
|
|
88
113
|
0 && (module.exports = {
|
|
89
114
|
NeonHttpDatabase,
|
package/neon-http/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { NeonQueryFunction } from '@neondatabase/serverless';\nimport { types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: IfNotImported<\n\t\tHTTPTransactionOptions<boolean, boolean>,\n\t\t[ImportTypeError<'@neondatabase/serverless'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\t// eslint-disable-next-line no-instanceof/no-instanceof\n\tif (typeof params[0] === 'function') {\n\t\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (typeof params[0] === 'object') {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\tconst instance = neon(params[0] as string);\n\treturn construct(instance, params[1]) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAA4B;AAE5B,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAC1B,uBAA2E;AAG3E,qBAAkF;AAM3E,MAAM,eAAe;AAAA,EAG3B,YACS,QACA,SACA,UAA6B,CAAC,GACrC;AAHO;AACA;AACA;AAER,SAAK,YAAY;AAAA,EAClB;AAAA,EARA,QAAiB,wBAAU,IAAY;AAAA,EAUvC,cACC,QACmE;AACnE,WAAO,IAAI,+BAAgB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC9F;AAAA,EAEA,cAAc;AACb,4BAAM,cAAc,wBAAM,SAAS,aAAa,CAAC,QAAQ,GAAG;AAC5D,4BAAM,cAAc,wBAAM,SAAS,WAAW,CAAC,QAAQ,GAAG;AAC1D,4BAAM,cAAc,wBAAM,SAAS,MAAM,CAAC,QAAQ,GAAG;AACrD,4BAAM,cAAc,wBAAM,SAAS,UAAU,CAAC,QAAQ,GAAG;AAAA,EAC1D;AACD;AAEO,MAAM,yBAEH,qBAA4C;AAAA,EACrD,QAA0B,wBAAU,IAAY;AAAA,EAKhD,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEA,SAAS,UAIR,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,yBAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,eAAe,QAAQ,SAAS,EAAE,OAAO,CAAC;AAC7D,QAAM,UAAU,OAAO,cAAc,MAAM;AAE3C,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAEO,SAAS,WAIZ,QAqBF;AAED,MAAI,OAAO,OAAO,CAAC,MAAM,YAAY;AACpC,WAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAuC;AAAA,EACvF;AAEA,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAWzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAO,eAAe,UAAU;AACnC,YAAM,EAAE,kBAAkB,GAAG,QAAQ,IAAI;AAEzC,YAAMA,gBAAW,wBAAK,kBAAkB,OAAO;AAE/C,aAAO,UAAUA,WAAU,aAAa;AAAA,IACzC;AAEA,UAAMA,gBAAW,wBAAK,UAAW;AAEjC,WAAO,UAAUA,WAAU,aAAa;AAAA,EACzC;AAEA,QAAM,eAAW,wBAAK,OAAO,CAAC,CAAW;AACzC,SAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AACrC;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["instance","drizzle"]}
|
package/neon-http/driver.d.cts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { NeonQueryFunction } from '@neondatabase/serverless';
|
|
1
|
+
import type { HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem, BatchResponse } from "../batch.cjs";
|
|
3
3
|
import { entityKind } from "../entity.cjs";
|
|
4
4
|
import type { Logger } from "../logger.cjs";
|
|
5
5
|
import { PgDatabase } from "../pg-core/db.cjs";
|
|
6
6
|
import { PgDialect } from "../pg-core/dialect.cjs";
|
|
7
7
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.cjs";
|
|
8
|
-
import type { DrizzleConfig } from "../utils.cjs";
|
|
8
|
+
import type { DrizzleConfig, IfNotImported, ImportTypeError } from "../utils.cjs";
|
|
9
9
|
import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.cjs";
|
|
10
10
|
export interface NeonDriverOptions {
|
|
11
11
|
logger?: Logger;
|
|
@@ -23,6 +23,26 @@ export declare class NeonHttpDatabase<TSchema extends Record<string, unknown> =
|
|
|
23
23
|
static readonly [entityKind]: string;
|
|
24
24
|
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(batch: T): Promise<BatchResponse<T>>;
|
|
25
25
|
}
|
|
26
|
-
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends NeonQueryFunction<any, any> = NeonQueryFunction<
|
|
26
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>>(...params: IfNotImported<HTTPTransactionOptions<boolean, boolean>, [
|
|
27
|
+
ImportTypeError<'@neondatabase/serverless'>
|
|
28
|
+
], [
|
|
29
|
+
TClient | string
|
|
30
|
+
] | [
|
|
31
|
+
TClient | string,
|
|
32
|
+
DrizzleConfig<TSchema>
|
|
33
|
+
] | [
|
|
34
|
+
(DrizzleConfig<TSchema> & ({
|
|
35
|
+
connection: string | ({
|
|
36
|
+
connectionString: string;
|
|
37
|
+
} & HTTPTransactionOptions<boolean, boolean>);
|
|
38
|
+
} | {
|
|
39
|
+
client: TClient;
|
|
40
|
+
}))
|
|
41
|
+
]>): NeonHttpDatabase<TSchema> & {
|
|
27
42
|
$client: TClient;
|
|
28
43
|
};
|
|
44
|
+
export declare namespace drizzle {
|
|
45
|
+
function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema>): NeonHttpDatabase<TSchema> & {
|
|
46
|
+
$client: '$client is not available on drizzle.mock()';
|
|
47
|
+
};
|
|
48
|
+
}
|
package/neon-http/driver.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { NeonQueryFunction } from '@neondatabase/serverless';
|
|
1
|
+
import type { HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';
|
|
2
2
|
import type { BatchItem, BatchResponse } from "../batch.js";
|
|
3
3
|
import { entityKind } from "../entity.js";
|
|
4
4
|
import type { Logger } from "../logger.js";
|
|
5
5
|
import { PgDatabase } from "../pg-core/db.js";
|
|
6
6
|
import { PgDialect } from "../pg-core/dialect.js";
|
|
7
7
|
import type { RelationalSchemaConfig, TablesRelationalConfig } from "../relations.js";
|
|
8
|
-
import type { DrizzleConfig } from "../utils.js";
|
|
8
|
+
import type { DrizzleConfig, IfNotImported, ImportTypeError } from "../utils.js";
|
|
9
9
|
import { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from "./session.js";
|
|
10
10
|
export interface NeonDriverOptions {
|
|
11
11
|
logger?: Logger;
|
|
@@ -23,6 +23,26 @@ export declare class NeonHttpDatabase<TSchema extends Record<string, unknown> =
|
|
|
23
23
|
static readonly [entityKind]: string;
|
|
24
24
|
batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(batch: T): Promise<BatchResponse<T>>;
|
|
25
25
|
}
|
|
26
|
-
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends NeonQueryFunction<any, any> = NeonQueryFunction<
|
|
26
|
+
export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>>(...params: IfNotImported<HTTPTransactionOptions<boolean, boolean>, [
|
|
27
|
+
ImportTypeError<'@neondatabase/serverless'>
|
|
28
|
+
], [
|
|
29
|
+
TClient | string
|
|
30
|
+
] | [
|
|
31
|
+
TClient | string,
|
|
32
|
+
DrizzleConfig<TSchema>
|
|
33
|
+
] | [
|
|
34
|
+
(DrizzleConfig<TSchema> & ({
|
|
35
|
+
connection: string | ({
|
|
36
|
+
connectionString: string;
|
|
37
|
+
} & HTTPTransactionOptions<boolean, boolean>);
|
|
38
|
+
} | {
|
|
39
|
+
client: TClient;
|
|
40
|
+
}))
|
|
41
|
+
]>): NeonHttpDatabase<TSchema> & {
|
|
27
42
|
$client: TClient;
|
|
28
43
|
};
|
|
44
|
+
export declare namespace drizzle {
|
|
45
|
+
function mock<TSchema extends Record<string, unknown> = Record<string, never>>(config?: DrizzleConfig<TSchema>): NeonHttpDatabase<TSchema> & {
|
|
46
|
+
$client: '$client is not available on drizzle.mock()';
|
|
47
|
+
};
|
|
48
|
+
}
|
package/neon-http/driver.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { types } from "@neondatabase/serverless";
|
|
1
|
+
import { neon, types } from "@neondatabase/serverless";
|
|
2
2
|
import { entityKind } from "../entity.js";
|
|
3
3
|
import { DefaultLogger } from "../logger.js";
|
|
4
4
|
import { PgDatabase } from "../pg-core/db.js";
|
|
@@ -29,7 +29,7 @@ class NeonHttpDatabase extends PgDatabase {
|
|
|
29
29
|
return this.session.batch(batch);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
function
|
|
32
|
+
function construct(client, config = {}) {
|
|
33
33
|
const dialect = new PgDialect({ casing: config.casing });
|
|
34
34
|
let logger;
|
|
35
35
|
if (config.logger === true) {
|
|
@@ -59,6 +59,31 @@ function drizzle(client, config = {}) {
|
|
|
59
59
|
db.$client = client;
|
|
60
60
|
return db;
|
|
61
61
|
}
|
|
62
|
+
function drizzle(...params) {
|
|
63
|
+
if (typeof params[0] === "function") {
|
|
64
|
+
return construct(params[0], params[1]);
|
|
65
|
+
}
|
|
66
|
+
if (typeof params[0] === "object") {
|
|
67
|
+
const { connection, client, ...drizzleConfig } = params[0];
|
|
68
|
+
if (client)
|
|
69
|
+
return construct(client, drizzleConfig);
|
|
70
|
+
if (typeof connection === "object") {
|
|
71
|
+
const { connectionString, ...options } = connection;
|
|
72
|
+
const instance3 = neon(connectionString, options);
|
|
73
|
+
return construct(instance3, drizzleConfig);
|
|
74
|
+
}
|
|
75
|
+
const instance2 = neon(connection);
|
|
76
|
+
return construct(instance2, drizzleConfig);
|
|
77
|
+
}
|
|
78
|
+
const instance = neon(params[0]);
|
|
79
|
+
return construct(instance, params[1]);
|
|
80
|
+
}
|
|
81
|
+
((drizzle2) => {
|
|
82
|
+
function mock(config) {
|
|
83
|
+
return construct({}, config);
|
|
84
|
+
}
|
|
85
|
+
drizzle2.mock = mock;
|
|
86
|
+
})(drizzle || (drizzle = {}));
|
|
62
87
|
export {
|
|
63
88
|
NeonHttpDatabase,
|
|
64
89
|
NeonHttpDriver,
|
package/neon-http/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { NeonQueryFunction } from '@neondatabase/serverless';\nimport { types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\
|
|
1
|
+
{"version":3,"sources":["../../src/neon-http/driver.ts"],"sourcesContent":["import type { HTTPTransactionOptions, NeonQueryFunction } from '@neondatabase/serverless';\nimport { neon, types } from '@neondatabase/serverless';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport { createTableRelationsHelpers, extractTablesRelationalConfig } from '~/relations.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { DrizzleConfig, IfNotImported, ImportTypeError } from '~/utils.ts';\nimport { type NeonHttpClient, type NeonHttpQueryResultHKT, NeonHttpSession } from './session.ts';\n\nexport interface NeonDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class NeonHttpDriver {\n\tstatic readonly [entityKind]: string = 'NeonDriver';\n\n\tconstructor(\n\t\tprivate client: NeonHttpClient,\n\t\tprivate dialect: PgDialect,\n\t\tprivate options: NeonDriverOptions = {},\n\t) {\n\t\tthis.initMappers();\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): NeonHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new NeonHttpSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n\n\tinitMappers() {\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMPTZ, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.TIMESTAMP, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.DATE, (val) => val);\n\t\ttypes.setTypeParser(types.builtins.INTERVAL, (val) => val);\n\t}\n}\n\nexport class NeonHttpDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<NeonHttpQueryResultHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'NeonHttpDatabase';\n\n\t/** @internal */\n\tdeclare readonly session: NeonHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'pg'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<any, any>,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new PgDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new NeonHttpDriver(client, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\n\tconst db = new NeonHttpDatabase(\n\t\tdialect,\n\t\tsession,\n\t\tschema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined,\n\t);\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends NeonQueryFunction<any, any> = NeonQueryFunction<false, false>,\n>(\n\t...params: IfNotImported<\n\t\tHTTPTransactionOptions<boolean, boolean>,\n\t\t[ImportTypeError<'@neondatabase/serverless'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tDrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& DrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | ({ connectionString: string } & HTTPTransactionOptions<boolean, boolean>);\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): NeonHttpDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\t// eslint-disable-next-line no-instanceof/no-instanceof\n\tif (typeof params[0] === 'function') {\n\t\treturn construct(params[0] as TClient, params[1] as DrizzleConfig<TSchema> | undefined) as any;\n\t}\n\n\tif (typeof params[0] === 'object') {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& {\n\t\t\t\tconnection?:\n\t\t\t\t\t| ({\n\t\t\t\t\t\tconnectionString: string;\n\t\t\t\t\t} & HTTPTransactionOptions<boolean, boolean>)\n\t\t\t\t\t| string;\n\t\t\t\tclient?: TClient;\n\t\t\t}\n\t\t\t& DrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig);\n\n\t\tif (typeof connection === 'object') {\n\t\t\tconst { connectionString, ...options } = connection;\n\n\t\t\tconst instance = neon(connectionString, options);\n\n\t\t\treturn construct(instance, drizzleConfig) as any;\n\t\t}\n\n\t\tconst instance = neon(connection!);\n\n\t\treturn construct(instance, drizzleConfig) as any;\n\t}\n\n\tconst instance = neon(params[0] as string);\n\treturn construct(instance, params[1]) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: DrizzleConfig<TSchema>,\n\t): NeonHttpDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AACA,SAAS,MAAM,aAAa;AAE5B,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B,qCAAqC;AAG3E,SAA2D,uBAAuB;AAM3E,MAAM,eAAe;AAAA,EAG3B,YACS,QACA,SACA,UAA6B,CAAC,GACrC;AAHO;AACA;AACA;AAER,SAAK,YAAY;AAAA,EAClB;AAAA,EARA,QAAiB,UAAU,IAAY;AAAA,EAUvC,cACC,QACmE;AACnE,WAAO,IAAI,gBAAgB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EAC9F;AAAA,EAEA,cAAc;AACb,UAAM,cAAc,MAAM,SAAS,aAAa,CAAC,QAAQ,GAAG;AAC5D,UAAM,cAAc,MAAM,SAAS,WAAW,CAAC,QAAQ,GAAG;AAC1D,UAAM,cAAc,MAAM,SAAS,MAAM,CAAC,QAAQ,GAAG;AACrD,UAAM,cAAc,MAAM,SAAS,UAAU,CAAC,QAAQ,GAAG;AAAA,EAC1D;AACD;AAEO,MAAM,yBAEH,WAA4C;AAAA,EACrD,QAA0B,UAAU,IAAY;AAAA,EAKhD,MAAM,MACL,OAC4B;AAC5B,WAAO,KAAK,QAAQ,MAAM,KAAK;AAAA,EAChC;AACD;AAEA,SAAS,UAIR,QACA,SAAiC,CAAC,GAGjC;AACD,QAAM,UAAU,IAAI,UAAU,EAAE,QAAQ,OAAO,OAAO,CAAC;AACvD,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,eAAe,QAAQ,SAAS,EAAE,OAAO,CAAC;AAC7D,QAAM,UAAU,OAAO,cAAc,MAAM;AAE3C,QAAM,KAAK,IAAI;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAEO,SAAS,WAIZ,QAqBF;AAED,MAAI,OAAO,OAAO,CAAC,MAAM,YAAY;AACpC,WAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAuC;AAAA,EACvF;AAEA,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAWzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAO,eAAe,UAAU;AACnC,YAAM,EAAE,kBAAkB,GAAG,QAAQ,IAAI;AAEzC,YAAMA,YAAW,KAAK,kBAAkB,OAAO;AAE/C,aAAO,UAAUA,WAAU,aAAa;AAAA,IACzC;AAEA,UAAMA,YAAW,KAAK,UAAW;AAEjC,WAAO,UAAUA,WAAU,aAAa;AAAA,EACzC;AAEA,QAAM,WAAW,KAAK,OAAO,CAAC,CAAW;AACzC,SAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AACrC;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["instance","drizzle"]}
|