{"version":3,"file":"index.cjs","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  PgQueryResultHKT\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 PgQueryResultHKT {\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","is","Column","SQL","getTableName","_a","_b","_c","PgPreparedQuery","entityKind","fillPlaceholders","PgSession","NoopLogger","PgTransaction","PgDatabase","PgDialect","DefaultLogger","extractTablesRelationalConfig","createTableRelationsHelpers"],"mappings":"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"}