@xata.io/drizzle 0.0.0-alpha.v0e4f4d5 → 0.0.0-alpha.v3ef081e

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @xata.io/drizzle@0.0.1 build /home/runner/work/client-ts/client-ts/packages/plugin-client-drizzle
2
+ > @xata.io/drizzle@0.0.0 build /home/runner/work/client-ts/client-ts/packages/plugin-client-drizzle
3
3
  > rimraf dist && rollup -c
4
4
 
5
5
  
@@ -7,8 +7,8 @@
7
7
  (!) Unresolved dependencies
8
8
  https://rollupjs.org/troubleshooting/#warning-treating-module-as-external-dependency
9
9
  drizzle-orm (imported by "src/driver.ts", "src/session.ts" and "src/utils.ts")
10
- drizzle-orm/pg-core (imported by "src/driver.ts", "src/session.ts" and "src/generate.ts")
11
- created dist/index.cjs, dist/index.mjs in 639ms
10
+ drizzle-orm/pg-core (imported by "src/driver.ts" and "src/session.ts")
11
+ created dist/index.cjs, dist/index.mjs in 512ms
12
12
  
13
13
  src/index.ts → dist/index.d.ts...
14
- created dist/index.d.ts in 11s
14
+ created dist/index.d.ts in 10.4s
package/CHANGELOG.md CHANGED
@@ -1,17 +1,8 @@
1
1
  # @xata.io/drizzle
2
2
 
3
- ## 0.0.0-alpha.v0e4f4d5
3
+ ## 0.0.0-alpha.v3ef081e
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - Updated dependencies []:
8
- - @xata.io/client@0.0.0-alpha.v0e4f4d5
9
-
10
- ## 0.0.1
11
-
12
- ### Patch Changes
13
-
14
- - [#1145](https://github.com/xataio/client-ts/pull/1145) [`e41d7faf`](https://github.com/xataio/client-ts/commit/e41d7faf40747fd31a08cdcd767d9596f88e4a20) Thanks [@SferaDev](https://github.com/SferaDev)! - Initial release
15
-
16
- - Updated dependencies [[`22fccb51`](https://github.com/xataio/client-ts/commit/22fccb51709749c319897702c15749b74ce4b820)]:
17
- - @xata.io/client@0.26.2
8
+ - @xata.io/client@0.0.0-alpha.v3ef081e
package/README.md CHANGED
@@ -18,56 +18,3 @@ yarn add drizzle-orm @xata.io/drizzle @xata.io/client
18
18
  # with npm
19
19
  npm install drizzle-orm @xata.io/drizzle @xata.io/client
20
20
  ```
21
-
22
- ## Usage
23
-
24
- To work with drizzle you need to define your models and then create a drizzle instance with the models.
25
-
26
- ```ts
27
- import { drizzle } from '@xata.io/drizzle';
28
- import { sql } from 'drizzle-orm';
29
- import { pgTable, text } from 'drizzle-orm/pg-core';
30
- import { getXataClient } from './xata';
31
-
32
- const xata = getXataClient();
33
-
34
- const drivers = pgTable('drivers', {
35
- id: text('id').primaryKey(),
36
- surname: text('surname'),
37
- forename: text('forename'),
38
- nationality: text('nationality')
39
- });
40
-
41
- const schema = {
42
- drivers
43
- };
44
-
45
- const db = drizzle(xata, { schema });
46
-
47
- const result = await db.execute(sql`select * from ${drivers} where ${drivers.nationality} = 'Spanish'`);
48
- ```
49
-
50
- ## [Experimental] Model generation
51
-
52
- We offer an experimental model generation helper that will generate the models for you from your `tables` array in your `xata.ts` file. Since it's a work in progress, we don't recommend using it in your applications yet, please build your models manually. However, we would love to hear your feedback on it.
53
-
54
- ```ts
55
- import { drizzle, buildModels } from '@xata.io/drizzle';
56
- import { sql } from 'drizzle-orm';
57
- import { pgTable, text } from 'drizzle-orm/pg-core';
58
- import { getXataClient, tables } from './xata';
59
-
60
- const xata = getXataClient();
61
-
62
- const schema = buildModels(tables);
63
- const { drivers } = schema;
64
-
65
- const db = drizzle(xata, { schema });
66
-
67
- const result = await db.execute(sql`select * from ${drivers} where ${drivers.nationality} = 'Spanish'`);
68
- ```
69
-
70
- ## Limitations
71
-
72
- - Migrations from drizzle are not supported yet, we will add them once the SQL endpoint allows it.
73
- - Transactions are not supported yet, we will add them once the SQL endpoint allows it.
package/dist/index.cjs CHANGED
@@ -45,9 +45,6 @@ function mapResultRow(columns, row, joinsNotNullableMap) {
45
45
  }
46
46
  return result;
47
47
  }
48
- const exhaustiveCheck = (x) => {
49
- throw new Error(`Unhandled discriminated union member: ${x}`);
50
- };
51
48
 
52
49
  var __defProp = Object.defineProperty;
53
50
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -77,23 +74,11 @@ class XataPreparedQuery extends pgCore.PreparedQuery {
77
74
  statement: this.query.statement,
78
75
  params
79
76
  });
80
- const fields = this.fields ?? Object.keys(records[0]).map(
81
- (key) => ({
82
- path: [key],
83
- field: {
84
- sql: {
85
- decoder: {
86
- mapFromDriverValue: (value) => value
87
- }
88
- }
89
- }
90
- })
91
- );
92
- const rows = records.map((record) => fields.map((field) => record[field.path.join(".")]));
77
+ const rows = records.map((record) => this.fields.map((field) => record[field.path.join(".")]));
93
78
  if (this.customResultMapper) {
94
79
  return this.customResultMapper(rows);
95
80
  }
96
- return rows.map((row) => mapResultRow(fields, row, void 0));
81
+ return rows.map((row) => mapResultRow(this.fields, row, void 0));
97
82
  }
98
83
  async all(placeholderValues = {}) {
99
84
  const params = drizzleOrm.fillPlaceholders(this.params, placeholderValues);
@@ -163,54 +148,7 @@ function drizzle(client, config = {}) {
163
148
  return new pgCore.PgDatabase(dialect, session, schema);
164
149
  }
165
150
 
166
- function buildColumnType(column) {
167
- switch (column.type) {
168
- case "string":
169
- case "text":
170
- case "email":
171
- case "link":
172
- return pgCore.text(column.name);
173
- case "bool":
174
- return pgCore.boolean(column.name);
175
- case "int":
176
- return pgCore.integer(column.name);
177
- case "float":
178
- return pgCore.decimal(column.name);
179
- case "datetime":
180
- return pgCore.date(column.name);
181
- case "multiple":
182
- case "object":
183
- case "vector":
184
- case "file[]":
185
- case "file":
186
- case "json":
187
- throw new Error(`Unsupported column type: ${column.type}`);
188
- default:
189
- return exhaustiveCheck(column.type);
190
- }
191
- }
192
- function buildColumn(column) {
193
- let type = buildColumnType(column);
194
- if (column.notNull) {
195
- type = type.notNull();
196
- }
197
- if (column.unique) {
198
- type = type.unique();
199
- }
200
- return type;
201
- }
202
- function buildTable(schema) {
203
- const columns = schema.columns.map((column) => [column.name, buildColumn(column)]);
204
- const definition = { id: pgCore.text("id"), ...Object.fromEntries(columns) };
205
- return pgCore.pgTable(schema.name, definition);
206
- }
207
- function buildModels(tables) {
208
- const entries = tables.map((table) => [table.name, buildTable(table)]);
209
- return Object.fromEntries(entries);
210
- }
211
-
212
151
  exports.XataPreparedQuery = XataPreparedQuery;
213
152
  exports.XataSession = XataSession;
214
- exports.buildModels = buildModels;
215
153
  exports.drizzle = drizzle;
216
154
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils.ts","../src/session.ts","../src/driver.ts","../src/generate.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, getTableName, is } from 'drizzle-orm';\n\ntype SelectedFieldsOrdered<TColumn extends Column> = {\n path: string[];\n field: TColumn | SQL | SQL.Aliased;\n}[];\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field as any).sql.decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n\nexport const exhaustiveCheck = (x: never): never => {\n throw new Error(`Unhandled discriminated union member: ${x}`);\n};\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders\n} from 'drizzle-orm';\nimport {\n PgDialect,\n PgSession,\n PgTransactionConfig,\n PreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT,\n SelectedFieldsOrdered\n} from 'drizzle-orm/pg-core';\nimport { XataClient } from './driver';\nimport { mapResultRow } from './utils';\n\ntype QueryResult<T = Record<string, unknown>> = {\n records: T[];\n warning?: string;\n};\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PreparedQuery<T> {\n static readonly [entityKind]: string = 'VercelPgPreparedQuery';\n\n private query: {\n name: string | undefined;\n statement: string;\n };\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super();\n\n this.query = {\n name,\n statement: queryString\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql<Record<string, unknown>>({\n statement: this.query.statement,\n params\n });\n\n // FIXME: This is a hack, we should be able to get the fields from the query but SELECT * fails\n const fields =\n this.fields ??\n Object.keys(records[0]!).map(\n (key) =>\n ({\n path: [key],\n field: {\n sql: {\n decoder: {\n mapFromDriverValue: (value: unknown) => value\n }\n }\n }\n } as any)\n );\n\n const rows = records.map((record) => fields.map((field) => record[field.path.join('.')]));\n\n if (this.customResultMapper) {\n return this.customResultMapper(rows);\n }\n\n return rows.map((row) => mapResultRow<T['execute']>(fields, row, undefined));\n }\n\n async all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n\n async values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'VercelPgSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PreparedQuery<T> {\n return new XataPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.sql({ statement: query, params });\n }\n\n async queryObjects<T extends Record<string, unknown>>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return this.client.sql({ statement: query, params });\n }\n\n override async transaction<T>(\n _transaction: (tx: any) => Promise<T>,\n _config?: PgTransactionConfig | undefined\n ): Promise<T> {\n throw new Error('Transactions are not supported');\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], Record<string, unknown>>[]>;\n}\n","import { SQLPluginResult } from '@xata.io/client';\nimport {\n DefaultLogger,\n DrizzleConfig,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\nimport { XataQueryResultHKT, XataSession } from './session';\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport type XataClient = {\n sql: SQLPluginResult;\n};\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const session = new XataSession(client, dialect, schema, { logger });\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n","import { BaseSchema, Schemas } from '@xata.io/client';\nimport { boolean, date, decimal, integer, pgTable, text } from 'drizzle-orm/pg-core';\nimport { exhaustiveCheck } from './utils';\n\nfunction buildColumnType(column: Schemas.Column) {\n switch (column.type) {\n case 'string':\n case 'text':\n case 'email':\n case 'link':\n return text(column.name);\n case 'bool':\n return boolean(column.name);\n case 'int':\n return integer(column.name);\n case 'float':\n return decimal(column.name);\n case 'datetime':\n return date(column.name);\n case 'multiple':\n case 'object':\n case 'vector':\n case 'file[]':\n case 'file':\n case 'json':\n throw new Error(`Unsupported column type: ${column.type}`);\n default:\n return exhaustiveCheck(column.type);\n }\n}\n\nfunction buildColumn(column: Schemas.Column) {\n let type = buildColumnType(column);\n\n if (column.notNull) {\n type = type.notNull();\n }\n\n if (column.unique) {\n type = type.unique();\n }\n\n return type;\n}\n\nfunction buildTable(schema: Schemas.Table) {\n const columns = schema.columns.map((column) => [column.name, buildColumn(column)]);\n const definition = { id: text('id'), ...Object.fromEntries(columns) };\n return pgTable(schema.name, definition);\n}\n\nexport type DrizzleModels<T extends readonly BaseSchema[]> = T extends never[]\n ? Record<string, Record<string, any>>\n : T extends readonly unknown[]\n ? T[number] extends { name: string; columns: readonly unknown[] }\n ? {\n [K in T[number]['name']]: ReturnType<typeof buildTable>;\n }\n : never\n : never;\n\nexport function buildModels<T extends readonly BaseSchema[]>(tables: T): DrizzleModels<T> {\n const entries = tables.map((table) => [table.name, buildTable(table as Schemas.Table)]);\n return Object.fromEntries(entries);\n}\n"],"names":["result","is","Column","SQL","getTableName","PreparedQuery","fillPlaceholders","entityKind","PgSession","NoopLogger","PgDialect","DefaultLogger","extractTablesRelationalConfig","createTableRelationsHelpers","PgDatabase","text","boolean","integer","decimal","date","pgTable"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils.ts","../src/session.ts","../src/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, getTableName, is } from 'drizzle-orm';\n\ntype SelectedFieldsOrdered<TColumn extends Column> = {\n path: string[];\n field: TColumn | SQL | SQL.Aliased;\n}[];\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field as any).sql.decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders\n} from 'drizzle-orm';\nimport {\n PgDialect,\n PgSession,\n PgTransactionConfig,\n PreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT,\n SelectedFieldsOrdered\n} from 'drizzle-orm/pg-core';\nimport { XataClient } from './driver';\nimport { mapResultRow } from './utils';\n\ntype QueryResult<T = Record<string, unknown>> = {\n records: T[];\n warning?: string;\n};\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PreparedQuery<T> {\n static readonly [entityKind]: string = 'VercelPgPreparedQuery';\n\n private query: {\n name: string | undefined;\n statement: string;\n };\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super();\n\n this.query = {\n name,\n statement: queryString\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql<Record<string, unknown>>({\n statement: this.query.statement,\n params\n });\n\n const rows = records.map((record) => this.fields!.map((field) => record[field.path.join('.')]));\n\n if (this.customResultMapper) {\n return this.customResultMapper(rows);\n }\n\n return rows.map((row) => mapResultRow<T['execute']>(this.fields!, row, undefined));\n }\n\n async all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n\n async values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'VercelPgSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PreparedQuery<T> {\n return new XataPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.sql({ statement: query, params });\n }\n\n async queryObjects<T extends Record<string, unknown>>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return this.client.sql({ statement: query, params });\n }\n\n override async transaction<T>(\n _transaction: (tx: any) => Promise<T>,\n _config?: PgTransactionConfig | undefined\n ): Promise<T> {\n throw new Error('Transactions are not supported');\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], Record<string, unknown>>[]>;\n}\n","import { SQLPluginResult } from '@xata.io/client';\nimport {\n DefaultLogger,\n DrizzleConfig,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\nimport { XataQueryResultHKT, XataSession } from './session';\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport type XataClient = {\n sql: SQLPluginResult;\n};\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const session = new XataSession(client, dialect, schema, { logger });\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n"],"names":["result","is","Column","SQL","getTableName","PreparedQuery","fillPlaceholders","entityKind","PgSession","NoopLogger","PgDialect","DefaultLogger","extractTablesRelationalConfig","createTableRelationsHelpers","PgDatabase"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- import { SQLPluginResult, BaseSchema, Schemas } from '@xata.io/client';
2
- import * as drizzle_orm from 'drizzle-orm';
1
+ import { SQLPluginResult } from '@xata.io/client';
3
2
  import { entityKind, Logger, TablesRelationalConfig, RelationalSchemaConfig, Query, Assume, DrizzleConfig } from 'drizzle-orm';
4
- import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
5
3
  import { PreparedQueryConfig, PreparedQuery, SelectedFieldsOrdered, PgSession, PgDialect, PgTransactionConfig, QueryResultHKT, PgDatabase } from 'drizzle-orm/pg-core';
6
4
 
7
5
  type QueryResult<T = Record<string, unknown>> = {
@@ -46,42 +44,4 @@ type XataClient = {
46
44
  };
47
45
  declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: XataClient, config?: DrizzleConfig<TSchema>): XataDatabase<TSchema>;
48
46
 
49
- declare function buildTable(schema: Schemas.Table): drizzle_orm_pg_core.PgTableWithColumns<{
50
- name: string;
51
- schema: undefined;
52
- columns: {
53
- [x: string]: drizzle_orm_pg_core.PgColumn<{
54
- name: any;
55
- tableName: string;
56
- dataType: any;
57
- columnType: any;
58
- data: any;
59
- driverParam: any;
60
- notNull: boolean;
61
- hasDefault: boolean;
62
- enumValues: any;
63
- baseColumn: drizzle_orm.Column<{
64
- name: string;
65
- tableName: string;
66
- dataType: drizzle_orm.ColumnDataType;
67
- columnType: string;
68
- data: unknown;
69
- driverParam: unknown;
70
- notNull: false;
71
- hasDefault: false;
72
- enumValues: string[] | undefined;
73
- baseColumn: never;
74
- }, object, object>;
75
- }, {}, {}>;
76
- };
77
- dialect: "pg";
78
- }>;
79
- type DrizzleModels<T extends readonly BaseSchema[]> = T extends never[] ? Record<string, Record<string, any>> : T extends readonly unknown[] ? T[number] extends {
80
- name: string;
81
- columns: readonly unknown[];
82
- } ? {
83
- [K in T[number]['name']]: ReturnType<typeof buildTable>;
84
- } : never : never;
85
- declare function buildModels<T extends readonly BaseSchema[]>(tables: T): DrizzleModels<T>;
86
-
87
- export { type DrizzleModels, type XataClient, type XataDatabase, XataPreparedQuery, type XataQueryResultHKT, XataSession, type XataSessionOptions, buildModels, drizzle };
47
+ export { type XataClient, type XataDatabase, XataPreparedQuery, type XataQueryResultHKT, XataSession, type XataSessionOptions, drizzle };
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { is, Column, SQL, getTableName, fillPlaceholders, NoopLogger, entityKind, DefaultLogger, extractTablesRelationalConfig, createTableRelationsHelpers } from 'drizzle-orm';
2
- import { PreparedQuery, PgSession, PgDialect, PgDatabase, text, pgTable, date, decimal, integer, boolean } from 'drizzle-orm/pg-core';
2
+ import { PreparedQuery, PgSession, PgDialect, PgDatabase } from 'drizzle-orm/pg-core';
3
3
 
4
4
  function mapResultRow(columns, row, joinsNotNullableMap) {
5
5
  const nullifyMap = {};
@@ -43,9 +43,6 @@ function mapResultRow(columns, row, joinsNotNullableMap) {
43
43
  }
44
44
  return result;
45
45
  }
46
- const exhaustiveCheck = (x) => {
47
- throw new Error(`Unhandled discriminated union member: ${x}`);
48
- };
49
46
 
50
47
  var __defProp = Object.defineProperty;
51
48
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -75,23 +72,11 @@ class XataPreparedQuery extends PreparedQuery {
75
72
  statement: this.query.statement,
76
73
  params
77
74
  });
78
- const fields = this.fields ?? Object.keys(records[0]).map(
79
- (key) => ({
80
- path: [key],
81
- field: {
82
- sql: {
83
- decoder: {
84
- mapFromDriverValue: (value) => value
85
- }
86
- }
87
- }
88
- })
89
- );
90
- const rows = records.map((record) => fields.map((field) => record[field.path.join(".")]));
75
+ const rows = records.map((record) => this.fields.map((field) => record[field.path.join(".")]));
91
76
  if (this.customResultMapper) {
92
77
  return this.customResultMapper(rows);
93
78
  }
94
- return rows.map((row) => mapResultRow(fields, row, void 0));
79
+ return rows.map((row) => mapResultRow(this.fields, row, void 0));
95
80
  }
96
81
  async all(placeholderValues = {}) {
97
82
  const params = fillPlaceholders(this.params, placeholderValues);
@@ -161,51 +146,5 @@ function drizzle(client, config = {}) {
161
146
  return new PgDatabase(dialect, session, schema);
162
147
  }
163
148
 
164
- function buildColumnType(column) {
165
- switch (column.type) {
166
- case "string":
167
- case "text":
168
- case "email":
169
- case "link":
170
- return text(column.name);
171
- case "bool":
172
- return boolean(column.name);
173
- case "int":
174
- return integer(column.name);
175
- case "float":
176
- return decimal(column.name);
177
- case "datetime":
178
- return date(column.name);
179
- case "multiple":
180
- case "object":
181
- case "vector":
182
- case "file[]":
183
- case "file":
184
- case "json":
185
- throw new Error(`Unsupported column type: ${column.type}`);
186
- default:
187
- return exhaustiveCheck(column.type);
188
- }
189
- }
190
- function buildColumn(column) {
191
- let type = buildColumnType(column);
192
- if (column.notNull) {
193
- type = type.notNull();
194
- }
195
- if (column.unique) {
196
- type = type.unique();
197
- }
198
- return type;
199
- }
200
- function buildTable(schema) {
201
- const columns = schema.columns.map((column) => [column.name, buildColumn(column)]);
202
- const definition = { id: text("id"), ...Object.fromEntries(columns) };
203
- return pgTable(schema.name, definition);
204
- }
205
- function buildModels(tables) {
206
- const entries = tables.map((table) => [table.name, buildTable(table)]);
207
- return Object.fromEntries(entries);
208
- }
209
-
210
- export { XataPreparedQuery, XataSession, buildModels, drizzle };
149
+ export { XataPreparedQuery, XataSession, drizzle };
211
150
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/session.ts","../src/driver.ts","../src/generate.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, getTableName, is } from 'drizzle-orm';\n\ntype SelectedFieldsOrdered<TColumn extends Column> = {\n path: string[];\n field: TColumn | SQL | SQL.Aliased;\n}[];\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field as any).sql.decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n\nexport const exhaustiveCheck = (x: never): never => {\n throw new Error(`Unhandled discriminated union member: ${x}`);\n};\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders\n} from 'drizzle-orm';\nimport {\n PgDialect,\n PgSession,\n PgTransactionConfig,\n PreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT,\n SelectedFieldsOrdered\n} from 'drizzle-orm/pg-core';\nimport { XataClient } from './driver';\nimport { mapResultRow } from './utils';\n\ntype QueryResult<T = Record<string, unknown>> = {\n records: T[];\n warning?: string;\n};\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PreparedQuery<T> {\n static readonly [entityKind]: string = 'VercelPgPreparedQuery';\n\n private query: {\n name: string | undefined;\n statement: string;\n };\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super();\n\n this.query = {\n name,\n statement: queryString\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql<Record<string, unknown>>({\n statement: this.query.statement,\n params\n });\n\n // FIXME: This is a hack, we should be able to get the fields from the query but SELECT * fails\n const fields =\n this.fields ??\n Object.keys(records[0]!).map(\n (key) =>\n ({\n path: [key],\n field: {\n sql: {\n decoder: {\n mapFromDriverValue: (value: unknown) => value\n }\n }\n }\n } as any)\n );\n\n const rows = records.map((record) => fields.map((field) => record[field.path.join('.')]));\n\n if (this.customResultMapper) {\n return this.customResultMapper(rows);\n }\n\n return rows.map((row) => mapResultRow<T['execute']>(fields, row, undefined));\n }\n\n async all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n\n async values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'VercelPgSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PreparedQuery<T> {\n return new XataPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.sql({ statement: query, params });\n }\n\n async queryObjects<T extends Record<string, unknown>>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return this.client.sql({ statement: query, params });\n }\n\n override async transaction<T>(\n _transaction: (tx: any) => Promise<T>,\n _config?: PgTransactionConfig | undefined\n ): Promise<T> {\n throw new Error('Transactions are not supported');\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], Record<string, unknown>>[]>;\n}\n","import { SQLPluginResult } from '@xata.io/client';\nimport {\n DefaultLogger,\n DrizzleConfig,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\nimport { XataQueryResultHKT, XataSession } from './session';\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport type XataClient = {\n sql: SQLPluginResult;\n};\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const session = new XataSession(client, dialect, schema, { logger });\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n","import { BaseSchema, Schemas } from '@xata.io/client';\nimport { boolean, date, decimal, integer, pgTable, text } from 'drizzle-orm/pg-core';\nimport { exhaustiveCheck } from './utils';\n\nfunction buildColumnType(column: Schemas.Column) {\n switch (column.type) {\n case 'string':\n case 'text':\n case 'email':\n case 'link':\n return text(column.name);\n case 'bool':\n return boolean(column.name);\n case 'int':\n return integer(column.name);\n case 'float':\n return decimal(column.name);\n case 'datetime':\n return date(column.name);\n case 'multiple':\n case 'object':\n case 'vector':\n case 'file[]':\n case 'file':\n case 'json':\n throw new Error(`Unsupported column type: ${column.type}`);\n default:\n return exhaustiveCheck(column.type);\n }\n}\n\nfunction buildColumn(column: Schemas.Column) {\n let type = buildColumnType(column);\n\n if (column.notNull) {\n type = type.notNull();\n }\n\n if (column.unique) {\n type = type.unique();\n }\n\n return type;\n}\n\nfunction buildTable(schema: Schemas.Table) {\n const columns = schema.columns.map((column) => [column.name, buildColumn(column)]);\n const definition = { id: text('id'), ...Object.fromEntries(columns) };\n return pgTable(schema.name, definition);\n}\n\nexport type DrizzleModels<T extends readonly BaseSchema[]> = T extends never[]\n ? Record<string, Record<string, any>>\n : T extends readonly unknown[]\n ? T[number] extends { name: string; columns: readonly unknown[] }\n ? {\n [K in T[number]['name']]: ReturnType<typeof buildTable>;\n }\n : never\n : never;\n\nexport function buildModels<T extends readonly BaseSchema[]>(tables: T): DrizzleModels<T> {\n const entries = tables.map((table) => [table.name, buildTable(table as Schemas.Table)]);\n return Object.fromEntries(entries);\n}\n"],"names":["result"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/utils.ts","../src/session.ts","../src/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, getTableName, is } from 'drizzle-orm';\n\ntype SelectedFieldsOrdered<TColumn extends Column> = {\n path: string[];\n field: TColumn | SQL | SQL.Aliased;\n}[];\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field as any).sql.decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders\n} from 'drizzle-orm';\nimport {\n PgDialect,\n PgSession,\n PgTransactionConfig,\n PreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT,\n SelectedFieldsOrdered\n} from 'drizzle-orm/pg-core';\nimport { XataClient } from './driver';\nimport { mapResultRow } from './utils';\n\ntype QueryResult<T = Record<string, unknown>> = {\n records: T[];\n warning?: string;\n};\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PreparedQuery<T> {\n static readonly [entityKind]: string = 'VercelPgPreparedQuery';\n\n private query: {\n name: string | undefined;\n statement: string;\n };\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super();\n\n this.query = {\n name,\n statement: queryString\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql<Record<string, unknown>>({\n statement: this.query.statement,\n params\n });\n\n const rows = records.map((record) => this.fields!.map((field) => record[field.path.join('.')]));\n\n if (this.customResultMapper) {\n return this.customResultMapper(rows);\n }\n\n return rows.map((row) => mapResultRow<T['execute']>(this.fields!, row, undefined));\n }\n\n async all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n\n async values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.query.statement, params);\n\n const { records } = await this.client.sql({\n statement: this.query.statement,\n params\n });\n\n return records;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'VercelPgSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered | undefined,\n name: string | undefined,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PreparedQuery<T> {\n return new XataPreparedQuery(this.client, query.sql, query.params, this.logger, fields, name, customResultMapper);\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.sql({ statement: query, params });\n }\n\n async queryObjects<T extends Record<string, unknown>>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return this.client.sql({ statement: query, params });\n }\n\n override async transaction<T>(\n _transaction: (tx: any) => Promise<T>,\n _config?: PgTransactionConfig | undefined\n ): Promise<T> {\n throw new Error('Transactions are not supported');\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], Record<string, unknown>>[]>;\n}\n","import { SQLPluginResult } from '@xata.io/client';\nimport {\n DefaultLogger,\n DrizzleConfig,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\nimport { XataQueryResultHKT, XataSession } from './session';\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport type XataClient = {\n sql: SQLPluginResult;\n};\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const session = new XataSession(client, dialect, schema, { logger });\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n"],"names":["result"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xata.io/drizzle",
3
- "version": "0.0.0-alpha.v0e4f4d5",
3
+ "version": "0.0.0-alpha.v3ef081e",
4
4
  "description": "",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -18,7 +18,7 @@
18
18
  "url": "https://github.com/xataio/client-ts/issues"
19
19
  },
20
20
  "dependencies": {
21
- "@xata.io/client": "0.0.0-alpha.v0e4f4d5"
21
+ "@xata.io/client": "0.0.0-alpha.v3ef081e"
22
22
  },
23
23
  "devDependencies": {
24
24
  "drizzle-orm": "^0.28.5"