@xata.io/drizzle 0.0.0-alpha.vfc4cc60 → 0.0.0-alpha.vfd1497c798dcffdc9278aed1fb664409be8aa96d
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/.turbo/turbo-build.log +16 -5
- package/CHANGELOG.md +98 -2
- package/dist/index.cjs +94 -116
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +47 -65
- package/dist/index.mjs +92 -116
- package/dist/index.mjs.map +1 -1
- package/dist/pg.cjs +212 -0
- package/dist/pg.cjs.map +1 -0
- package/dist/pg.d.ts +61 -0
- package/dist/pg.mjs +206 -0
- package/dist/pg.mjs.map +1 -0
- package/package.json +11 -4
- package/test/drizzle.test.ts +6295 -0
- package/test/schema.ts +85 -0
package/dist/index.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { is, Column, SQL, getTableName,
|
2
|
-
import {
|
1
|
+
import { is, Column, SQL, getTableName, entityKind, fillPlaceholders, NoopLogger, DefaultLogger, extractTablesRelationalConfig, createTableRelationsHelpers } from 'drizzle-orm';
|
2
|
+
import { PgPreparedQuery, PgSession, PgTransaction, PgDialect, PgDatabase } from 'drizzle-orm/pg-core';
|
3
3
|
|
4
4
|
function mapResultRow(columns, row, joinsNotNullableMap) {
|
5
5
|
const nullifyMap = {};
|
@@ -43,73 +43,47 @@ 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
|
-
var _a, _b;
|
51
|
-
class
|
52
|
-
constructor(client,
|
53
|
-
super();
|
47
|
+
var _a$1, _b$1, _c$1, _d, _e, _f;
|
48
|
+
class XataHttpPreparedQuery extends (_b$1 = PgPreparedQuery, _a$1 = entityKind, _b$1) {
|
49
|
+
constructor(client, query, logger, fields, _isResponseInArrayMode, customResultMapper) {
|
50
|
+
super(query);
|
54
51
|
this.client = client;
|
55
|
-
this.params = params;
|
56
52
|
this.logger = logger;
|
57
53
|
this.fields = fields;
|
54
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
58
55
|
this.customResultMapper = customResultMapper;
|
59
|
-
this.query = {
|
60
|
-
name,
|
61
|
-
statement: queryString
|
62
|
-
};
|
63
56
|
}
|
64
57
|
async execute(placeholderValues = {}) {
|
65
|
-
const params = fillPlaceholders(this.params, placeholderValues);
|
66
|
-
this.logger.logQuery(this.query.
|
67
|
-
const {
|
68
|
-
|
69
|
-
params
|
70
|
-
|
71
|
-
const fields = this.fields ?? Object.keys(records[0]).map(
|
72
|
-
(key) => ({
|
73
|
-
path: [key],
|
74
|
-
field: {
|
75
|
-
sql: {
|
76
|
-
decoder: {
|
77
|
-
mapFromDriverValue: (value) => value
|
78
|
-
}
|
79
|
-
}
|
80
|
-
}
|
81
|
-
})
|
82
|
-
);
|
83
|
-
if (warning)
|
84
|
-
console.warn(warning);
|
85
|
-
const rows = records.map((record) => fields.map((field) => record[field.path.join(".")]));
|
86
|
-
if (this.customResultMapper) {
|
87
|
-
return this.customResultMapper(rows);
|
58
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
59
|
+
this.logger.logQuery(this.query.sql, params);
|
60
|
+
const { fields, client, query, customResultMapper } = this;
|
61
|
+
if (!fields && !customResultMapper) {
|
62
|
+
const result = await this.client.sql({ statement: query.sql, params });
|
63
|
+
return { rowCount: result.records.length, rows: result.records, rowAsArray: false };
|
88
64
|
}
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
});
|
98
|
-
|
99
|
-
}
|
100
|
-
|
101
|
-
|
102
|
-
this.
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
return records;
|
65
|
+
const { rows, warning } = await client.sql({ statement: query.sql, params, responseType: "array" });
|
66
|
+
if (warning) console.warn(warning);
|
67
|
+
const joinsNotNullableMap = this.joinsNotNullableMap;
|
68
|
+
return customResultMapper ? customResultMapper(rows) : rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
69
|
+
}
|
70
|
+
all(placeholderValues = {}) {
|
71
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
72
|
+
this.logger.logQuery(this.query.sql, params);
|
73
|
+
return this.client.sql({ statement: this.query.sql, params, responseType: "array" }).then((result) => result.rows);
|
74
|
+
}
|
75
|
+
values(placeholderValues = {}) {
|
76
|
+
const params = fillPlaceholders(this.query.params, placeholderValues);
|
77
|
+
this.logger.logQuery(this.query.sql, params);
|
78
|
+
return this.client.sql({ statement: this.query.sql, params }).then((result) => result.records);
|
79
|
+
}
|
80
|
+
/** @internal */
|
81
|
+
isResponseInArrayMode() {
|
82
|
+
return this._isResponseInArrayMode;
|
108
83
|
}
|
109
84
|
}
|
110
|
-
_a =
|
111
|
-
|
112
|
-
class XataSession extends PgSession {
|
85
|
+
XataHttpPreparedQuery[_a$1] = "XataHttpPreparedQuery";
|
86
|
+
class XataHttpSession extends (_d = PgSession, _c$1 = entityKind, _d) {
|
113
87
|
constructor(client, dialect, schema, options = {}) {
|
114
88
|
super(dialect);
|
115
89
|
this.client = client;
|
@@ -117,23 +91,66 @@ class XataSession extends PgSession {
|
|
117
91
|
this.options = options;
|
118
92
|
this.logger = options.logger ?? new NoopLogger();
|
119
93
|
}
|
120
|
-
prepareQuery(query, fields, name, customResultMapper) {
|
121
|
-
return new
|
94
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
95
|
+
return new XataHttpPreparedQuery(
|
96
|
+
this.client,
|
97
|
+
query,
|
98
|
+
this.logger,
|
99
|
+
fields,
|
100
|
+
isResponseInArrayMode,
|
101
|
+
customResultMapper
|
102
|
+
);
|
122
103
|
}
|
123
104
|
async query(query, params) {
|
124
105
|
this.logger.logQuery(query, params);
|
125
|
-
|
106
|
+
const result = await this.client.sql({ statement: query, params, responseType: "array" });
|
107
|
+
return {
|
108
|
+
rowCount: result.rows.length,
|
109
|
+
rows: result.rows,
|
110
|
+
rowAsArray: true
|
111
|
+
};
|
126
112
|
}
|
127
113
|
async queryObjects(query, params) {
|
128
|
-
|
114
|
+
const result = await this.client.sql({ statement: query, params });
|
115
|
+
return {
|
116
|
+
rowCount: result.records.length,
|
117
|
+
rows: result.records,
|
118
|
+
rowAsArray: false
|
119
|
+
};
|
120
|
+
}
|
121
|
+
async transaction(_transaction, _config = {}) {
|
122
|
+
throw new Error("No transactions support in Xata Http driver");
|
129
123
|
}
|
130
|
-
|
131
|
-
|
124
|
+
}
|
125
|
+
XataHttpSession[_c$1] = "XataHttpSession";
|
126
|
+
class XataTransaction extends (_f = PgTransaction, _e = entityKind, _f) {
|
127
|
+
async transaction(_transaction) {
|
128
|
+
throw new Error("No transactions support in Xata Http driver");
|
132
129
|
}
|
133
130
|
}
|
134
|
-
|
135
|
-
XataSession[_b] = "VercelPgSession";
|
131
|
+
XataTransaction[_e] = "XataHttpTransaction";
|
136
132
|
|
133
|
+
var _a, _b, _c;
|
134
|
+
_a = entityKind;
|
135
|
+
class XataHttpDriver {
|
136
|
+
constructor(client, dialect, options = {}) {
|
137
|
+
this.client = client;
|
138
|
+
this.dialect = dialect;
|
139
|
+
this.options = options;
|
140
|
+
this.initMappers();
|
141
|
+
}
|
142
|
+
createSession(schema) {
|
143
|
+
return new XataHttpSession(this.client, this.dialect, schema, {
|
144
|
+
logger: this.options.logger
|
145
|
+
});
|
146
|
+
}
|
147
|
+
initMappers() {
|
148
|
+
}
|
149
|
+
}
|
150
|
+
XataHttpDriver[_a] = "XataDriver";
|
151
|
+
class XataHttpDatabase extends (_c = PgDatabase, _b = entityKind, _c) {
|
152
|
+
}
|
153
|
+
XataHttpDatabase[_b] = "XataHttpDatabase";
|
137
154
|
function drizzle(client, config = {}) {
|
138
155
|
const dialect = new PgDialect();
|
139
156
|
let logger;
|
@@ -151,55 +168,14 @@ function drizzle(client, config = {}) {
|
|
151
168
|
tableNamesMap: tablesConfig.tableNamesMap
|
152
169
|
};
|
153
170
|
}
|
154
|
-
const
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
case "text":
|
162
|
-
case "email":
|
163
|
-
case "link":
|
164
|
-
return text(column.name);
|
165
|
-
case "bool":
|
166
|
-
return boolean(column.name);
|
167
|
-
case "int":
|
168
|
-
return integer(column.name);
|
169
|
-
case "float":
|
170
|
-
return decimal(column.name);
|
171
|
-
case "datetime":
|
172
|
-
return date(column.name);
|
173
|
-
case "multiple":
|
174
|
-
case "object":
|
175
|
-
case "vector":
|
176
|
-
case "file[]":
|
177
|
-
case "file":
|
178
|
-
case "json":
|
179
|
-
throw new Error(`Unsupported column type: ${column.type}`);
|
180
|
-
default:
|
181
|
-
return exhaustiveCheck(column.type);
|
182
|
-
}
|
183
|
-
}
|
184
|
-
function buildColumn(column) {
|
185
|
-
let type = buildColumnType(column);
|
186
|
-
if (column.notNull) {
|
187
|
-
type = type.notNull();
|
188
|
-
}
|
189
|
-
if (column.unique) {
|
190
|
-
type = type.unique();
|
191
|
-
}
|
192
|
-
return type;
|
193
|
-
}
|
194
|
-
function buildTable(schema) {
|
195
|
-
const columns = schema.columns.map((column) => [column.name, buildColumn(column)]);
|
196
|
-
const definition = { id: text("id"), ...Object.fromEntries(columns) };
|
197
|
-
return pgTable(schema.name, definition);
|
198
|
-
}
|
199
|
-
function buildModels(tables) {
|
200
|
-
const entries = tables.map((table) => [table.name, buildTable(table)]);
|
201
|
-
return Object.fromEntries(entries);
|
171
|
+
const driver = new XataHttpDriver(client, dialect, { logger });
|
172
|
+
const session = driver.createSession(schema);
|
173
|
+
return new XataHttpDatabase(
|
174
|
+
dialect,
|
175
|
+
session,
|
176
|
+
schema
|
177
|
+
);
|
202
178
|
}
|
203
179
|
|
204
|
-
export {
|
180
|
+
export { XataHttpDatabase, XataHttpDriver, XataHttpPreparedQuery, XataHttpSession, XataTransaction, drizzle };
|
205
181
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
@@ -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 = [], warning } = 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 if (warning) console.warn(warning);\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":";;;AAOgB,SAAA,YAAA,CACd,OACA,EAAA,GAAA,EACA,mBACS,EAAA;AAET,EAAA,MAAM,aAA6C,EAAC,CAAA;AAEpD,EAAM,MAAA,MAAA,GAAS,QAAQ,MAA4B,CAAA,CAACA,SAAQ,EAAE,IAAA,EAAM,KAAM,EAAA,EAAG,WAAgB,KAAA;AAC3F,IAAI,IAAA,OAAA,CAAA;AACJ,IAAI,IAAA,EAAA,CAAG,KAAO,EAAA,MAAM,CAAG,EAAA;AACrB,MAAU,OAAA,GAAA,KAAA,CAAA;AAAA,KACD,MAAA,IAAA,EAAA,CAAG,KAAO,EAAA,GAAG,CAAG,EAAA;AACzB,MAAA,OAAA,GAAW,KAAc,CAAA,OAAA,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,OAAA,GAAW,MAAc,GAAI,CAAA,OAAA,CAAA;AAAA,KAC/B;AACA,IAAA,IAAI,IAAOA,GAAAA,OAAAA,CAAAA;AACX,IAAA,KAAA,MAAW,CAAC,cAAgB,EAAA,SAAS,CAAK,IAAA,IAAA,CAAK,SAAW,EAAA;AACxD,MAAI,IAAA,cAAA,GAAiB,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AACpC,QAAI,IAAA,EAAE,aAAa,IAAO,CAAA,EAAA;AACxB,UAAK,IAAA,CAAA,SAAS,IAAI,EAAC,CAAA;AAAA,SACrB;AACA,QAAA,IAAA,GAAO,KAAK,SAAS,CAAA,CAAA;AAAA,OAChB,MAAA;AACL,QAAM,MAAA,QAAA,GAAW,IAAI,WAAW,CAAA,CAAA;AAChC,QAAM,MAAA,KAAA,GAAS,KAAK,SAAS,CAAA,GAAI,aAAa,IAAO,GAAA,IAAA,GAAO,OAAQ,CAAA,kBAAA,CAAmB,QAAQ,CAAA,CAAA;AAE/F,QAAA,IAAI,uBAAuB,EAAG,CAAA,KAAA,EAAO,MAAM,CAAK,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACjE,UAAM,MAAA,UAAA,GAAa,KAAK,CAAC,CAAA,CAAA;AACzB,UAAI,IAAA,EAAE,cAAc,UAAa,CAAA,EAAA;AAC/B,YAAA,UAAA,CAAW,UAAU,CAAI,GAAA,KAAA,KAAU,OAAO,YAAa,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA,KAAA,CAAA;AAAA,WAEtE,MAAA,IAAA,OAAO,UAAW,CAAA,UAAU,CAAM,KAAA,QAAA,IAClC,UAAW,CAAA,UAAU,CAAM,KAAA,YAAA,CAAa,KAAM,CAAA,KAAK,CACnD,EAAA;AACA,YAAA,UAAA,CAAW,UAAU,CAAI,GAAA,KAAA,CAAA;AAAA,WAC3B;AAAA,SACF;AAAA,OACF;AAAA,KACF;AACA,IAAOA,OAAAA,OAAAA,CAAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AAGL,EAAA,IAAI,uBAAuB,MAAO,CAAA,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAG,EAAA;AAC7D,IAAA,KAAA,MAAW,CAAC,UAAY,EAAA,SAAS,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AAChE,MAAA,IAAI,OAAO,SAAc,KAAA,QAAA,IAAY,CAAC,mBAAA,CAAoB,SAAS,CAAG,EAAA;AACpE,QAAA,MAAA,CAAO,UAAU,CAAI,GAAA,IAAA,CAAA;AAAA,OACvB;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEa,MAAA,eAAA,GAAkB,CAAC,CAAoB,KAAA;AAClD,EAAA,MAAM,IAAI,KAAA,CAAM,CAAyC,sCAAA,EAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AAC9D,CAAA;;ACjEA,IAAA,EAAA,EAAA,EAAA,CAAA;AA2BO,MAAM,0BAAyD,aAAiB,CAAA;AAAA,EAQrF,YACU,MACR,EAAA,WAAA,EACQ,QACA,MACA,EAAA,MAAA,EACR,MACQ,kBACR,EAAA;AACA,IAAM,KAAA,EAAA,CAAA;AARE,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEA,IAAA,IAAA,CAAA,kBAAA,GAAA,kBAAA,CAAA;AAIR,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,IAAA;AAAA,MACA,SAAW,EAAA,WAAA;AAAA,KACb,CAAA;AAAA,GACF;AAAA,EAEA,MAAM,OAAA,CAAQ,iBAAyD,GAAA,EAA2B,EAAA;AAChG,IAAA,MAAM,MAAS,GAAA,gBAAA,CAAiB,IAAK,CAAA,MAAA,EAAQ,iBAAiB,CAAA,CAAA;AAE9D,IAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA,CAAM,WAAW,MAAM,CAAA,CAAA;AAEjD,IAAM,MAAA,EAAE,UAAU,EAAC,EAAG,SAAY,GAAA,MAAM,IAAK,CAAA,MAAA,CAAO,GAA6B,CAAA;AAAA,MAC/E,SAAA,EAAW,KAAK,KAAM,CAAA,SAAA;AAAA,MACtB,MAAA;AAAA,KACD,CAAA,CAAA;AAGD,IAAM,MAAA,MAAA,GACJ,KAAK,MACL,IAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,CAAC,CAAE,CAAE,CAAA,GAAA;AAAA,MACvB,CAAC,GACE,MAAA;AAAA,QACC,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,QACV,KAAO,EAAA;AAAA,UACL,GAAK,EAAA;AAAA,YACH,OAAS,EAAA;AAAA,cACP,kBAAA,EAAoB,CAAC,KAAmB,KAAA,KAAA;AAAA,aAC1C;AAAA,WACF;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACJ,CAAA;AAEF,IAAI,IAAA,OAAA;AAAS,MAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAA;AAEjC,IAAA,MAAM,OAAO,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,KAAW,OAAO,GAAI,CAAA,CAAC,KAAU,KAAA,MAAA,CAAO,MAAM,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA;AAExF,IAAA,IAAI,KAAK,kBAAoB,EAAA;AAC3B,MAAO,OAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA,CAAA;AAAA,KACrC;AAEA,IAAO,OAAA,IAAA,CAAK,IAAI,CAAC,GAAA,KAAQ,aAA2B,MAAQ,EAAA,GAAA,EAAK,MAAS,CAAC,CAAA,CAAA;AAAA,GAC7E;AAAA,EAEA,MAAM,GAAA,CAAI,iBAAyD,GAAA,EAAuB,EAAA;AACxF,IAAA,MAAM,MAAS,GAAA,gBAAA,CAAiB,IAAK,CAAA,MAAA,EAAQ,iBAAiB,CAAA,CAAA;AAC9D,IAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA,CAAM,WAAW,MAAM,CAAA,CAAA;AAEjD,IAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,MAAM,IAAA,CAAK,OAAO,GAAI,CAAA;AAAA,MACxC,SAAA,EAAW,KAAK,KAAM,CAAA,SAAA;AAAA,MACtB,MAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AAAA,EAEA,MAAM,MAAA,CAAO,iBAAyD,GAAA,EAA0B,EAAA;AAC9F,IAAA,MAAM,MAAS,GAAA,gBAAA,CAAiB,IAAK,CAAA,MAAA,EAAQ,iBAAiB,CAAA,CAAA;AAC9D,IAAA,IAAA,CAAK,MAAO,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA,CAAM,WAAW,MAAM,CAAA,CAAA;AAEjD,IAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,MAAM,IAAA,CAAK,OAAO,GAAI,CAAA;AAAA,MACxC,SAAA,EAAW,KAAK,KAAM,CAAA,SAAA;AAAA,MACtB,MAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AACF,CAAA;AArFmB,EAAA,GAAA,UAAA,CAAA;AADN,iBAAA,CACM,EAAsB,CAAA,GAAA,uBAAA,CAAA;AA2FlC,MAAM,oBAGH,SAAoD,CAAA;AAAA,EAK5D,YACU,MACR,EAAA,OAAA,EACQ,MACA,EAAA,OAAA,GAA8B,EACtC,EAAA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AALL,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAEA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AAGR,IAAA,IAAA,CAAK,MAAS,GAAA,OAAA,CAAQ,MAAU,IAAA,IAAI,UAAW,EAAA,CAAA;AAAA,GACjD;AAAA,EAEA,YACE,CAAA,KAAA,EACA,MACA,EAAA,IAAA,EACA,kBACkB,EAAA;AAClB,IAAA,OAAO,IAAI,iBAAA,CAAkB,IAAK,CAAA,MAAA,EAAQ,KAAM,CAAA,GAAA,EAAK,KAAM,CAAA,MAAA,EAAQ,IAAK,CAAA,MAAA,EAAQ,MAAQ,EAAA,IAAA,EAAM,kBAAkB,CAAA,CAAA;AAAA,GAClH;AAAA,EAEA,MAAM,KAAM,CAAA,KAAA,EAAe,MAAyC,EAAA;AAClE,IAAK,IAAA,CAAA,MAAA,CAAO,QAAS,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAClC,IAAO,OAAA,MAAM,KAAK,MAAO,CAAA,GAAA,CAAI,EAAE,SAAW,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,GAC3D;AAAA,EAEA,MAAM,YAAgD,CAAA,KAAA,EAAe,MAA4C,EAAA;AAC/G,IAAA,OAAO,KAAK,MAAO,CAAA,GAAA,CAAI,EAAE,SAAW,EAAA,KAAA,EAAO,QAAQ,CAAA,CAAA;AAAA,GACrD;AAAA,EAEA,MAAe,WACb,CAAA,YAAA,EACA,OACY,EAAA;AACZ,IAAM,MAAA,IAAI,MAAM,gCAAgC,CAAA,CAAA;AAAA,GAClD;AACF,CAAA;AAtCmB,EAAA,GAAA,UAAA,CAAA;AAJN,WAAA,CAIM,EAAsB,CAAA,GAAA,iBAAA;;ACtGlC,SAAS,OACd,CAAA,MAAA,EACA,MAAiC,GAAA,EACV,EAAA;AACvB,EAAM,MAAA,OAAA,GAAU,IAAI,SAAU,EAAA,CAAA;AAC9B,EAAI,IAAA,MAAA,CAAA;AACJ,EAAI,IAAA,MAAA,CAAO,WAAW,IAAM,EAAA;AAC1B,IAAA,MAAA,GAAS,IAAI,aAAc,EAAA,CAAA;AAAA,GAC7B,MAAA,IAAW,MAAO,CAAA,MAAA,KAAW,KAAO,EAAA;AAClC,IAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAA;AAAA,GAClB;AAEA,EAAI,IAAA,MAAA,CAAA;AACJ,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAA,MAAM,YAAe,GAAA,6BAAA,CAA8B,MAAO,CAAA,MAAA,EAAQ,2BAA2B,CAAA,CAAA;AAC7F,IAAS,MAAA,GAAA;AAAA,MACP,YAAY,MAAO,CAAA,MAAA;AAAA,MACnB,QAAQ,YAAa,CAAA,MAAA;AAAA,MACrB,eAAe,YAAa,CAAA,aAAA;AAAA,KAC9B,CAAA;AAAA,GACF;AAEA,EAAM,MAAA,OAAA,GAAU,IAAI,WAAY,CAAA,MAAA,EAAQ,SAAS,MAAQ,EAAA,EAAE,QAAQ,CAAA,CAAA;AACnE,EAAA,OAAO,IAAI,UAAA,CAAW,OAAS,EAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAChD;;ACzCA,SAAS,gBAAgB,MAAwB,EAAA;AAC/C,EAAA,QAAQ,OAAO,IAAM;AAAA,IACnB,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,OAAA,CAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAO,OAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAAA,IACzB,KAAK,MAAA;AACH,MAAO,OAAA,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAA;AAAA,IAC5B,KAAK,KAAA;AACH,MAAO,OAAA,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAO,OAAA,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAA;AAAA,IAC5B,KAAK,UAAA;AACH,MAAO,OAAA,IAAA,CAAK,OAAO,IAAI,CAAA,CAAA;AAAA,IACzB,KAAK,UAAA,CAAA;AAAA,IACL,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,QAAA,CAAA;AAAA,IACL,KAAK,MAAA,CAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,MAAM,IAAI,KAAA,CAAM,CAA4B,yBAAA,EAAA,MAAA,CAAO,IAAI,CAAE,CAAA,CAAA,CAAA;AAAA,IAC3D;AACE,MAAO,OAAA,eAAA,CAAgB,OAAO,IAAI,CAAA,CAAA;AAAA,GACtC;AACF,CAAA;AAEA,SAAS,YAAY,MAAwB,EAAA;AAC3C,EAAI,IAAA,IAAA,GAAO,gBAAgB,MAAM,CAAA,CAAA;AAEjC,EAAA,IAAI,OAAO,OAAS,EAAA;AAClB,IAAA,IAAA,GAAO,KAAK,OAAQ,EAAA,CAAA;AAAA,GACtB;AAEA,EAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,IAAA,IAAA,GAAO,KAAK,MAAO,EAAA,CAAA;AAAA,GACrB;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,SAAS,WAAW,MAAuB,EAAA;AACzC,EAAA,MAAM,OAAU,GAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,IAAM,EAAA,WAAA,CAAY,MAAM,CAAC,CAAC,CAAA,CAAA;AACjF,EAAM,MAAA,UAAA,GAAa,EAAE,EAAA,EAAI,IAAK,CAAA,IAAI,GAAG,GAAG,MAAA,CAAO,WAAY,CAAA,OAAO,CAAE,EAAA,CAAA;AACpE,EAAO,OAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,EAAM,UAAU,CAAA,CAAA;AACxC,CAAA;AAYO,SAAS,YAA6C,MAA6B,EAAA;AACxF,EAAM,MAAA,OAAA,GAAU,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,IAAM,EAAA,UAAA,CAAW,KAAsB,CAAC,CAAC,CAAA,CAAA;AACtF,EAAO,OAAA,MAAA,CAAO,YAAY,OAAO,CAAA,CAAA;AACnC;;;;"}
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/shared/utils.ts","../src/http/session.ts","../src/http/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, SelectedFieldsOrdered, getTableName, is } from 'drizzle-orm';\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.sql as any).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 { SQLPluginResult, SQLQueryResult } from '@xata.io/client';\nimport {\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n SelectedFieldsOrdered,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders\n} from 'drizzle-orm';\nimport {\n PgColumn,\n PgDialect,\n PgSession,\n PgTransaction,\n PgTransactionConfig,\n PgPreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT\n} from 'drizzle-orm/pg-core';\nimport { mapResultRow } from '../shared/utils';\n\nexport type XataHttpClient = {\n sql: SQLPluginResult;\n};\n\nexport interface QueryResults<ArrayMode extends 'json' | 'array'> {\n rowCount: number;\n rows: ArrayMode extends 'array' ? any[][] : Record<string, any>[];\n rowAsArray: ArrayMode extends 'array' ? true : false;\n}\n\nexport class XataHttpPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n static readonly [entityKind]: string = 'XataHttpPreparedQuery';\n\n constructor(\n private client: XataHttpClient,\n query: Query,\n private logger: Logger,\n private fields: SelectedFieldsOrdered<PgColumn> | undefined,\n private _isResponseInArrayMode: boolean,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super(query);\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.query.params, placeholderValues);\n\n this.logger.logQuery(this.query.sql, params);\n\n const { fields, client, query, customResultMapper } = this;\n\n if (!fields && !customResultMapper) {\n const result = await this.client.sql<Record<string, any>>({ statement: query.sql, params });\n return { rowCount: result.records.length, rows: result.records, rowAsArray: false };\n }\n\n const { rows, warning } = await client.sql({ statement: query.sql, params, responseType: 'array' });\n if (warning) console.warn(warning);\n\n // @ts-expect-error joinsNotNullableMap is internal\n const joinsNotNullableMap = this.joinsNotNullableMap;\n\n return customResultMapper\n ? customResultMapper(rows as unknown[][])\n : rows.map((row) => mapResultRow<T['execute']>(fields!, row as unknown[], joinsNotNullableMap));\n }\n\n all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.query.params, placeholderValues);\n this.logger.logQuery(this.query.sql, params);\n return this.client.sql({ statement: this.query.sql, params, responseType: 'array' }).then((result) => result.rows);\n }\n\n values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.query.params, placeholderValues);\n this.logger.logQuery(this.query.sql, params);\n return this.client.sql({ statement: this.query.sql, params }).then((result) => result.records);\n }\n\n /** @internal */\n isResponseInArrayMode() {\n return this._isResponseInArrayMode;\n }\n}\n\nexport interface XataHttpSessionOptions {\n logger?: Logger;\n}\n\nexport class XataHttpSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataHttpQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataHttpSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataHttpClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataHttpSessionOptions = {}\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<PgColumn> | undefined,\n name: string | undefined,\n isResponseInArrayMode: boolean,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PgPreparedQuery<T> {\n return new XataHttpPreparedQuery(\n this.client,\n query,\n this.logger,\n fields,\n isResponseInArrayMode,\n customResultMapper\n );\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResults<'array'>> {\n this.logger.logQuery(query, params);\n const result = await this.client.sql({ statement: query, params, responseType: 'array' });\n\n return {\n rowCount: result.rows.length,\n rows: result.rows,\n rowAsArray: true\n };\n }\n\n async queryObjects(query: string, params: unknown[]): Promise<QueryResults<'json'>> {\n const result = await this.client.sql<Record<string, any>>({ statement: query, params });\n\n return {\n rowCount: result.records.length,\n rows: result.records,\n rowAsArray: false\n };\n }\n\n override async transaction<T>(\n _transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>,\n _config: PgTransactionConfig = {}\n ): Promise<T> {\n throw new Error('No transactions support in Xata Http driver');\n }\n}\n\nexport class XataTransaction<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgTransaction<XataHttpQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataHttpTransaction';\n\n override async transaction<T>(_transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n throw new Error('No transactions support in Xata Http driver');\n }\n}\n\nexport interface XataHttpQueryResultHKT extends QueryResultHKT {\n type: SQLQueryResult<this['row']>;\n}\n","import {\n DefaultLogger,\n DrizzleConfig,\n ExtractTablesWithRelations,\n Logger,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n entityKind,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport { XataHttpSession, type XataHttpClient, type XataHttpQueryResultHKT } from './session.js';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\n\nexport interface XataDriverOptions {\n logger?: Logger;\n}\n\nexport class XataHttpDriver {\n static readonly [entityKind]: string = 'XataDriver';\n\n constructor(private client: XataHttpClient, private dialect: PgDialect, private options: XataDriverOptions = {}) {\n this.initMappers();\n }\n\n createSession(\n schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined\n ): XataHttpSession<Record<string, unknown>, TablesRelationalConfig> {\n return new XataHttpSession(this.client, this.dialect, schema, {\n logger: this.options.logger\n });\n }\n\n initMappers() {\n // TODO: Add custom type parsers\n }\n}\n\nexport class XataHttpDatabase<TSchema extends Record<string, unknown> = Record<string, never>> extends PgDatabase<\n XataHttpQueryResultHKT,\n TSchema\n> {\n static readonly [entityKind]: string = 'XataHttpDatabase';\n\n /** @internal */\n declare readonly session: XataHttpSession<TSchema, ExtractTablesWithRelations<TSchema>>;\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataHttpClient,\n config: DrizzleConfig<TSchema> = {}\n): XataHttpDatabase<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 driver = new XataHttpDriver(client, dialect, { logger });\n const session = driver.createSession(schema);\n\n return new XataHttpDatabase(\n dialect,\n session,\n schema as RelationalSchemaConfig<ExtractTablesWithRelations<TSchema>> | undefined\n );\n}\n"],"names":["result","_a","_b","_c"],"mappings":"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"}
|
package/dist/pg.cjs
ADDED
@@ -0,0 +1,212 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var drizzleOrm = require('drizzle-orm');
|
4
|
+
var pgCore = require('drizzle-orm/pg-core');
|
5
|
+
var pg = require('pg');
|
6
|
+
|
7
|
+
function mapResultRow(columns, row, joinsNotNullableMap) {
|
8
|
+
const nullifyMap = {};
|
9
|
+
const result = columns.reduce((result2, { path, field }, columnIndex) => {
|
10
|
+
let decoder;
|
11
|
+
if (drizzleOrm.is(field, drizzleOrm.Column)) {
|
12
|
+
decoder = field;
|
13
|
+
} else if (drizzleOrm.is(field, drizzleOrm.SQL)) {
|
14
|
+
decoder = field.decoder;
|
15
|
+
} else {
|
16
|
+
decoder = field.sql.decoder;
|
17
|
+
}
|
18
|
+
let node = result2;
|
19
|
+
for (const [pathChunkIndex, pathChunk] of path.entries()) {
|
20
|
+
if (pathChunkIndex < path.length - 1) {
|
21
|
+
if (!(pathChunk in node)) {
|
22
|
+
node[pathChunk] = {};
|
23
|
+
}
|
24
|
+
node = node[pathChunk];
|
25
|
+
} else {
|
26
|
+
const rawValue = row[columnIndex];
|
27
|
+
const value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);
|
28
|
+
if (joinsNotNullableMap && drizzleOrm.is(field, drizzleOrm.Column) && path.length === 2) {
|
29
|
+
const objectName = path[0];
|
30
|
+
if (!(objectName in nullifyMap)) {
|
31
|
+
nullifyMap[objectName] = value === null ? drizzleOrm.getTableName(field.table) : false;
|
32
|
+
} else if (typeof nullifyMap[objectName] === "string" && nullifyMap[objectName] !== drizzleOrm.getTableName(field.table)) {
|
33
|
+
nullifyMap[objectName] = false;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
return result2;
|
39
|
+
}, {});
|
40
|
+
if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {
|
41
|
+
for (const [objectName, tableName] of Object.entries(nullifyMap)) {
|
42
|
+
if (typeof tableName === "string" && !joinsNotNullableMap[tableName]) {
|
43
|
+
result[objectName] = null;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
return result;
|
48
|
+
}
|
49
|
+
|
50
|
+
var _a$1, _b, _c, _d, _e, _f;
|
51
|
+
class XataPreparedQuery extends (_b = pgCore.PgPreparedQuery, _a$1 = drizzleOrm.entityKind, _b) {
|
52
|
+
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
53
|
+
super({ sql: queryString, params });
|
54
|
+
this.client = client;
|
55
|
+
this.params = params;
|
56
|
+
this.logger = logger;
|
57
|
+
this.fields = fields;
|
58
|
+
this._isResponseInArrayMode = _isResponseInArrayMode;
|
59
|
+
this.customResultMapper = customResultMapper;
|
60
|
+
this.rawQueryConfig = {
|
61
|
+
name,
|
62
|
+
text: queryString
|
63
|
+
};
|
64
|
+
this.queryConfig = {
|
65
|
+
name,
|
66
|
+
text: queryString,
|
67
|
+
rowMode: "array"
|
68
|
+
};
|
69
|
+
}
|
70
|
+
async execute(placeholderValues = {}) {
|
71
|
+
const params = drizzleOrm.fillPlaceholders(this.params, placeholderValues);
|
72
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
73
|
+
const {
|
74
|
+
fields,
|
75
|
+
client,
|
76
|
+
rawQueryConfig: rawQuery,
|
77
|
+
queryConfig: query,
|
78
|
+
// @ts-expect-error joinsNotNullableMap is internal
|
79
|
+
joinsNotNullableMap,
|
80
|
+
customResultMapper
|
81
|
+
} = this;
|
82
|
+
if (!fields && !customResultMapper) {
|
83
|
+
return await client.query(rawQuery, params);
|
84
|
+
}
|
85
|
+
const result = await client.query(query, params);
|
86
|
+
return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
87
|
+
}
|
88
|
+
all(placeholderValues = {}) {
|
89
|
+
const params = drizzleOrm.fillPlaceholders(this.params, placeholderValues);
|
90
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
91
|
+
return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);
|
92
|
+
}
|
93
|
+
values(placeholderValues = {}) {
|
94
|
+
const params = drizzleOrm.fillPlaceholders(this.params, placeholderValues);
|
95
|
+
this.logger.logQuery(this.rawQueryConfig.text, params);
|
96
|
+
return this.client.query(this.queryConfig, params).then((result) => result.rows);
|
97
|
+
}
|
98
|
+
/** @internal */
|
99
|
+
isResponseInArrayMode() {
|
100
|
+
return this._isResponseInArrayMode;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
XataPreparedQuery[_a$1] = "XataPreparedQuery";
|
104
|
+
const _XataSession = class _XataSession extends (_d = pgCore.PgSession, _c = drizzleOrm.entityKind, _d) {
|
105
|
+
constructor(client, dialect, schema, options = {}) {
|
106
|
+
super(dialect);
|
107
|
+
this.client = client;
|
108
|
+
this.schema = schema;
|
109
|
+
this.options = options;
|
110
|
+
this.logger = options.logger ?? new drizzleOrm.NoopLogger();
|
111
|
+
}
|
112
|
+
prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper) {
|
113
|
+
return new XataPreparedQuery(
|
114
|
+
this.client,
|
115
|
+
query.sql,
|
116
|
+
query.params,
|
117
|
+
this.logger,
|
118
|
+
fields,
|
119
|
+
name,
|
120
|
+
isResponseInArrayMode,
|
121
|
+
customResultMapper
|
122
|
+
);
|
123
|
+
}
|
124
|
+
async query(query, params) {
|
125
|
+
this.logger.logQuery(query, params);
|
126
|
+
return await this.client.query({ rowMode: "array", text: query, values: params });
|
127
|
+
}
|
128
|
+
async queryObjects(query, params) {
|
129
|
+
return await this.client.query(query, params);
|
130
|
+
}
|
131
|
+
async transaction(transaction, config = {}) {
|
132
|
+
const session = this.client instanceof pg.Pool ? new _XataSession(await this.client.connect(), this.dialect, this.schema, this.options) : this;
|
133
|
+
const tx = new XataTransaction(this.dialect, session, this.schema);
|
134
|
+
await tx.execute(drizzleOrm.sql`begin ${tx.getTransactionConfigSQL(config)}`);
|
135
|
+
try {
|
136
|
+
const result = await transaction(tx);
|
137
|
+
await tx.execute(drizzleOrm.sql`commit`);
|
138
|
+
return result;
|
139
|
+
} catch (error) {
|
140
|
+
await tx.execute(drizzleOrm.sql`rollback`);
|
141
|
+
throw error;
|
142
|
+
} finally {
|
143
|
+
if (this.client instanceof pg.Pool) {
|
144
|
+
session.client.release();
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
};
|
149
|
+
_XataSession[_c] = "XataSession";
|
150
|
+
let XataSession = _XataSession;
|
151
|
+
const _XataTransaction = class _XataTransaction extends (_f = pgCore.PgTransaction, _e = drizzleOrm.entityKind, _f) {
|
152
|
+
async transaction(transaction) {
|
153
|
+
const savepointName = `sp${this.nestedIndex + 1}`;
|
154
|
+
const tx = new _XataTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
155
|
+
await tx.execute(drizzleOrm.sql.raw(`savepoint ${savepointName}`));
|
156
|
+
try {
|
157
|
+
const result = await transaction(tx);
|
158
|
+
await tx.execute(drizzleOrm.sql.raw(`release savepoint ${savepointName}`));
|
159
|
+
return result;
|
160
|
+
} catch (e) {
|
161
|
+
await tx.execute(drizzleOrm.sql.raw(`rollback to savepoint ${savepointName}`));
|
162
|
+
throw e;
|
163
|
+
}
|
164
|
+
}
|
165
|
+
};
|
166
|
+
_XataTransaction[_e] = "XataTransaction";
|
167
|
+
let XataTransaction = _XataTransaction;
|
168
|
+
|
169
|
+
var _a;
|
170
|
+
_a = drizzleOrm.entityKind;
|
171
|
+
class XataDriver {
|
172
|
+
constructor(client, dialect, options = {}) {
|
173
|
+
this.client = client;
|
174
|
+
this.dialect = dialect;
|
175
|
+
this.options = options;
|
176
|
+
this.initMappers();
|
177
|
+
}
|
178
|
+
createSession(schema) {
|
179
|
+
return new XataSession(this.client, this.dialect, schema, { logger: this.options.logger });
|
180
|
+
}
|
181
|
+
initMappers() {
|
182
|
+
}
|
183
|
+
}
|
184
|
+
XataDriver[_a] = "XataDriver";
|
185
|
+
function drizzle(client, config = {}) {
|
186
|
+
const dialect = new pgCore.PgDialect();
|
187
|
+
let logger;
|
188
|
+
if (config.logger === true) {
|
189
|
+
logger = new drizzleOrm.DefaultLogger();
|
190
|
+
} else if (config.logger !== false) {
|
191
|
+
logger = config.logger;
|
192
|
+
}
|
193
|
+
let schema;
|
194
|
+
if (config.schema) {
|
195
|
+
const tablesConfig = drizzleOrm.extractTablesRelationalConfig(config.schema, drizzleOrm.createTableRelationsHelpers);
|
196
|
+
schema = {
|
197
|
+
fullSchema: config.schema,
|
198
|
+
schema: tablesConfig.tables,
|
199
|
+
tableNamesMap: tablesConfig.tableNamesMap
|
200
|
+
};
|
201
|
+
}
|
202
|
+
const driver = new XataDriver(client, dialect, { logger });
|
203
|
+
const session = driver.createSession(schema);
|
204
|
+
return new pgCore.PgDatabase(dialect, session, schema);
|
205
|
+
}
|
206
|
+
|
207
|
+
exports.XataDriver = XataDriver;
|
208
|
+
exports.XataPreparedQuery = XataPreparedQuery;
|
209
|
+
exports.XataSession = XataSession;
|
210
|
+
exports.XataTransaction = XataTransaction;
|
211
|
+
exports.drizzle = drizzle;
|
212
|
+
//# sourceMappingURL=pg.cjs.map
|
package/dist/pg.cjs.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pg.cjs","sources":["../src/shared/utils.ts","../src/pg/session.ts","../src/pg/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, SelectedFieldsOrdered, getTableName, is } from 'drizzle-orm';\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.sql as any).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 SelectedFieldsOrdered,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders,\n sql\n} from 'drizzle-orm';\nimport {\n PgColumn,\n PgDialect,\n PgSession,\n PgTransaction,\n PgTransactionConfig,\n PgPreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT\n} from 'drizzle-orm/pg-core';\nimport { Client, Pool, PoolClient, QueryArrayConfig, QueryConfig, QueryResult, QueryResultRow } from 'pg';\nimport { mapResultRow } from '../shared/utils';\n\nexport type XataClient = Pool | PoolClient | Client;\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n static readonly [entityKind]: string = 'XataPreparedQuery';\n\n private rawQueryConfig: QueryConfig;\n private queryConfig: QueryArrayConfig;\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered<PgColumn> | undefined,\n name: string | undefined,\n private _isResponseInArrayMode: boolean,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super({ sql: queryString, params });\n this.rawQueryConfig = {\n name,\n text: queryString\n };\n this.queryConfig = {\n name,\n text: queryString,\n rowMode: 'array'\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.rawQueryConfig.text, params);\n\n const {\n fields,\n client,\n rawQueryConfig: rawQuery,\n queryConfig: query,\n // @ts-expect-error joinsNotNullableMap is internal\n joinsNotNullableMap,\n customResultMapper\n } = this;\n if (!fields && !customResultMapper) {\n return await client.query(rawQuery, params);\n }\n\n const result = await client.query(query, params);\n\n return customResultMapper\n ? customResultMapper(result.rows)\n : result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n }\n\n all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);\n }\n\n values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.queryConfig, params).then((result) => result.rows);\n }\n\n /** @internal */\n isResponseInArrayMode() {\n return this._isResponseInArrayMode;\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 = 'XataSession';\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<PgColumn> | undefined,\n name: string | undefined,\n isResponseInArrayMode: boolean,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PgPreparedQuery<T> {\n return new XataPreparedQuery(\n this.client,\n query.sql,\n query.params,\n this.logger,\n fields,\n name,\n isResponseInArrayMode,\n customResultMapper\n );\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.query({ rowMode: 'array', text: query, values: params });\n }\n\n async queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return await this.client.query<T>(query, params);\n }\n\n override async transaction<T>(\n transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>,\n config: PgTransactionConfig = {}\n ): Promise<T> {\n const session =\n this.client instanceof Pool\n ? new XataSession(await this.client.connect(), this.dialect, this.schema, this.options)\n : this;\n const tx = new XataTransaction<TFullSchema, TSchema>(this.dialect, session, this.schema);\n // @ts-expect-error getTransactionConfigSQL is internal\n await tx.execute(sql`begin ${tx.getTransactionConfigSQL(config)}`);\n try {\n const result = await transaction(tx);\n await tx.execute(sql`commit`);\n return result;\n } catch (error) {\n await tx.execute(sql`rollback`);\n throw error;\n } finally {\n if (this.client instanceof Pool) {\n (session.client as PoolClient).release();\n }\n }\n }\n}\n\nexport class XataTransaction<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgTransaction<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataTransaction';\n\n override async transaction<T>(transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n const savepointName = `sp${this.nestedIndex + 1}`;\n // @ts-expect-error session and dialect are internal\n const tx = new XataTransaction<TFullSchema, TSchema>(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n await tx.execute(sql.raw(`savepoint ${savepointName}`));\n try {\n const result = await transaction(tx);\n await tx.execute(sql.raw(`release savepoint ${savepointName}`));\n return result;\n } catch (e) {\n await tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n throw e;\n }\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n","import {\n DefaultLogger,\n DrizzleConfig,\n Logger,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n entityKind,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport type { XataClient, XataQueryResultHKT } from './session.js';\nimport { XataSession } from './session.js';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\n\nexport interface XataDriverOptions {\n logger?: Logger;\n}\n\nexport class XataDriver {\n static readonly [entityKind]: string = 'XataDriver';\n\n constructor(private client: XataClient, private dialect: PgDialect, private options: XataDriverOptions = {}) {\n this.initMappers();\n }\n\n createSession(\n schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined\n ): XataSession<Record<string, unknown>, TablesRelationalConfig> {\n return new XataSession(this.client, this.dialect, schema, { logger: this.options.logger });\n }\n\n initMappers() {\n // TODO: Add custom type parsers\n }\n}\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\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 driver = new XataDriver(client, dialect, { logger });\n const session = driver.createSession(schema);\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n"],"names":["result","is","Column","SQL","getTableName","_a","PgPreparedQuery","entityKind","fillPlaceholders","PgSession","NoopLogger","Pool","sql","PgTransaction","PgDialect","DefaultLogger","extractTablesRelationalConfig","createTableRelationsHelpers","PgDatabase"],"mappings":"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"}
|
package/dist/pg.d.ts
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
import { entityKind, Logger, SelectedFieldsOrdered, TablesRelationalConfig, RelationalSchemaConfig, Query, Assume, DrizzleConfig } from 'drizzle-orm';
|
2
|
+
import { PreparedQueryConfig, PgPreparedQuery, PgColumn, PgSession, PgDialect, PgTransactionConfig, PgTransaction, QueryResultHKT, PgDatabase } from 'drizzle-orm/pg-core';
|
3
|
+
import { Pool, PoolClient, Client, QueryResult, QueryResultRow } from 'pg';
|
4
|
+
|
5
|
+
type XataClient = Pool | PoolClient | Client;
|
6
|
+
declare class XataPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {
|
7
|
+
private client;
|
8
|
+
private params;
|
9
|
+
private logger;
|
10
|
+
private fields;
|
11
|
+
private _isResponseInArrayMode;
|
12
|
+
private customResultMapper?;
|
13
|
+
static readonly [entityKind]: string;
|
14
|
+
private rawQueryConfig;
|
15
|
+
private queryConfig;
|
16
|
+
constructor(client: XataClient, queryString: string, params: unknown[], logger: Logger, fields: SelectedFieldsOrdered<PgColumn> | undefined, name: string | undefined, _isResponseInArrayMode: boolean, customResultMapper?: ((rows: unknown[][]) => T["execute"]) | undefined);
|
17
|
+
execute(placeholderValues?: Record<string, unknown> | undefined): Promise<T['execute']>;
|
18
|
+
all(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']>;
|
19
|
+
values(placeholderValues?: Record<string, unknown> | undefined): Promise<T['values']>;
|
20
|
+
/** @internal */
|
21
|
+
isResponseInArrayMode(): boolean;
|
22
|
+
}
|
23
|
+
interface XataSessionOptions {
|
24
|
+
logger?: Logger;
|
25
|
+
}
|
26
|
+
declare class XataSession<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {
|
27
|
+
private client;
|
28
|
+
private schema;
|
29
|
+
private options;
|
30
|
+
static readonly [entityKind]: string;
|
31
|
+
private logger;
|
32
|
+
constructor(client: XataClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options?: XataSessionOptions);
|
33
|
+
prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, fields: SelectedFieldsOrdered<PgColumn> | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
|
34
|
+
query(query: string, params: unknown[]): Promise<QueryResult>;
|
35
|
+
queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>>;
|
36
|
+
transaction<T>(transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig): Promise<T>;
|
37
|
+
}
|
38
|
+
declare class XataTransaction<TFullSchema extends Record<string, unknown>, TSchema extends TablesRelationalConfig> extends PgTransaction<XataQueryResultHKT, TFullSchema, TSchema> {
|
39
|
+
static readonly [entityKind]: string;
|
40
|
+
transaction<T>(transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
|
41
|
+
}
|
42
|
+
interface XataQueryResultHKT extends QueryResultHKT {
|
43
|
+
type: QueryResult<Assume<this['row'], QueryResultRow>>;
|
44
|
+
}
|
45
|
+
|
46
|
+
interface XataDriverOptions {
|
47
|
+
logger?: Logger;
|
48
|
+
}
|
49
|
+
declare class XataDriver {
|
50
|
+
private client;
|
51
|
+
private dialect;
|
52
|
+
private options;
|
53
|
+
static readonly [entityKind]: string;
|
54
|
+
constructor(client: XataClient, dialect: PgDialect, options?: XataDriverOptions);
|
55
|
+
createSession(schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined): XataSession<Record<string, unknown>, TablesRelationalConfig>;
|
56
|
+
initMappers(): void;
|
57
|
+
}
|
58
|
+
type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<XataQueryResultHKT, TSchema>;
|
59
|
+
declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: XataClient, config?: DrizzleConfig<TSchema>): XataDatabase<TSchema>;
|
60
|
+
|
61
|
+
export { type XataClient, type XataDatabase, XataDriver, type XataDriverOptions, XataPreparedQuery, type XataQueryResultHKT, XataSession, type XataSessionOptions, XataTransaction, drizzle };
|