{"version":3,"sources":["../src/drizzle.ts","../src/client/types.ts","../src/client/errors.ts","../src/client/parsing.ts","../src/client/query-promise.ts","../src/client/utils.ts","../src/client/index.ts"],"names":["LogLevel","PgError","_PgError","message","__publicField","PG_ERROR_FIELDS","parsePostgresError","err","pgError","field","PgTypeId","isArrayType","typeId","getElementTypeId","arrayTypeId","TypeParser","customTypes","key","val","parsePostgresArray","parseFn","elementTypeId","elementParser","value","arrayString","content","result","inQuotes","inEscape","currentItem","nestLevel","i","char","parseArrayItem","item","processQueryResult","typeParser","arrayMode","fields","rowsData","parsers","colNames","processedRows","row","obj","_a","QueryPromise","executeFn","queryObj","opts","onfulfilled","onrejected","onfinally","promise","isDone","resolvedValue","UnsafeRawSql","sql","encodeBuffersAsBytea","generateUUID","c","toParameterizedQuery","strings","values","query","params","len","createPgHttpClient","proxyUrl","authToken","customFetch","fullResults","customTypeParser","sessionId","loggerOptions","configuredLevel","customLogFn","log","level","data","logData","logMessage","fetchFn","formattedProxyUrl","clientSessionId","execute","queryText","startTime","fetchOptions","param","response","errorData","duration","error","connError","options","callArrayMode","parameterizedQuery","q","p","rawSql","queries","formattedQueries","queryParams","txnArrayMode","txnFullResults","headers","results","json","parseError","formattedResults","processed","txError","drizzle","schema","fetch","logger","pgClient","db","drizzleOrm"],"mappings":"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","file":"index.cjs","sourcesContent":["import { drizzle as drizzleOrm } from 'drizzle-orm/neon-http';\nimport { createPgHttpClient, TypeParser, LogLevel } from './client'; // Updated import path\nimport type { LoggerOptions } from './client'; // Correct: LoggerOptions is a type\n\n/**\n * Creates a Drizzle client connecting to PostgreSQL via HTTP proxy.\n * This client is compatible with both drizzle-orm and Auth.js.\n * \n * @param options Configuration options\n * @returns Drizzle ORM instance for your database\n */\nexport function drizzle<TSchema extends Record<string, unknown>>(options: {\n  proxyUrl: string;\n  authToken?: string;\n  schema: TSchema;\n  fetch?: typeof globalThis.fetch;\n  arrayMode?: boolean;\n  fullResults?: boolean;\n  typeParser?: TypeParser | Record<number, (value: string) => any>;\n  logger?: LoggerOptions; // Add logger option\n}) {\n  const {\n    proxyUrl,\n    authToken, \n    schema, \n    fetch, \n    arrayMode = false,\n    fullResults = false,\n    typeParser,\n    logger // Destructure logger\n  } = options;\n\n  // Create our custom HTTP client that mirrors Neon's client interface exactly\n  const pgClient = createPgHttpClient({ \n    proxyUrl, \n    authToken, \n    fetch,\n    arrayMode,\n    fullResults,\n    typeParser,\n    logger // Pass logger option\n  });\n\n  // Create a drizzle instance using our client\n  const db = drizzleOrm(pgClient as any, { schema });\n\n  // CRITICAL: Expose the client's query method directly on the db object\n  // This is what Auth.js DrizzleAdapter looks for\n  // Wrap the query method to ensure it's always called with proper context\n  // and always returns a properly structured result\n  Object.defineProperty(db, 'query', {\n    enumerable: true,\n    configurable: true,\n    writable: true,\n    value: async function(queryText: string, params?: any[], options?: any) {\n      try {\n        // Call the query method with the correct context and arguments\n        const result = await pgClient.query(queryText, params || [], options);\n        \n        // Ensure the result has a rows property\n        if (!result || !result.rows) {\n          return {\n            command: 'SELECT',\n            rowCount: 0,\n            fields: [],\n            rows: [],\n            rowAsArray: false\n          };\n        }\n        \n        return result;\n      } catch (error) {\n        console.error('Error in query method:', error);\n        throw error;\n      }\n    }\n  });\n  \n  // Also expose other methods for direct access if needed\n  Object.defineProperty(db, 'sql', {\n    enumerable: true,\n    configurable: true,\n    writable: true,\n    value: pgClient.sql\n  });\n  \n  Object.defineProperty(db, 'transaction', {\n    enumerable: true,\n    configurable: true,\n    writable: true, \n    value: pgClient.transaction.bind(pgClient)\n  });\n  \n  Object.defineProperty(db, 'client', {\n    enumerable: true,\n    configurable: true,\n    writable: false,\n    value: pgClient\n  });\n  \n  // Expose the type parser for custom type handling\n  Object.defineProperty(db, 'typeParser', {\n    enumerable: true,\n    configurable: true,\n    writable: false,\n    value: pgClient.typeParser\n  });\n\n  return db;\n}\n","import type { QueryPromise } from './query-promise'; // Import from new file\nimport type { TypeParser } from './parsing'; // Use type-only import\n\n// Define basic types based on Neon's HTTP client\nexport interface PgQueryResult {\n  command: string;\n  fields: PgField[];\n  rowCount: number;\n  rows: any[];\n  rowAsArray: boolean;\n  // Additional properties for compatibility with Neon\n  _parsers?: any[];\n  _types?: TypeParser;\n}\n\nexport interface PgField {\n  name: string;\n  tableID: number;\n  columnID: number;\n  dataTypeID: number;\n  dataTypeSize: number;\n  dataTypeModifier: number;\n  format: string;\n}\n\nexport interface ParameterizedQuery {\n  query: string;\n  params: any[];\n}\n\n// This is used to tag template literals in SQL queries\nexport type SQLTemplateTag = (strings: TemplateStringsArray, ...values: any[]) => QueryPromise<PgQueryResult>;\n\n// Transaction query interface with support for query metadata\nexport interface TransactionQuery {\n  text: string;\n  values: unknown[];\n  captureGeneratedId?: boolean; // Flag to indicate this query generates an ID that will be used in subsequent queries\n}\n\nexport interface ClientOptions {\n  proxyUrl: string;\n  authToken?: string;\n  fetch?: typeof globalThis.fetch;\n  arrayMode?: boolean;\n  fullResults?: boolean;\n  typeParser?: TypeParser | Record<number, (value: string) => any>;\n  sessionId?: string; // Optional explicit session ID, will be auto-generated if not provided\n  logger?: LoggerOptions; // Add logger configuration\n}\n\n// Define Log Levels\nexport enum LogLevel {\n  Debug = 1,\n  Info = 2,\n  Warn = 3,\n  Error = 4,\n  None = 5, // Special level to disable logging\n}\n\n// Define Logger Options\nexport interface LoggerOptions {\n  level?: LogLevel; // Minimum level to log\n  // Optional custom log function: (level: LogLevel, message: string, data?: any) => void\n  logFn?: (level: LogLevel, message: string, data?: any) => void;\n}\n","// Custom PostgreSQL Error Class following Neon's pattern\nexport class PgError extends Error {\n  override name = 'PgError' as const;\n\n  // PostgreSQL specific error fields\n  severity?: string;\n  code?: string;\n  detail?: string;\n  hint?: string;\n  position?: string;\n  internalPosition?: string;\n  internalQuery?: string;\n  where?: string;\n  schema?: string;\n  table?: string;\n  column?: string;\n  dataType?: string;\n  constraint?: string;\n  file?: string;\n  line?: string;\n  routine?: string;\n\n  // Original error if wrapped\n  sourceError?: Error;\n\n  constructor(message: string) {\n    super(message);\n\n    if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, PgError);\n    }\n  }\n}\n\n// Standard PostgreSQL error fields for parsing from server responses\nexport const PG_ERROR_FIELDS = [\n  'severity',\n  'code',\n  'detail',\n  'hint',\n  'position',\n  'internalPosition',\n  'internalQuery',\n  'where',\n  'schema',\n  'table',\n  'column',\n  'dataType',\n  'constraint',\n  'file',\n  'line',\n  'routine',\n] as const;\n\n\n// Helper function to handle PostgreSQL error parsing\nexport function parsePostgresError(err: any): PgError {\n  const pgError = new PgError(err.message || 'Unknown PostgreSQL error');\n\n  // Copy all PostgreSQL error fields if they exist\n  for (const field of PG_ERROR_FIELDS) {\n    if (err[field] !== undefined) {\n      pgError[field] = err[field];\n    }\n  }\n\n  // Store original error if available\n  if (err instanceof Error) {\n    pgError.sourceError = err;\n  }\n\n  return pgError;\n}\n","// PostgreSQL Data Types IDs\n// Based on https://github.com/brianc/node-pg-types/blob/master/lib/builtins.js\nexport enum PgTypeId {\n  BOOL = 16,\n  BYTEA = 17,\n  CHAR = 18,\n  INT8 = 20,\n  INT2 = 21,\n  INT4 = 23,\n  REGPROC = 24,\n  TEXT = 25,\n  OID = 26,\n  TID = 27,\n  XID = 28,\n  CID = 29,\n  JSON = 114,\n  XML = 142,\n  PG_NODE_TREE = 194,\n  JSONB = 3802,\n  FLOAT4 = 700,\n  FLOAT8 = 701,\n  ABSTIME = 702,\n  RELTIME = 703,\n  TINTERVAL = 704,\n  CIRCLE = 718,\n  MONEY = 790,\n  MACADDR = 829,\n  INET = 869,\n  CIDR = 650,\n  MACADDR8 = 774,\n  ACLITEM = 1033,\n  BPCHAR = 1042,\n  VARCHAR = 1043,\n  DATE = 1082,\n  TIME = 1083,\n  TIMESTAMP = 1114,\n  TIMESTAMPTZ = 1184,\n  INTERVAL = 1186,\n  TIMETZ = 1266,\n  BIT = 1560,\n  VARBIT = 1562,\n  NUMERIC = 1700,\n  REFCURSOR = 1790,\n  REGPROCEDURE = 2202,\n  REGOPER = 2203,\n  REGOPERATOR = 2204,\n  REGCLASS = 2205,\n  REGTYPE = 2206,\n  UUID = 2950,\n  TXID_SNAPSHOT = 2970,\n  PG_LSN = 3220,\n  PG_NDISTINCT = 3361,\n  PG_DEPENDENCIES = 3402,\n  TSVECTOR = 3614,\n  TSQUERY = 3615,\n  GTSVECTOR = 3642,\n  REGCONFIG = 3734,\n  REGDICTIONARY = 3769,\n  JSONPATH = 4072,\n  REGNAMESPACE = 4089,\n  REGROLE = 4096,\n\n  // Array types (OIDs are element type OID + 1 dimension)\n  // Defining common array types explicitly\n  BOOL_ARRAY = 1000,      // Boolean Array -> 16 + 1000 - 16 = 1000\n  BYTEA_ARRAY = 1001,     // Bytea Array -> 17 + 1000 - 16 = 1001\n  CHAR_ARRAY = 1002,      // Char Array -> 18 + 1000 - 16 = 1002\n  INT8_ARRAY = 1016,      // BigInt Array -> 20 + 1000 - 4 = 1016\n  INT2_ARRAY = 1005,      // SmallInt Array -> 21 + 1000 - 16 = 1005\n  INT4_ARRAY = 1007,      // Integer Array -> 23 + 1000 - 16 = 1007\n  TEXT_ARRAY = 1009,      // Text Array -> 25 + 1000 - 16 = 1009\n  JSON_ARRAY = 199,       // JSON Array -> 114 + 1000 - 915 = 199\n  JSONB_ARRAY = 3807,     // JSONB Array -> 3802 + 5 = 3807\n  FLOAT4_ARRAY = 1021,    // Float4 Array -> 700 + 1000 - 679 = 1021\n  FLOAT8_ARRAY = 1022,    // Float8 Array -> 701 + 1000 - 679 = 1022\n  NUMERIC_ARRAY = 1231,   // Numeric Array -> 1700 + 1000 - 1469 = 1231\n  DATE_ARRAY = 1182,      // Date Array -> 1082 + 100 = 1182\n  TIMESTAMP_ARRAY = 1115, // Timestamp Array -> 1114 + 1 = 1115\n  TIMESTAMPTZ_ARRAY = 1185, // Timestamptz Array -> 1184 + 1 = 1185\n  UUID_ARRAY = 2951,      // UUID Array -> 2950 + 1 = 2951\n  VARCHAR_ARRAY = 1015,   // VarChar Array -> 1043 + 1000 - 1028 = 1015\n}\n\n// Helper function to check if a type is an array type\nexport function isArrayType(typeId: number): boolean {\n  // Array types in PostgreSQL are typically in ranges that follow patterns\n  return (\n    (typeId >= 1000 && typeId <= 1099) || // Common 1-dimensional array types\n    (typeId >= 1115 && typeId <= 1185) || // Date/time array types\n    typeId === 199 ||                     // JSON array\n    typeId === 3807 ||                    // JSONB array\n    typeId === 1231 ||                    // Numeric array\n    typeId === 2951                       // UUID array\n    // Add other ranges as needed\n  );\n}\n\n// Get the element type ID for an array type ID\nexport function getElementTypeId(arrayTypeId: number): number {\n  // Some common mappings for array types to their element types\n  const arrayToElementMap: Record<number, number> = {\n    1000: PgTypeId.BOOL,          // Boolean array -> Boolean\n    1001: PgTypeId.BYTEA,         // Bytea array -> Bytea\n    1002: PgTypeId.CHAR,          // Char array -> Char\n    1005: PgTypeId.INT2,          // SmallInt array -> SmallInt\n    1007: PgTypeId.INT4,          // Integer array -> Integer\n    1009: PgTypeId.TEXT,          // Text array -> Text\n    1016: PgTypeId.INT8,          // BigInt array -> BigInt\n    1021: PgTypeId.FLOAT4,        // Float4 array -> Float4\n    1022: PgTypeId.FLOAT8,        // Float8 array -> Float8\n    1231: PgTypeId.NUMERIC,       // Numeric array -> Numeric\n    1015: PgTypeId.VARCHAR,       // VarChar array -> VarChar\n    1182: PgTypeId.DATE,          // Date array -> Date\n    1115: PgTypeId.TIMESTAMP,     // Timestamp array -> Timestamp\n    1185: PgTypeId.TIMESTAMPTZ,   // TimestampTZ array -> TimestampTZ\n    199: PgTypeId.JSON,           // JSON array -> JSON\n    3807: PgTypeId.JSONB,         // JSONB array -> JSONB\n    2951: PgTypeId.UUID,          // UUID array -> UUID\n  };\n\n  return arrayToElementMap[arrayTypeId] || 0;\n}\n\n\n// Type parser for PostgreSQL types\nexport class TypeParser {\n  private parsers: Record<number, (value: string) => any> = {};\n\n  constructor(customTypes?: Record<number, (value: string) => any>) {\n    // Initialize with default parsers\n    this.initializeDefaultParsers();\n\n    // Add custom type parsers if provided\n    if (customTypes) {\n      Object.keys(customTypes).forEach(key => {\n        const typeId = parseInt(key, 10);\n        if (!isNaN(typeId) && customTypes[typeId]) {\n          this.setTypeParser(typeId, customTypes[typeId] as (value: string) => any);\n        }\n      });\n    }\n  }\n\n  private initializeDefaultParsers() {\n    // Boolean type\n    this.setTypeParser(PgTypeId.BOOL, val => val === 't' || val === 'true');\n\n    // Integer types\n    this.setTypeParser(PgTypeId.INT2, val => parseInt(val, 10));\n    this.setTypeParser(PgTypeId.INT4, val => parseInt(val, 10));\n    this.setTypeParser(PgTypeId.INT8, val => BigInt(val));\n    this.setTypeParser(PgTypeId.OID, val => parseInt(val, 10));\n\n    // Floating point types\n    this.setTypeParser(PgTypeId.FLOAT4, val => parseFloat(val));\n    this.setTypeParser(PgTypeId.FLOAT8, val => parseFloat(val));\n    this.setTypeParser(PgTypeId.NUMERIC, val => parseFloat(val));\n\n    // JSON types\n    this.setTypeParser(PgTypeId.JSON, val => JSON.parse(val));\n    this.setTypeParser(PgTypeId.JSONB, val => JSON.parse(val));\n\n    // Date/Time types\n    this.setTypeParser(PgTypeId.DATE, val => new Date(val));\n    this.setTypeParser(PgTypeId.TIMESTAMP, val => new Date(val));\n    this.setTypeParser(PgTypeId.TIMESTAMPTZ, val => new Date(val));\n\n    // UUID\n    this.setTypeParser(PgTypeId.UUID, val => val);\n\n    // Set up array type parsers\n    this.setupArrayTypeParsers();\n  }\n\n  private setupArrayTypeParsers() {\n    // Define array type parsers for all base types\n    // Boolean array\n    this.setTypeParser(PgTypeId.BOOL_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.BOOL)));\n\n    // Integer arrays\n    this.setTypeParser(PgTypeId.INT2_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.INT2)));\n    this.setTypeParser(PgTypeId.INT4_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.INT4)));\n    this.setTypeParser(PgTypeId.INT8_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.INT8)));\n\n    // Floating point arrays\n    this.setTypeParser(PgTypeId.FLOAT4_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.FLOAT4)));\n    this.setTypeParser(PgTypeId.FLOAT8_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.FLOAT8)));\n    this.setTypeParser(PgTypeId.NUMERIC_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.NUMERIC)));\n\n    // Text arrays\n    this.setTypeParser(PgTypeId.TEXT_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.TEXT)));\n    this.setTypeParser(PgTypeId.VARCHAR_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.VARCHAR)));\n\n    // JSON arrays\n    this.setTypeParser(PgTypeId.JSON_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.JSON)));\n    this.setTypeParser(PgTypeId.JSONB_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.JSONB)));\n\n    // Date/Time arrays\n    this.setTypeParser(PgTypeId.DATE_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.DATE)));\n    this.setTypeParser(PgTypeId.TIMESTAMP_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.TIMESTAMP)));\n    this.setTypeParser(PgTypeId.TIMESTAMPTZ_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.TIMESTAMPTZ)));\n\n    // UUID array\n    this.setTypeParser(PgTypeId.UUID_ARRAY, val =>\n      parsePostgresArray(val, this.getTypeParser(PgTypeId.UUID)));\n  }\n\n  public setTypeParser(typeId: number, parseFn: (value: string) => any): void {\n    this.parsers[typeId] = parseFn;\n  }\n\n  public getTypeParser(typeId: number): (value: string) => any {\n    // If we're asked for a parser for an array type that doesn't have one explicitly defined,\n    // create an array parser dynamically using the element type parser\n    if (isArrayType(typeId) && !this.parsers[typeId]) {\n      const elementTypeId = getElementTypeId(typeId);\n      if (elementTypeId) {\n        const elementParser = this.getTypeParser(elementTypeId);\n        return (value: string) => parsePostgresArray(value, elementParser);\n      }\n    }\n\n    return this.parsers[typeId] || (value => value);\n  }\n}\n\n\n/**\n * Parse a PostgreSQL array string into a JavaScript array\n * This handles various array types and dimensions using the appropriate element parser\n */\nexport function parsePostgresArray(arrayString: string, elementParser: (value: string) => any): any[] {\n  if (!arrayString || arrayString === '{}') return [];\n  if (arrayString[0] !== '{' || arrayString[arrayString.length - 1] !== '}') {\n    throw new Error(`Invalid PostgreSQL array format: ${arrayString}`);\n  }\n\n  // Extract the content inside the outer braces\n  const content = arrayString.substring(1, arrayString.length - 1);\n\n  // Quick return for empty arrays\n  if (!content) return [];\n\n  const result: any[] = [];\n  let inQuotes = false;\n  let inEscape = false;\n  let currentItem = '';\n  let nestLevel = 0;\n\n  // Process each character to handle quotes, escapes, and nested arrays\n  for (let i = 0; i < content.length; i++) {\n    const char = content[i];\n\n    // Handle escape sequences\n    if (inEscape) {\n      currentItem += char;\n      inEscape = false;\n      continue;\n    }\n\n    // Start of escape sequence\n    if (char === '\\\\') {\n      inEscape = true;\n      continue;\n    }\n\n    // Toggle quote mode when we see a quote\n    if (char === '\"') {\n      inQuotes = !inQuotes;\n      continue;\n    }\n\n    // Track nesting level for nested arrays\n    if (char === '{') {\n      nestLevel++;\n      currentItem += char;\n      continue;\n    }\n\n    if (char === '}') {\n      nestLevel--;\n      currentItem += char;\n      continue;\n    }\n\n    // If we're inside quotes or a nested array, add the character to current item\n    if (inQuotes || nestLevel > 0) {\n      currentItem += char;\n      continue;\n    }\n\n    // Handle item separator (comma)\n    if (char === ',') {\n      // Process the completed item\n      result.push(parseArrayItem(currentItem, elementParser));\n      currentItem = '';\n      continue;\n    }\n\n    // Normal character, add to current item\n    currentItem += char;\n  }\n\n  // Add the last item if there is one\n  if (currentItem) {\n    result.push(parseArrayItem(currentItem, elementParser));\n  }\n\n  return result;\n}\n\n/**\n * Parse a single item from a PostgreSQL array\n */\nexport function parseArrayItem(item: string, elementParser: (value: string) => any): any {\n  // Trim whitespace\n  item = item.trim();\n\n  // Handle NULL values\n  if (item === 'NULL' || item === '') {\n    return null;\n  }\n\n  // Handle nested arrays recursively\n  if (item[0] === '{' && item[item.length - 1] === '}') {\n    return parsePostgresArray(item, elementParser);\n  }\n\n  // Parse normal values using the element parser\n  return elementParser(item);\n}\n\n// Process raw query results to apply type parsing\nexport function processQueryResult(\n  result: any,\n  typeParser: TypeParser,\n  arrayMode: boolean\n): any {\n  if (!result) return null;\n\n  const fields = result.fields || [];\n  const rowsData = result.rows || [];\n\n  // Create parsers for each column based on its data type\n  const parsers = fields.map((field: { dataTypeID: number }) => {\n    const typeId = field.dataTypeID;\n\n    // If it's an array type, create a special parser that handles the array format\n    // and applies the element type parser to each item\n    if (isArrayType(typeId)) {\n      const elementTypeId = getElementTypeId(typeId);\n      const elementParser = typeParser.getTypeParser(elementTypeId);\n\n      // Return a function that parses the PostgreSQL array format\n      return (value: string) => parsePostgresArray(value, elementParser);\n    }\n\n    // For non-array types, use the normal type parser\n    return typeParser.getTypeParser(typeId);\n  });\n\n  // Extract column names\n  const colNames = fields.map((field: { name: string }) => field.name);\n\n  // Process rows with type parsers - with additional safety checks for Auth.js compatibility\n  let processedRows: any[] = [];\n\n  if (Array.isArray(rowsData)) {\n    processedRows = arrayMode\n      ? rowsData.map((row: any) => {\n          // Ensure row is an array before trying to map over it\n          if (!Array.isArray(row)) {\n            return row; // Return as is if not an array\n          }\n          return row.map((val, i) => val === null ? null : parsers[i](val));\n        })\n      : rowsData.map((row: any) => {\n          // Handle cases where row might not be an array (Auth.js sometimes sends objects directly)\n          if (!Array.isArray(row)) {\n            return row; // Return as is if not an array\n          }\n\n          const obj: Record<string, any> = {};\n          row.forEach((val, i) => {\n            if (i < colNames.length) { // Ensure index is within bounds\n              obj[colNames[i]] = val === null ? null : parsers[i](val);\n            }\n          });\n          return obj;\n        });\n  }\n\n  // Return a complete result object\n  return {\n    ...result,\n    rows: processedRows,\n    rowAsArray: arrayMode,\n    _parsers: parsers,\n    _types: typeParser\n  };\n}\n","import type { ParameterizedQuery } from './types'; // Import necessary type\n\n// Create a class implementing Promise for SQL queries with expanded functionality to match Neon's\nexport class QueryPromise<T = any> implements Promise<T> {\n  readonly [Symbol.toStringTag]: string = 'Promise';\n  public queryData: ParameterizedQuery;\n  public opts?: any;\n\n  constructor(\n    private executeFn: (query: string, params: any[]) => Promise<T>,\n    queryObj: ParameterizedQuery,\n    opts?: any\n  ) {\n    this.queryData = queryObj;\n    this.opts = opts;\n  }\n\n  then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined\n  ): Promise<TResult1 | TResult2> {\n    return this.executeFn(this.queryData.query, this.queryData.params).then(onfulfilled, onrejected);\n  }\n\n  catch<TResult = never>(\n    onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined\n  ): Promise<T | TResult> {\n    return this.executeFn(this.queryData.query, this.queryData.params).catch(onrejected);\n  }\n\n  finally(onfinally?: (() => void) | null | undefined): Promise<T> {\n    return this.executeFn(this.queryData.query, this.queryData.params).finally(onfinally);\n  }\n\n  // For compatibility with result iteration, implement Symbol.iterator\n  [Symbol.iterator](): Iterator<T> {\n    // Create a reference to the promise outside the iterator\n    const promise = this;\n    let isDone = false;\n    let resolvedValue: T | undefined = undefined;\n\n    return {\n      next(): IteratorResult<T> {\n        if (isDone) {\n          return { done: true, value: undefined as any };\n        }\n\n        if (resolvedValue === undefined) {\n          // For the first call, return the promise result\n          return promise.then((value: T) => {\n            resolvedValue = value;\n            return { done: false, value };\n          }) as any; // Cast needed\n        }\n\n        // For subsequent calls\n        isDone = true;\n        return { done: true, value: undefined as any }; // Mark as done\n      }\n    };\n  }\n}\n","import type { ParameterizedQuery } from './types'; // Assuming types are in types.ts\nimport { QueryPromise } from './query-promise'; // Import QueryPromise from new file\n// Removed incorrect self-import: import { UnsafeRawSql } from './utils'; \n\n// Class for RAW SQL representation (Ensure this is defined, not imported)\nexport class UnsafeRawSql {\n  constructor(public sql: string) {}\n}\n\n// Helper function to encode binary data for PostgreSQL\nexport function encodeBuffersAsBytea(value: unknown): unknown {\n  // Convert Buffer to bytea hex format: https://www.postgresql.org/docs/current/datatype-binary.html\n  if (typeof Buffer !== 'undefined' && (value instanceof Buffer || ArrayBuffer.isView(value))) {\n    return '\\\\x' + Buffer.from(value as any).toString('hex');\n  }\n  return value;\n}\n\n// Generate a UUID similar to what Neon uses for session IDs\nexport function generateUUID(): string {\n  // Simple UUID v4 implementation\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n    const r = Math.random() * 16 | 0;\n    const v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}\n\n/**\n * Helper to convert SqlTemplate (from tagged template) to ParameterizedQuery\n * This mirrors Neon's sqlTemplate.toParameterizedQuery\n */\nexport function toParameterizedQuery(\n  strings: TemplateStringsArray,\n  values: any[]\n): ParameterizedQuery {\n  let query = '';\n  const params: any[] = [];\n\n  for (let i = 0, len = strings.length; i < len; i++) {\n    query += strings[i];\n    if (i < values.length) {\n      const value = values[i];\n\n      // Handle different value types\n      if (value instanceof UnsafeRawSql) {\n        query += value.sql;\n      } else if (value instanceof QueryPromise) {\n        // Ensure QueryPromise has queryData before accessing it\n        if (value.queryData) {\n          // Inline the query text but not params - check if params exist\n          if (value.queryData.params && value.queryData.params.length > 0) {\n             // If the nested query has parameters, it's not safely composable this way\n             throw new Error('Cannot compose a query promise that has parameters.');\n          }\n          query += value.queryData.query;\n        } else {\n          // Handle cases where queryData might be missing (should not happen with current structure)\n          throw new Error('Invalid QueryPromise encountered during composition.');\n        }\n      } else {\n        params.push(value);\n        query += `$${params.length}`;\n\n        // Type hint for binary data\n        const isBinary = typeof Buffer !== 'undefined' && (value instanceof Buffer || ArrayBuffer.isView(value));\n        if (isBinary) query += '::bytea';\n      }\n    }\n  }\n\n  return { query, params };\n}\n","/**\n * Creates a custom HTTP client for PostgreSQL that works in edge environments\n * This implementation mirrors Neon's HTTP client interface to ensure compatibility\n * with drizzle-orm, Auth.js and other tools that expect the Neon client.\n */\nimport { LogLevel } from './types'; // Import LogLevel as a value\nimport type {\n  ClientOptions,\n  PgQueryResult,\n  ParameterizedQuery,\n  TransactionQuery,\n  SQLTemplateTag\n  // LogLevel removed from type-only import\n} from './types';\nimport { PgError, parsePostgresError, PG_ERROR_FIELDS } from './errors';\nimport { TypeParser, processQueryResult } from './parsing';\nimport { QueryPromise } from './query-promise'; // Import QueryPromise from its own file\nimport {\n  UnsafeRawSql,\n  encodeBuffersAsBytea,\n  generateUUID,\n  toParameterizedQuery\n} from './utils';\n\n// Re-export core types and classes for external use\nexport { PgError } from './errors';\nexport { UnsafeRawSql } from './utils';\nexport { QueryPromise } from './query-promise';\nexport { TypeParser, PgTypeId } from './parsing';\nexport { LogLevel } from './types'; // Export LogLevel enum as value\nexport type {\n  PgQueryResult,\n  PgField,\n  ParameterizedQuery,\n  TransactionQuery,\n  ClientOptions,\n  LoggerOptions, // Export LoggerOptions type\n  SQLTemplateTag\n} from './types';\n\n\nexport function createPgHttpClient({\n  proxyUrl,\n  authToken,\n  fetch: customFetch,\n  arrayMode = false,\n  fullResults = false,\n  typeParser: customTypeParser,\n  sessionId,\n  logger: loggerOptions // Destructure logger options\n}: ClientOptions) {\n\n  // --- Logger Setup ---\n  const configuredLevel = loggerOptions?.level ?? LogLevel.Warn; // Default to Warn\n  const customLogFn = loggerOptions?.logFn;\n\n  const log = (level: LogLevel, message: string, data?: any) => {\n    if (level >= configuredLevel && configuredLevel !== LogLevel.None) {\n      if (customLogFn) {\n        customLogFn(level, message, data);\n      } else {\n        // Default console logging\n        const logData = data ? { data } : {};\n        const logMessage = `[PG-HTTP-CLIENT][${LogLevel[level]}] ${message}`;\n        switch (level) {\n          case LogLevel.Debug:\n          case LogLevel.Info:\n            console.log(logMessage, logData);\n            break;\n          case LogLevel.Warn:\n            console.warn(logMessage, logData);\n            break;\n          case LogLevel.Error:\n            console.error(logMessage, logData);\n            break;\n        }\n      }\n    }\n  };\n  // --- End Logger Setup ---\n\n\n  // Use provided fetch or global fetch\n  const fetchFn = customFetch || globalThis.fetch;\n\n  // Format the proxy URL to ensure it's valid\n  const formattedProxyUrl = proxyUrl.endsWith('/') ? proxyUrl.slice(0, -1) : proxyUrl;\n\n  // Initialize type parser\n  const typeParser = customTypeParser instanceof TypeParser\n    ? customTypeParser\n    : new TypeParser(customTypeParser);\n\n  // Create or use provided session ID - this matches Neon's implementation\n  const clientSessionId = sessionId || generateUUID();\n\n  // Check if fetch is available in the current environment\n  if (!fetchFn) {\n    throw new PgError('fetch is not available in the current environment. Please provide a fetch implementation.');\n  }\n\n  // Direct query execution function - the core of the client\n  const execute = async (queryText: string, params: any[] = []): Promise<PgQueryResult> => {\n    log(LogLevel.Debug, 'Executing query', { query: queryText, paramsCount: params.length, sessionId: clientSessionId });\n    const startTime = Date.now();\n\n    const fetchOptions: RequestInit = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        // Add Neon-specific headers for compatibility\n        'Neon-Raw-Text-Output': 'true',\n        'Neon-Array-Mode': String(arrayMode), // Use default arrayMode for single queries unless overridden\n        // Add session ID header for consistent session tracking (just like Neon does)\n        'X-Session-ID': clientSessionId,\n        // IMPORTANT: Always include Authorization header first if authToken is provided\n        // to ensure compatibility with all server implementations\n        ...(authToken ? { 'Authorization': `Bearer ${authToken}` } : {}),\n      },\n      body: JSON.stringify({\n        query: queryText, // Use 'query' field to match Neon\n        params: Array.isArray(params) ? params.map(param => encodeBuffersAsBytea(param)) : [],\n        // method: 'all', // Neon doesn't seem to use 'method' for single queries\n      }),\n    };\n\n    try {\n      const response = await fetchFn(`${formattedProxyUrl}/query`, fetchOptions);\n\n      if (!response.ok) {\n        let errorData: any = { error: response.statusText };\n        try { errorData = await response.json(); }\n        catch (parseError) { errorData = { error: `Status ${response.status}: ${response.statusText}` }; }\n        const pgError = parsePostgresError(errorData); // Use helper\n        log(LogLevel.Error, `Query failed with status ${response.status}`, { error: pgError, query: queryText, sessionId: clientSessionId });\n        throw pgError;\n      }\n\n      const result = await response.json() as any;\n      const duration = Date.now() - startTime;\n      log(LogLevel.Info, `Query executed successfully`, { durationMs: duration, query: queryText, sessionId: clientSessionId });\n\n      // Process with type parsers - always return full structure internally\n      const processedResult = processQueryResult(result, typeParser, arrayMode);\n\n      // Return based on fullResults option (mimicking Neon's behavior)\n      // Note: Neon's httpQuery returns rows directly if fullResults is false,\n      // but the Pool query override returns the full result object.\n      // We'll return the full object from execute for consistency within this client.\n      return processedResult;\n\n    } catch (error) {\n      if (error instanceof PgError) {\n        // Error already logged if it came from response handling\n        throw error;\n      }\n      // Log connection or other unexpected errors\n      const connError = new PgError(`Failed to execute query: ${error instanceof Error ? error.message : String(error)}`);\n      connError.sourceError = error instanceof Error ? error : undefined;\n      log(LogLevel.Error, `Query execution failed`, { error: connError, query: queryText, sessionId: clientSessionId });\n      throw connError;\n    }\n  };\n\n\n  // SQL tag template for handling raw SQL queries\n  const sql = (strings: TemplateStringsArray, ...values: unknown[]): QueryPromise<PgQueryResult> => {\n    const parameterizedQuery = toParameterizedQuery(strings, values);\n    // Pass arrayMode and fullResults options to the QueryPromise if needed\n    return new QueryPromise(\n      (q: string, p: any[]) => execute(q, p), // Add types to lambda parameters\n      parameterizedQuery,\n      { arrayMode, fullResults } // Pass options if QueryPromise needs them\n    );\n  };\n\n\n  // Transaction handling\n  const transaction = async (\n    queries: (TransactionQuery | QueryPromise<PgQueryResult>)[], // Allow both raw objects and QueryPromises\n    options?: {\n      isolationLevel?: 'ReadUncommitted' | 'ReadCommitted' | 'RepeatableRead' | 'Serializable';\n      readOnly?: boolean;\n      deferrable?: boolean;\n      arrayMode?: boolean;\n      fullResults?: boolean;\n    }\n  ): Promise<any[]> => { // Return type depends on fullResults option\n    log(LogLevel.Debug, 'Executing transaction', { queryCount: queries.length, options, sessionId: clientSessionId });\n    const startTime = Date.now();\n    try {\n      if (!Array.isArray(queries)) {\n        const err = new PgError('Input to transaction must be an array of queries.');\n        log(LogLevel.Error, 'Transaction failed: Invalid input', { error: err, sessionId: clientSessionId });\n        throw err;\n      }\n\n      // Format queries for the server\n      const formattedQueries = queries.map((q) => {\n        let queryText: string;\n        let queryParams: any[];\n\n        if (q instanceof QueryPromise) {\n          // Extract from QueryPromise\n          if (!q.queryData) throw new PgError('Invalid QueryPromise passed to transaction.');\n          queryText = q.queryData.query;\n          queryParams = q.queryData.params;\n        } else if (typeof q === 'object' && q !== null && typeof q.text === 'string') {\n          // Handle TransactionQuery object\n          queryText = q.text;\n          queryParams = Array.isArray(q.values) ? q.values : [];\n        } else {\n          throw new PgError('Invalid query type passed to transaction. Use sql`` or { text: string, values: any[] }.');\n        }\n\n        return {\n          query: queryText,\n          params: queryParams.map(value => encodeBuffersAsBytea(value)),\n        };\n      });\n\n      // Determine the array mode and full results settings for this transaction\n      const txnArrayMode = options?.arrayMode ?? arrayMode; // Inherit from client options if not specified\n      const txnFullResults = options?.fullResults ?? fullResults; // Inherit from client options\n\n      // Prepare headers with transaction options\n      const headers: Record<string, string> = {\n        'Content-Type': 'application/json',\n        'Neon-Raw-Text-Output': 'true',\n        'Neon-Array-Mode': String(txnArrayMode), // Use transaction-specific array mode\n        'X-Session-ID': clientSessionId,\n        ...(authToken ? { 'Authorization': `Bearer ${authToken}` } : {})\n      };\n\n      if (options?.isolationLevel) headers['Neon-Batch-Isolation-Level'] = options.isolationLevel;\n      if (options?.readOnly !== undefined) headers['Neon-Batch-Read-Only'] = String(options.readOnly);\n      if (options?.deferrable !== undefined) headers['Neon-Batch-Deferrable'] = String(options.deferrable);\n\n      // Send the transaction request\n      const response = await fetchFn(`${formattedProxyUrl}/transaction`, {\n        method: 'POST',\n        headers,\n        body: JSON.stringify({ queries: formattedQueries }),\n      });\n\n      if (!response.ok) {\n        let errorData: any = {};\n        try { errorData = await response.json(); }\n        catch { errorData = { error: `Status ${response.status}: ${response.statusText}` }; }\n        const pgError = parsePostgresError(errorData); // Use helper\n        log(LogLevel.Error, `Transaction failed with status ${response.status}`, { error: pgError, queryCount: formattedQueries.length, sessionId: clientSessionId });\n        throw pgError;\n      }\n\n      // Parse results from response\n      let results: any[] = [];\n      try {\n        const json = await response.json() as any;\n        // Neon proxy returns { results: [...] } for batch\n        results = json.results || (Array.isArray(json) ? json : []);\n      } catch (error: any) {\n        const parseError = new PgError(`Error parsing transaction response: ${error.message}`);\n        log(LogLevel.Error, 'Transaction failed: Response parse error', { error: parseError, sessionId: clientSessionId });\n        throw parseError;\n      }\n\n      // Format each result\n      const formattedResults = Array.isArray(results) ? results.map((result) => {\n        // Process with type parsers\n        const processed = processQueryResult(result, typeParser, txnArrayMode);\n        // Return based on transaction's fullResults setting\n        return txnFullResults ? processed : processed.rows;\n      }) : [];\n\n      const duration = Date.now() - startTime;\n      log(LogLevel.Info, `Transaction executed successfully`, { durationMs: duration, queryCount: formattedQueries.length, sessionId: clientSessionId });\n      return formattedResults;\n\n    } catch (error) {\n      if (error instanceof PgError) {\n        // Error should have been logged already if it came from response handling or input validation\n        throw error;\n      }\n      // Log connection or other unexpected errors during transaction setup/execution\n      const txError = new PgError(`Failed to execute transaction: ${error instanceof Error ? error.message : String(error)}`);\n      txError.sourceError = error instanceof Error ? error : undefined;\n      log(LogLevel.Error, `Transaction execution failed`, { error: txError, sessionId: clientSessionId });\n      throw txError;\n    }\n  };\n\n  // Direct query function (often used by libraries like Auth.js)\n  // This needs to return the full PgQueryResult structure for compatibility\n  const query = async (\n    queryText: string,\n    params?: any[],\n    options?: { // Allow overriding arrayMode/fullResults per query call\n      arrayMode?: boolean;\n      fullResults?: boolean; // Note: Even if false, we return the full object for consistency here\n    }\n  ): Promise<PgQueryResult> => {\n    log(LogLevel.Debug, 'Executing direct query', { query: queryText, paramsCount: params?.length, options, sessionId: clientSessionId });\n    const startTime = Date.now();\n    // Use the core execute function, potentially overriding arrayMode for this call\n    const callArrayMode = options?.arrayMode ?? arrayMode;\n    // We'll call execute which always returns the full structure\n    // The caller (e.g., Drizzle) might then extract rows based on its own logic\n\n    const fetchOptions: RequestInit = {\n        method: 'POST',\n        headers: {\n            'Content-Type': 'application/json',\n            'Neon-Raw-Text-Output': 'true',\n            'Neon-Array-Mode': String(callArrayMode), // Use specific mode for this call\n            'X-Session-ID': clientSessionId,\n            ...(authToken ? { 'Authorization': `Bearer ${authToken}` } : {}),\n        },\n        body: JSON.stringify({\n            query: queryText,\n            params: Array.isArray(params) ? params.map(param => encodeBuffersAsBytea(param)) : [],\n        }),\n    };\n\n    try {\n        const response = await fetchFn(`${formattedProxyUrl}/query`, fetchOptions);\n\n        if (!response.ok) {\n            let errorData: any = { error: response.statusText };\n            try { errorData = await response.json(); }\n            catch { errorData = { error: `Status ${response.status}: ${response.statusText}` }; }\n            const pgError = parsePostgresError(errorData);\n            log(LogLevel.Error, `Direct query failed with status ${response.status}`, { error: pgError, query: queryText, sessionId: clientSessionId });\n            throw pgError;\n        }\n\n        const result = await response.json() as any;\n        const duration = Date.now() - startTime;\n        log(LogLevel.Info, `Direct query executed successfully`, { durationMs: duration, query: queryText, sessionId: clientSessionId });\n        // Process result using the specific arrayMode for this call\n        return processQueryResult(result, typeParser, callArrayMode);\n\n    } catch (error) {\n        if (error instanceof PgError) {\n            // Error already logged if it came from response handling\n            throw error;\n        }\n        const connError = new PgError(`Direct query failed: ${error instanceof Error ? error.message : String(error)}`);\n        connError.sourceError = error instanceof Error ? error : undefined;\n        log(LogLevel.Error, `Direct query execution failed`, { error: connError, query: queryText, sessionId: clientSessionId });\n        throw connError;\n    }\n  };\n\n\n  // Unsafe query builder\n  const unsafe = (rawSql: string) => new UnsafeRawSql(rawSql);\n\n  // Return the client interface matching Neon's http client\n  return {\n    execute,      // Expose execute method\n    query,        // Direct query method\n    sql,          // SQL template tag\n    unsafe,       // For unsafe raw SQL\n    transaction,  // For transactions\n    // Expose typeParser if users need to interact with it directly\n    typeParser,\n  };\n}\n"]}