{"version":3,"sources":["../src/errors.ts","../src/adapter.ts","../src/migrations.ts"],"names":["AdapterConfigurationError","DbError","rows","options","normalized","params","text","predicate","isSqlExecutor","isRecord","toSqlExecutor"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module errors\n * @package @geenius/adapters/neon\n * @description Defines Neon-specific binding errors for adapter construction\n * and migration helper validation.\n */\n\nimport { AdapterConfigurationError } from \"@geenius/adapters\";\nimport type { NeonBindingErrorCode } from \"./types\";\n\n/**\n * Error thrown when Neon adapter binding, factory, or migration inputs do not\n * satisfy the SDK-free contract expected by this package.\n */\nexport class NeonBindingError extends AdapterConfigurationError {\n  readonly neonCode: NeonBindingErrorCode;\n\n  constructor(\n    message: string,\n    code: NeonBindingErrorCode = \"INVALID_NEON_ADAPTER\",\n    cause?: unknown,\n  ) {\n    super(message, \"INVALID_CONFIG\", cause);\n    this.neonCode = code;\n    Object.defineProperty(this, \"name\", {\n      value: \"NeonBindingError\",\n      enumerable: false,\n      configurable: true,\n    });\n    Object.defineProperty(this, \"code\", {\n      value: code,\n      enumerable: true,\n      configurable: true,\n    });\n    Object.defineProperty(this, \"adapterCode\", {\n      value: code,\n      enumerable: true,\n      configurable: true,\n    });\n    Object.setPrototypeOf(this, new.target.prototype);\n  }\n}\n\n/**\n * Checks whether an unknown failure came from Neon binding or migration\n * validation rather than a downstream database client.\n */\nexport function isNeonBindingError(error: unknown): error is NeonBindingError {\n  return error instanceof NeonBindingError;\n}\n","/**\n * @module adapter\n * @package @geenius/adapters/neon\n * @description Implements the Neon/Postgres adapter binding and the\n * SDK-free native SQL `DbAdapter` factory for the shared adapters contract.\n */\n\nimport type {\n  DbAdapter,\n  ListOptions,\n  QueryCondition,\n  QueryFilter,\n  QueryOperator,\n} from \"@geenius/adapters\";\nimport { DbError } from \"@geenius/adapters\";\nimport { NeonBindingError } from \"./errors\";\nimport type {\n  CreateNeonDbAdapterOptions,\n  NeonDbAdapter,\n  NeonDbAdapterInput,\n  NeonDbAdapterOptions,\n  NeonDbFactoryOutput,\n  NeonSqlClient,\n  NeonSqlExecutor,\n  NeonSqlResult,\n  NeonSqlRow,\n  NeonSqlTableConfig,\n  NeonTransactionHandler,\n} from \"./types\";\n\nconst DB_ADAPTER_METHODS = [\n  \"create\",\n  \"get\",\n  \"update\",\n  \"delete\",\n  \"list\",\n  \"query\",\n  \"count\",\n] as const;\n\nconst QUERY_OPERATORS = [\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"in\",\n  \"contains\",\n] as const;\n\nconst SQL_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\ntype NormalizedTable = {\n  columns: Record<string, string>;\n  idColumn: string;\n  mode: \"table\" | \"generic-record\";\n  tableSql: string;\n};\n\ntype NormalizedListOptions = {\n  limit?: number;\n  offset?: number;\n  order: \"asc\" | \"desc\";\n  orderColumn?: string;\n};\n\ntype Predicate = {\n  params: unknown[];\n  sql: string;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isSqlExecutor(value: unknown): value is NeonSqlExecutor {\n  return typeof value === \"function\";\n}\n\nfunction isSqlClient(value: unknown): value is NeonSqlClient {\n  return (\n    isSqlExecutor(value) || (isRecord(value) && isSqlExecutor(value.query))\n  );\n}\n\nfunction toSqlExecutor(client: NeonSqlClient): NeonSqlExecutor {\n  if (isSqlExecutor(client)) {\n    return client;\n  }\n\n  if (isRecord(client) && isSqlExecutor(client.query)) {\n    return (text, params) => client.query(text, params);\n  }\n\n  throw new NeonBindingError(\n    \"createNeonDbAdapter expected a SQL executor or object with query().\",\n    \"INVALID_NEON_OPTIONS\",\n  );\n}\n\nfunction isQueryOperator(value: unknown): value is QueryOperator {\n  return (\n    typeof value === \"string\" &&\n    (QUERY_OPERATORS as readonly string[]).includes(value)\n  );\n}\n\nfunction hasAdapterOption(\n  value: unknown,\n): value is { adapter: unknown; provider?: unknown; source?: unknown } {\n  return isRecord(value) && \"adapter\" in value;\n}\n\nfunction hasFactoryOptions(\n  value: unknown,\n): value is CreateNeonDbAdapterOptions {\n  return isRecord(value) && \"client\" in value && \"tables\" in value;\n}\n\nfunction assertNeonBindingMetadata(config: NeonDbAdapterInput): void {\n  if (!hasAdapterOption(config)) {\n    if (hasFactoryOptions(config)) {\n      return;\n    }\n\n    if (!isRecord(config)) {\n      throw new NeonBindingError(\n        \"withNeonDb expected a Neon binding object or native SQL factory options.\",\n      );\n    }\n\n    throw new NeonBindingError(\n      \"withNeonDb requires native SQL factory options or a Neon binding object with provider/source metadata; generic DbAdapters are not accepted.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (config.provider !== \"neon\") {\n    throw new NeonBindingError(\n      'withNeonDb expected provider to be \"neon\".',\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (!isRecord(config.source)) {\n    throw new NeonBindingError(\n      \"withNeonDb expected Neon source metadata with factoryOptions.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (!(\"factoryOptions\" in config.source)) {\n    throw new NeonBindingError(\n      \"withNeonDb expected source.factoryOptions for Neon adapter bindings.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  assertFactoryOptions(config.source.factoryOptions);\n}\n\nfunction assertDbAdapter(value: unknown): asserts value is DbAdapter {\n  if (!isRecord(value)) {\n    throw new NeonBindingError(\n      \"withNeonDb expected a DbAdapter object or Neon factory options.\",\n    );\n  }\n\n  const missing = DB_ADAPTER_METHODS.filter(\n    (method) => typeof value[method] !== \"function\",\n  );\n\n  if (missing.length > 0) {\n    throw new NeonBindingError(\n      `withNeonDb expected a DbAdapter with methods: ${DB_ADAPTER_METHODS.join(\", \")}. Missing: ${missing.join(\", \")}`,\n    );\n  }\n}\n\nfunction assertFactoryOptions(\n  options: unknown,\n): asserts options is CreateNeonDbAdapterOptions {\n  if (!isRecord(options)) {\n    throw new NeonBindingError(\n      \"createNeonDbAdapter expected Neon SQL factory options.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (!isSqlClient(options.client)) {\n    throw new NeonBindingError(\n      \"createNeonDbAdapter expected a SQL executor or query client.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (!isRecord(options.tables)) {\n    throw new NeonBindingError(\n      \"createNeonDbAdapter expected a collection-to-table registry.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (\n    options.transaction !== undefined &&\n    typeof options.transaction !== \"function\"\n  ) {\n    throw new NeonBindingError(\n      \"createNeonDbAdapter expected transaction to be a function when provided.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n\n  if (\n    options.idFactory !== undefined &&\n    typeof options.idFactory !== \"function\"\n  ) {\n    throw new NeonBindingError(\n      \"createNeonDbAdapter expected idFactory to be a function when provided.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n}\n\nfunction getAdapterCandidate(config: NeonDbAdapterInput): unknown {\n  if (hasFactoryOptions(config)) {\n    return createNeonDbAdapter(config);\n  }\n\n  return hasAdapterOption(config) ? config.adapter : config;\n}\n\nfunction quoteIdentifier(identifier: string, label: string): string {\n  if (!SQL_IDENTIFIER.test(identifier)) {\n    throw new DbError(\n      `Invalid Neon SQL identifier for ${label}: ${identifier}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return `\"${identifier}\"`;\n}\n\nfunction quoteQualifiedIdentifier(identifier: string, label: string): string {\n  const parts = identifier.split(\".\");\n\n  if (parts.some((part) => part.length === 0)) {\n    throw new DbError(\n      `Invalid Neon SQL identifier for ${label}: ${identifier}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return parts.map((part) => quoteIdentifier(part, label)).join(\".\");\n}\n\nfunction normalizeTableConfig(\n  tables: Record<string, NeonSqlTableConfig>,\n  collection: string,\n): NormalizedTable {\n  const config = tables[collection];\n\n  if (config === undefined) {\n    throw new DbError(\n      `No Neon table configured for collection: ${collection}`,\n      \"COLLECTION_NOT_CONFIGURED\",\n    );\n  }\n\n  if (typeof config === \"string\") {\n    return {\n      columns: {},\n      idColumn: \"id\",\n      mode: \"table\",\n      tableSql: quoteQualifiedIdentifier(config, collection),\n    };\n  }\n\n  if (!isRecord(config) || typeof config.name !== \"string\") {\n    throw new DbError(\n      `Invalid Neon table configuration for collection: ${collection}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  if (config.columns !== undefined && !isRecord(config.columns)) {\n    throw new DbError(\n      `Invalid Neon column map for collection: ${collection}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  if (config.columns !== undefined) {\n    for (const [field, column] of Object.entries(config.columns)) {\n      if (typeof column !== \"string\") {\n        // Reject non-string column targets before quoteIdentifier sees them:\n        // SQL_IDENTIFIER.test() coerces booleans like `true` into the string\n        // \"true\" (a valid identifier shape), which would silently quote as\n        // `\"true\"` instead of the intended SQL column name.\n        throw new DbError(\n          `Invalid Neon column mapping for \"${collection}\".${field}: column target must be a string`,\n          \"QUERY_ERROR\",\n        );\n      }\n    }\n  }\n\n  if (config.idColumn !== undefined && typeof config.idColumn !== \"string\") {\n    throw new DbError(\n      `Invalid Neon idColumn for collection \"${collection}\": must be a string`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  if (\n    config.mode !== undefined &&\n    config.mode !== \"table\" &&\n    config.mode !== \"generic-record\"\n  ) {\n    throw new DbError(\n      `Invalid Neon table mode for collection: ${collection}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return {\n    columns: (config.columns ?? {}) as Record<string, string>,\n    idColumn: config.idColumn ?? \"id\",\n    mode: config.mode ?? \"table\",\n    tableSql: quoteQualifiedIdentifier(config.name, collection),\n  };\n}\n\nfunction columnSql(table: NormalizedTable, field: string): string {\n  const mapped = table.columns[field] ?? field;\n  return quoteIdentifier(mapped, field);\n}\n\nfunction assertNonNegativeInteger(value: unknown, option: string): number {\n  if (typeof value !== \"number\" || !Number.isInteger(value) || value < 0) {\n    throw new DbError(\n      `Neon list option \"${option}\" must be a non-negative integer`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return value;\n}\n\nfunction normalizeListOptions(\n  table: NormalizedTable,\n  options?: ListOptions,\n): NormalizedListOptions {\n  if (options === undefined) {\n    return { order: \"asc\" };\n  }\n\n  if (!isRecord(options)) {\n    throw new DbError(\"Neon list options must be an object\", \"QUERY_ERROR\");\n  }\n\n  if (\n    options.order !== undefined &&\n    options.order !== \"asc\" &&\n    options.order !== \"desc\"\n  ) {\n    throw new DbError(\n      'Neon list option \"order\" must be \"asc\" or \"desc\"',\n      \"QUERY_ERROR\",\n    );\n  }\n\n  const normalized: NormalizedListOptions = {\n    order: options.order === \"desc\" ? \"desc\" : \"asc\",\n  };\n\n  if (options.limit !== undefined) {\n    normalized.limit = assertNonNegativeInteger(options.limit, \"limit\");\n  }\n\n  if (options.offset !== undefined) {\n    normalized.offset = assertNonNegativeInteger(options.offset, \"offset\");\n  }\n\n  if (options.orderBy !== undefined) {\n    if (typeof options.orderBy !== \"string\" || options.orderBy.length === 0) {\n      throw new DbError(\n        'Neon list option \"orderBy\" must be a non-empty string',\n        \"QUERY_ERROR\",\n      );\n    }\n    normalized.orderColumn = columnSql(table, options.orderBy);\n  } else if (\n    normalized.limit !== undefined ||\n    normalized.offset !== undefined\n  ) {\n    normalized.orderColumn = columnSql(table, table.idColumn);\n  }\n\n  return normalized;\n}\n\nfunction isComparableValue(value: unknown): value is number | string {\n  return typeof value === \"number\" || typeof value === \"string\";\n}\n\nfunction assertQueryFilter(value: unknown): asserts value is QueryFilter {\n  if (!Array.isArray(value)) {\n    throw new DbError(\"Neon query filter must be an array\", \"QUERY_ERROR\");\n  }\n\n  for (const condition of value) {\n    if (\n      !isRecord(condition) ||\n      typeof condition.field !== \"string\" ||\n      condition.field.length === 0 ||\n      !isQueryOperator(condition.operator)\n    ) {\n      throw new DbError(\n        \"Neon query filter contains an invalid condition\",\n        \"QUERY_ERROR\",\n      );\n    }\n\n    // Per-operator value shape checks mirror the localStorage reference so\n    // gt/gte/lt/lte never reach SQL with non-comparable runtime values (e.g.\n    // booleans, objects, arrays), `in` always receives an array, and\n    // `contains` only operates on strings.\n    switch (condition.operator) {\n      case \"gt\":\n      case \"gte\":\n      case \"lt\":\n      case \"lte\":\n        if (!isComparableValue(condition.value)) {\n          throw new DbError(\n            `Neon query filter \"${condition.operator}\" requires a number or string value`,\n            \"QUERY_ERROR\",\n          );\n        }\n        break;\n      case \"in\":\n        if (!Array.isArray(condition.value)) {\n          throw new DbError(\n            'Neon query filter \"in\" requires an array value',\n            \"QUERY_ERROR\",\n          );\n        }\n        break;\n      case \"contains\":\n        if (typeof condition.value !== \"string\") {\n          throw new DbError(\n            'Neon query filter \"contains\" requires a string value',\n            \"QUERY_ERROR\",\n          );\n        }\n        break;\n      default:\n        break;\n    }\n  }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (!isRecord(value)) {\n    return false;\n  }\n  const proto = Object.getPrototypeOf(value);\n  return proto === null || proto === Object.prototype;\n}\n\nfunction toPlainRecord(value: unknown, operation: string): NeonSqlRow {\n  if (!isPlainObject(value)) {\n    throw new DbError(\n      `Neon ${operation} expected a plain record payload`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return { ...value };\n}\n\nfunction toInsertRecord(value: unknown): NeonSqlRow {\n  const record = toPlainRecord(value, \"insert\");\n\n  if (Object.hasOwn(record, \"id\")) {\n    throw new DbError(\n      'Neon create payload must not include an \"id\" field',\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return record;\n}\n\nfunction toUpdateRecord(\n  value: unknown,\n  table: NormalizedTable,\n  collection: string,\n): NeonSqlRow {\n  const record = toPlainRecord(value, \"update\");\n  const primaryIdFields = Object.keys(record).filter(\n    (field) =>\n      field === \"id\" || (table.columns[field] ?? field) === table.idColumn,\n  );\n\n  if (primaryIdFields.length > 0) {\n    throw new DbError(\n      `Neon update for \"${collection}\" must not include primary id fields: ${primaryIdFields.join(\", \")}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return record;\n}\n\nfunction escapeLikePatternValue(value: unknown, field: string): string {\n  if (typeof value !== \"string\") {\n    throw new DbError(\n      `Operator \"contains\" requires a string value for ${field}`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return value.replace(/[\\\\%_]/g, \"\\\\$&\");\n}\n\nfunction rowsFromResult<TRow extends NeonSqlRow>(\n  result: NeonSqlResult<TRow>,\n  operation: string,\n): TRow[] {\n  const rows = Array.isArray(result)\n    ? result\n    : isRecord(result) && Array.isArray(result.rows)\n      ? result.rows\n      : null;\n\n  if (!rows?.every(isRecord)) {\n    throw new DbError(\n      `Neon ${operation} returned a malformed SQL result`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return rows as TRow[];\n}\n\nfunction coerceNullableRecord<T>(\n  value: unknown,\n  table: NormalizedTable,\n  operation: string,\n): T | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n  if (!isRecord(value)) {\n    throw new DbError(\n      `Neon ${operation} returned a non-record payload`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return fromSqlRow(table, value as NeonSqlRow) as T;\n}\n\n// Reverse the field→column mapping declared on the table so SQL rows come\n// back to consumers under the public field names (and the idColumn — if\n// renamed — surfaces as `id`). Tables with no `columns` config are pass-through.\nfunction fromSqlRow(table: NormalizedTable, row: NeonSqlRow): NeonSqlRow {\n  const reverseMap: Record<string, string> = {};\n  for (const [field, column] of Object.entries(table.columns)) {\n    reverseMap[column] = field;\n  }\n  if (table.idColumn !== \"id\") {\n    reverseMap[table.idColumn] = \"id\";\n  }\n\n  // Fast path: no rewrites configured for this table.\n  if (Object.keys(reverseMap).length === 0) return row;\n\n  const out: NeonSqlRow = {};\n  for (const [sqlKey, value] of Object.entries(row)) {\n    const publicKey = reverseMap[sqlKey] ?? sqlKey;\n    out[publicKey] = value;\n  }\n  return out;\n}\n\nfunction coerceCreatedRecord<T extends Record<string, unknown>>(\n  value: unknown,\n  table: NormalizedTable,\n  collection: string,\n): T & { id: string } {\n  if (!isRecord(value)) {\n    throw new DbError(\n      `Neon insert into \"${collection}\" did not return a record`,\n      \"QUERY_ERROR\",\n    );\n  }\n  const mapped = fromSqlRow(table, value);\n  if (typeof mapped.id !== \"string\") {\n    throw new DbError(\n      `Neon insert into \"${collection}\" did not return a record with a string id`,\n      \"QUERY_ERROR\",\n    );\n  }\n  return mapped as T & { id: string };\n}\n\nfunction coerceRecordList<T>(\n  value: unknown,\n  table: NormalizedTable,\n  operation: string,\n): T[] {\n  if (!Array.isArray(value) || !value.every(isRecord)) {\n    throw new DbError(\n      `Neon ${operation} returned a non-record list`,\n      \"QUERY_ERROR\",\n    );\n  }\n  return value.map((row) => fromSqlRow(table, row as NeonSqlRow)) as T[];\n}\n\nfunction coerceCountResult(\n  rows: readonly NeonSqlRow[],\n  collection: string,\n): number {\n  if (rows.length !== 1 || !isRecord(rows[0]) || !(\"count\" in rows[0])) {\n    throw new DbError(\n      `Neon count for \"${collection}\" returned an invalid count result`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  const value = rows[0].count;\n  const count =\n    typeof value === \"number\"\n      ? value\n      : typeof value === \"string\" && value.trim().length > 0\n        ? Number(value)\n        : Number.NaN;\n\n  if (!Number.isInteger(count) || count < 0) {\n    throw new DbError(\n      `Neon count for \"${collection}\" returned an invalid count value`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return count;\n}\n\nfunction addParam(params: unknown[], value: unknown): string {\n  params.push(value);\n  return `$${params.length}`;\n}\n\nfunction createDefaultId(): string {\n  const randomUUID = globalThis.crypto?.randomUUID;\n  if (typeof randomUUID === \"function\") {\n    return randomUUID.call(globalThis.crypto);\n  }\n\n  return `neon_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;\n}\n\nfunction toGenericPayload(value: unknown, operation: string): NeonSqlRow {\n  return toPlainRecord(value, operation);\n}\n\nfunction fromGenericRecordRow(row: unknown, operation: string): NeonSqlRow {\n  if (!isRecord(row) || typeof row.id !== \"string\") {\n    throw new DbError(\n      `Neon ${operation} returned an invalid generic-record row`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  let payload = row.payload;\n  if (typeof payload === \"string\") {\n    try {\n      payload = JSON.parse(payload);\n    } catch (error) {\n      throw new DbError(\n        `Neon ${operation} returned an invalid generic-record payload`,\n        \"QUERY_ERROR\",\n        error,\n      );\n    }\n  }\n  if (!isRecord(payload)) {\n    throw new DbError(\n      `Neon ${operation} returned an invalid generic-record payload`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return { ...payload, id: row.id };\n}\n\nfunction coerceGenericRecord<T>(value: unknown, operation: string): T | null {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  return fromGenericRecordRow(value, operation) as T;\n}\n\nfunction coerceGenericCreatedRecord<T extends Record<string, unknown>>(\n  value: unknown,\n  collection: string,\n): T & { id: string } {\n  const record = coerceGenericRecord<T & { id: string }>(\n    value,\n    `insert into \"${collection}\"`,\n  );\n  if (record === null) {\n    throw new DbError(\n      `Neon insert into \"${collection}\" did not return a generic record`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return record;\n}\n\nfunction coerceGenericRecordList<T>(\n  rows: readonly NeonSqlRow[],\n  operation: string,\n): T[] {\n  return rows.map((row) => fromGenericRecordRow(row, operation) as T);\n}\n\nfunction normalizeGenericListOptions(\n  options?: ListOptions,\n): NormalizedListOptions {\n  const normalized = normalizeListOptions(\n    {\n      columns: {},\n      idColumn: \"id\",\n      mode: \"table\",\n      tableSql: \"unused\",\n    },\n    options,\n  );\n\n  return normalized;\n}\n\nfunction genericFieldValueSql(params: unknown[], field: string): string {\n  return `\"payload\" ->> ${addParam(params, field)}`;\n}\n\nfunction genericFieldJsonSql(params: unknown[], field: string): string {\n  return `\"payload\" -> ${addParam(params, field)}`;\n}\n\nfunction genericJsonNullPredicateSql(params: unknown[], field: string): string {\n  const fieldParam = addParam(params, field);\n  return `(\"payload\" ? ${fieldParam} and jsonb_typeof(\"payload\" -> ${fieldParam}) = 'null')`;\n}\n\nfunction addGenericJsonValueParam(\n  params: unknown[],\n  value: unknown,\n  field: string,\n): string {\n  const serialized = JSON.stringify(value);\n  if (serialized === undefined) {\n    throw new DbError(\n      `Neon generic-record filter for \"${field}\" requires a JSON-serializable value`,\n      \"QUERY_ERROR\",\n    );\n  }\n\n  return `${addParam(params, serialized)}::jsonb`;\n}\n\nfunction buildGenericWhereClause(\n  collection: string,\n  filter: QueryFilter,\n): Predicate {\n  assertQueryFilter(filter);\n\n  const params: unknown[] = [collection];\n  const clauses = [`\"collection\" = $1`];\n\n  for (const condition of filter) {\n    switch (condition.operator) {\n      case \"eq\":\n        if (condition.value === null) {\n          clauses.push(genericJsonNullPredicateSql(params, condition.field));\n        } else {\n          const valueSql = genericFieldJsonSql(params, condition.field);\n          clauses.push(\n            `${valueSql} = ${addGenericJsonValueParam(\n              params,\n              condition.value,\n              condition.field,\n            )}`,\n          );\n        }\n        break;\n      case \"neq\":\n        if (condition.value === null) {\n          clauses.push(\n            `not ${genericJsonNullPredicateSql(params, condition.field)}`,\n          );\n        } else {\n          const valueSql = genericFieldJsonSql(params, condition.field);\n          clauses.push(\n            `(${valueSql} is null or ${valueSql} <> ${addGenericJsonValueParam(\n              params,\n              condition.value,\n              condition.field,\n            )})`,\n          );\n        }\n        break;\n      case \"gt\":\n        {\n          const valueSql = genericFieldValueSql(params, condition.field);\n          clauses.push(\n            typeof condition.value === \"number\"\n              ? `(${valueSql})::numeric > ${addParam(params, condition.value)}`\n              : `${valueSql} > ${addParam(params, String(condition.value))}`,\n          );\n        }\n        break;\n      case \"gte\":\n        {\n          const valueSql = genericFieldValueSql(params, condition.field);\n          clauses.push(\n            typeof condition.value === \"number\"\n              ? `(${valueSql})::numeric >= ${addParam(params, condition.value)}`\n              : `${valueSql} >= ${addParam(params, String(condition.value))}`,\n          );\n        }\n        break;\n      case \"lt\":\n        {\n          const valueSql = genericFieldValueSql(params, condition.field);\n          clauses.push(\n            typeof condition.value === \"number\"\n              ? `(${valueSql})::numeric < ${addParam(params, condition.value)}`\n              : `${valueSql} < ${addParam(params, String(condition.value))}`,\n          );\n        }\n        break;\n      case \"lte\":\n        {\n          const valueSql = genericFieldValueSql(params, condition.field);\n          clauses.push(\n            typeof condition.value === \"number\"\n              ? `(${valueSql})::numeric <= ${addParam(params, condition.value)}`\n              : `${valueSql} <= ${addParam(params, String(condition.value))}`,\n          );\n        }\n        break;\n      case \"in\": {\n        if (!Array.isArray(condition.value)) {\n          throw new DbError(\n            `Operator \"in\" requires an array value for ${condition.field}`,\n            \"QUERY_ERROR\",\n          );\n        }\n        if (condition.value.length === 0) {\n          clauses.push(\"false\");\n          break;\n        }\n        const valueSql = genericFieldValueSql(params, condition.field);\n        clauses.push(\n          `${valueSql} in (${condition.value\n            .map((item) => addParam(params, String(item)))\n            .join(\", \")})`,\n        );\n        break;\n      }\n      case \"contains\": {\n        const valueSql = genericFieldValueSql(params, condition.field);\n        clauses.push(\n          `${valueSql} like ${addParam(\n            params,\n            `%${escapeLikePatternValue(condition.value, condition.field)}%`,\n          )} escape '\\\\'`,\n        );\n        break;\n      }\n      default:\n        throw new DbError(\n          `Unsupported Neon query operator: ${condition.operator}`,\n          \"QUERY_ERROR\",\n        );\n    }\n  }\n\n  return { params, sql: ` where ${clauses.join(\" and \")}` };\n}\n\nfunction buildWhereClause(\n  table: NormalizedTable,\n  filter: QueryFilter,\n): Predicate {\n  assertQueryFilter(filter);\n\n  if (filter.length === 0) {\n    return { params: [], sql: \"\" };\n  }\n\n  const params: unknown[] = [];\n  const clauses = filter.map((condition: QueryCondition) => {\n    const column = columnSql(table, condition.field);\n\n    switch (condition.operator) {\n      case \"eq\":\n        // SQL `= NULL` never matches; use `IS NULL` so Neon parity matches\n        // the JS-equality semantics of memory/cloudflareKV adapters.\n        return condition.value === null\n          ? `${column} is null`\n          : `${column} = ${addParam(params, condition.value)}`;\n      case \"neq\":\n        // Same: `<> NULL` never matches; use `IS NOT NULL`.\n        return condition.value === null\n          ? `${column} is not null`\n          : `${column} <> ${addParam(params, condition.value)}`;\n      case \"gt\":\n        return `${column} > ${addParam(params, condition.value)}`;\n      case \"gte\":\n        return `${column} >= ${addParam(params, condition.value)}`;\n      case \"lt\":\n        return `${column} < ${addParam(params, condition.value)}`;\n      case \"lte\":\n        return `${column} <= ${addParam(params, condition.value)}`;\n      case \"in\": {\n        if (!Array.isArray(condition.value)) {\n          throw new DbError(\n            `Operator \"in\" requires an array value for ${condition.field}`,\n            \"QUERY_ERROR\",\n          );\n        }\n        if (condition.value.length === 0) {\n          return \"false\";\n        }\n        // Split NULL entries from concrete values: SQL `IN (NULL)` never\n        // matches NULL rows. Generate `(column IN (...) OR column IS NULL)`\n        // when the in-list contains a null, matching the JS Array.includes\n        // semantics used by memory/cloudflareKV.\n        const hasNull = condition.value.some((v) => v === null);\n        const nonNull = condition.value.filter((v) => v !== null);\n        if (nonNull.length === 0) {\n          // List was [null] (and possibly other nulls) — only null can match.\n          return `${column} is null`;\n        }\n        const placeholders = nonNull.map((item) => addParam(params, item));\n        const inClause = `${column} in (${placeholders.join(\", \")})`;\n        return hasNull ? `(${inClause} or ${column} is null)` : inClause;\n      }\n      case \"contains\":\n        return `${column} like ${addParam(\n          params,\n          `%${escapeLikePatternValue(condition.value, condition.field)}%`,\n        )} escape '\\\\'`;\n      default:\n        throw new DbError(\n          `Unsupported Neon query operator: ${condition.operator}`,\n          \"QUERY_ERROR\",\n        );\n    }\n  });\n\n  return { params, sql: ` where ${clauses.join(\" and \")}` };\n}\n\nfunction getErrorText(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return typeof error === \"string\" ? error : \"\";\n}\n\nfunction getErrorCode(error: unknown): string | undefined {\n  if (!isRecord(error)) {\n    return undefined;\n  }\n\n  const code = error.code ?? error.errno;\n  return typeof code === \"string\" ? code.toUpperCase() : undefined;\n}\n\nfunction isConnectionFailure(error: unknown): boolean {\n  const code = getErrorCode(error);\n\n  if (\n    code !== undefined &&\n    (code.startsWith(\"08\") ||\n      code === \"53300\" ||\n      code === \"57P01\" ||\n      code === \"57P02\" ||\n      code === \"57P03\" ||\n      code === \"EAI_AGAIN\" ||\n      code === \"ECONNREFUSED\" ||\n      code === \"ECONNRESET\" ||\n      code === \"ENETUNREACH\" ||\n      code === \"ENOTFOUND\" ||\n      code === \"ETIMEDOUT\")\n  ) {\n    return true;\n  }\n\n  return /\\b(connection|network|timeout|timed out|fetch failed)\\b/i.test(\n    getErrorText(error),\n  );\n}\n\nfunction isConstraintFailure(error: unknown): boolean {\n  const code = getErrorCode(error);\n  return (\n    code === \"23502\" ||\n    code === \"23503\" ||\n    code === \"23505\" ||\n    code === \"23514\" ||\n    code === \"23P01\"\n  );\n}\n\nasync function runSql<TRow extends NeonSqlRow>(\n  sql: NeonSqlExecutor,\n  text: string,\n  params: readonly unknown[],\n  operation: string,\n): Promise<TRow[]> {\n  try {\n    return rowsFromResult(await sql<TRow>(text, params), operation);\n  } catch (error) {\n    if (error instanceof DbError) {\n      throw error;\n    }\n    throw new DbError(\n      `Neon ${operation} failed`,\n      isConnectionFailure(error)\n        ? \"CONNECTION_ERROR\"\n        : isConstraintFailure(error)\n          ? \"CONSTRAINT_VIOLATION\"\n          : \"QUERY_ERROR\",\n      error,\n    );\n  }\n}\n\n/**\n * Creates a Neon-backed database adapter using native parameterized SQL. The\n * caller owns the Neon connection and table schema; this package owns only the\n * shared `DbAdapter` behavior and SDK-free binding validation.\n */\nexport function createNeonDbAdapter(\n  options: CreateNeonDbAdapterOptions & {\n    transaction: NonNullable<CreateNeonDbAdapterOptions[\"transaction\"]>;\n  },\n): NeonDbAdapter;\nexport function createNeonDbAdapter(\n  options: CreateNeonDbAdapterOptions,\n): DbAdapter;\nexport function createNeonDbAdapter(\n  options: CreateNeonDbAdapterOptions,\n): DbAdapter {\n  assertFactoryOptions(options);\n\n  const { client, idFactory, tables, transaction } = options;\n  const outerSql = toSqlExecutor(client);\n\n  const buildAdapter = (sql: NeonSqlExecutor): DbAdapter => ({\n    async create<T extends Record<string, unknown>>(\n      collection: string,\n      data: Omit<T, \"id\">,\n    ) {\n      const table = normalizeTableConfig(tables, collection);\n      const record = toInsertRecord(data);\n      if (table.mode === \"generic-record\") {\n        const id = idFactory?.() ?? createDefaultId();\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `insert into ${table.tableSql} (\"collection\", \"id\", \"payload\") values ($1, $2, $3::jsonb) returning \"id\", \"payload\"`,\n          [collection, id, JSON.stringify(record)],\n          `insert into \"${collection}\"`,\n        );\n\n        return coerceGenericCreatedRecord<T>(rows[0], collection);\n      }\n\n      const generatedId = idFactory?.() ?? createDefaultId();\n      const entriesWithoutId = Object.entries(record);\n      const entries: Array<[string, unknown]> = [\n        [table.idColumn, generatedId],\n        ...entriesWithoutId,\n      ];\n      const text = `insert into ${table.tableSql} (${entries\n        .map(([field]) => columnSql(table, field))\n        .join(\", \")}) values (${entries\n        .map((_, index) => `$${index + 1}`)\n        .join(\", \")}) returning *`;\n      const rows = await runSql<T & { id: string }>(\n        sql,\n        text,\n        entries.map(([, value]) => value),\n        `insert into \"${collection}\"`,\n      );\n\n      return coerceCreatedRecord<T>(rows[0], table, collection);\n    },\n\n    async get<T>(collection: string, id: string) {\n      const table = normalizeTableConfig(tables, collection);\n      if (table.mode === \"generic-record\") {\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `select \"id\", \"payload\" from ${table.tableSql} where \"collection\" = $1 and \"id\" = $2 limit 1`,\n          [collection, id],\n          `get from \"${collection}\"`,\n        );\n\n        return coerceGenericRecord<T>(rows[0], `get from \"${collection}\"`);\n      }\n\n      const rows = await runSql<NeonSqlRow>(\n        sql,\n        `select * from ${table.tableSql} where ${columnSql(\n          table,\n          table.idColumn,\n        )} = $1 limit 1`,\n        [id],\n        `get from \"${collection}\"`,\n      );\n\n      return coerceNullableRecord<T>(\n        rows[0],\n        table,\n        `get from \"${collection}\"`,\n      );\n    },\n\n    async update<T extends Record<string, unknown>>(\n      collection: string,\n      id: string,\n      data: Partial<T>,\n    ) {\n      const table = normalizeTableConfig(tables, collection);\n      const record = toUpdateRecord(data, table, collection);\n      if (table.mode === \"generic-record\") {\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `update ${table.tableSql} set \"payload\" = \"payload\" || $3::jsonb where \"collection\" = $1 and \"id\" = $2 returning \"id\", \"payload\"`,\n          [collection, id, JSON.stringify(toGenericPayload(record, \"update\"))],\n          `update in \"${collection}\"`,\n        );\n\n        return coerceGenericRecord<T>(rows[0], `update in \"${collection}\"`);\n      }\n\n      const entries = Object.entries(record);\n\n      if (entries.length === 0) {\n        // Empty Partial<T> updates are a no-op per the DbAdapter contract;\n        // sibling memory/cloudflareKV adapters return the existing record\n        // without writing, so mirror that by selecting the row instead of\n        // emitting an invalid `set` clause.\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `select * from ${table.tableSql} where ${columnSql(\n            table,\n            table.idColumn,\n          )} = $1 limit 1`,\n          [id],\n          `update in \"${collection}\"`,\n        );\n\n        return coerceNullableRecord<T>(\n          rows[0],\n          table,\n          `update in \"${collection}\"`,\n        );\n      }\n\n      const params = entries.map(([, value]) => value);\n      params.push(id);\n      const rows = await runSql<NeonSqlRow>(\n        sql,\n        `update ${table.tableSql} set ${entries\n          .map(([field], index) => `${columnSql(table, field)} = $${index + 1}`)\n          .join(\", \")} where ${columnSql(table, table.idColumn)} = $${\n          params.length\n        } returning *`,\n        params,\n        `update in \"${collection}\"`,\n      );\n\n      return coerceNullableRecord<T>(\n        rows[0],\n        table,\n        `update in \"${collection}\"`,\n      );\n    },\n\n    async delete(collection: string, id: string) {\n      const table = normalizeTableConfig(tables, collection);\n      if (table.mode === \"generic-record\") {\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `delete from ${table.tableSql} where \"collection\" = $1 and \"id\" = $2 returning \"id\"`,\n          [collection, id],\n          `delete from \"${collection}\"`,\n        );\n\n        return rows.length > 0;\n      }\n\n      const rows = await runSql<NeonSqlRow>(\n        sql,\n        `delete from ${table.tableSql} where ${columnSql(\n          table,\n          table.idColumn,\n        )} = $1 returning ${columnSql(table, table.idColumn)}`,\n        [id],\n        `delete from \"${collection}\"`,\n      );\n\n      return rows.length > 0;\n    },\n\n    async list<T>(collection: string, options?: ListOptions) {\n      const table = normalizeTableConfig(tables, collection);\n      if (table.mode === \"generic-record\") {\n        const normalized = normalizeGenericListOptions(options);\n        const params: unknown[] = [collection];\n        let text = `select \"id\", \"payload\" from ${table.tableSql} where \"collection\" = $1`;\n\n        if (normalized.orderColumn !== undefined) {\n          const orderField = options?.orderBy ?? \"id\";\n          const orderColumn =\n            orderField === \"id\"\n              ? '\"id\"'\n              : `\"payload\" ->> ${addParam(params, orderField)}`;\n          text += ` order by ${orderColumn} ${normalized.order}`;\n        }\n        if (normalized.limit !== undefined) {\n          text += ` limit ${addParam(params, normalized.limit)}`;\n        }\n        if (normalized.offset !== undefined) {\n          text += ` offset ${addParam(params, normalized.offset)}`;\n        }\n\n        return coerceGenericRecordList<T>(\n          await runSql<NeonSqlRow>(sql, text, params, `list \"${collection}\"`),\n          `list \"${collection}\"`,\n        );\n      }\n\n      const normalized = normalizeListOptions(table, options);\n      const params: unknown[] = [];\n      let text = `select * from ${table.tableSql}`;\n\n      if (normalized.orderColumn !== undefined) {\n        text += ` order by ${normalized.orderColumn} ${normalized.order}`;\n      }\n      if (normalized.limit !== undefined) {\n        text += ` limit ${addParam(params, normalized.limit)}`;\n      }\n      if (normalized.offset !== undefined) {\n        text += ` offset ${addParam(params, normalized.offset)}`;\n      }\n\n      return coerceRecordList<T>(\n        await runSql<NeonSqlRow>(sql, text, params, `list \"${collection}\"`),\n        table,\n        `list \"${collection}\"`,\n      );\n    },\n\n    async query<T>(collection: string, filter: QueryFilter) {\n      const table = normalizeTableConfig(tables, collection);\n      if (table.mode === \"generic-record\") {\n        const predicate = buildGenericWhereClause(collection, filter);\n\n        return coerceGenericRecordList<T>(\n          await runSql<NeonSqlRow>(\n            sql,\n            `select \"id\", \"payload\" from ${table.tableSql}${predicate.sql}`,\n            predicate.params,\n            `query \"${collection}\"`,\n          ),\n          `query \"${collection}\"`,\n        );\n      }\n\n      const predicate = buildWhereClause(table, filter);\n\n      return coerceRecordList<T>(\n        await runSql<NeonSqlRow>(\n          sql,\n          `select * from ${table.tableSql}${predicate.sql}`,\n          predicate.params,\n          `query \"${collection}\"`,\n        ),\n        table,\n        `query \"${collection}\"`,\n      );\n    },\n\n    async count(collection: string, filter?: QueryFilter) {\n      const table = normalizeTableConfig(tables, collection);\n      if (table.mode === \"generic-record\") {\n        const predicate =\n          filter === undefined\n            ? { params: [collection], sql: ' where \"collection\" = $1' }\n            : buildGenericWhereClause(collection, filter);\n        const rows = await runSql<NeonSqlRow>(\n          sql,\n          `select count(*) as count from ${table.tableSql}${predicate.sql}`,\n          predicate.params,\n          `count \"${collection}\"`,\n        );\n\n        return coerceCountResult(rows, collection);\n      }\n\n      const predicate =\n        filter === undefined\n          ? { params: [], sql: \"\" }\n          : buildWhereClause(table, filter);\n      const rows = await runSql<NeonSqlRow>(\n        sql,\n        `select count(*) as count from ${table.tableSql}${predicate.sql}`,\n        predicate.params,\n        `count \"${collection}\"`,\n      );\n\n      return coerceCountResult(rows, collection);\n    },\n  });\n\n  const adapter = buildAdapter(outerSql);\n\n  if (!transaction) {\n    return adapter;\n  }\n\n  const transactionalAdapter: NeonDbAdapter = {\n    ...adapter,\n    async transaction<TResult>(handler: NeonTransactionHandler<TResult>) {\n      return transaction(handler, {\n        adapter: transactionalAdapter,\n        client,\n        sql: outerSql,\n        tables,\n        // Build a `DbAdapter` whose CRUD operations are bound to the\n        // transaction-scoped SQL executor. Runners must invoke\n        // `createScopedAdapter(txSql)` inside their BEGIN/COMMIT block and\n        // expose the result to the handler so `context.adapter.create/...`\n        // execute inside the transaction. The legacy `adapter` field is kept\n        // for back-compat but is intentionally bound to the outer client.\n        createScopedAdapter: (scopedSql: NeonSqlExecutor) =>\n          buildAdapter(scopedSql),\n      });\n    },\n  };\n\n  return transactionalAdapter;\n}\n\nfunction hasTransaction(adapter: DbAdapter): adapter is NeonDbAdapter {\n  return (\n    \"transaction\" in adapter &&\n    typeof (adapter as { transaction?: unknown }).transaction === \"function\"\n  );\n}\n\n/**\n * Wraps any non-`DbError` failure surfaced by the delegated adapter in a typed\n * `DbError`, preserving the original `cause` so downstream retry classification\n * and error-handling middleware can introspect it. `DbError` instances pass\n * through unchanged.\n */\nasync function callDelegated<T>(\n  method: string,\n  invoke: () => Promise<T>,\n): Promise<T> {\n  try {\n    return await invoke();\n  } catch (error) {\n    if (error instanceof DbError) {\n      throw error;\n    }\n    const detail = error instanceof Error ? `: ${error.message}` : \"\";\n    throw new DbError(\n      `Neon adapter ${method} failed${detail}`,\n      \"QUERY_ERROR\",\n      error,\n    );\n  }\n}\n\n/**\n * Validates or constructs a Neon `DbAdapter` for provider registries and\n * downstream app bindings. Pass native SQL factory options to build the\n * SDK-free facade locally, or pass an existing Neon adapter with provider\n * metadata returned by `@geenius/db`.\n */\nexport function withNeonDb(\n  config: CreateNeonDbAdapterOptions & {\n    transaction: NonNullable<CreateNeonDbAdapterOptions[\"transaction\"]>;\n  },\n): NeonDbAdapter;\nexport function withNeonDb(config: CreateNeonDbAdapterOptions): DbAdapter;\nexport function withNeonDb(\n  config: NeonDbAdapterOptions & { adapter: NeonDbFactoryOutput },\n): NeonDbAdapter;\nexport function withNeonDb(config: NeonDbAdapterInput): DbAdapter;\nexport function withNeonDb(config: NeonDbAdapterInput): DbAdapter {\n  assertNeonBindingMetadata(config);\n  const adapter = getAdapterCandidate(config);\n  assertDbAdapter(adapter);\n\n  const wrapped: DbAdapter = {\n    async create<T extends Record<string, unknown>>(\n      collection: string,\n      data: Omit<T, \"id\">,\n    ) {\n      return await callDelegated(\"create\", () =>\n        adapter.create<T>(collection, data),\n      );\n    },\n    async get<T>(collection: string, id: string) {\n      return await callDelegated(\"get\", () => adapter.get<T>(collection, id));\n    },\n    async update<T extends Record<string, unknown>>(\n      collection: string,\n      id: string,\n      data: Partial<T>,\n    ) {\n      return await callDelegated(\"update\", () =>\n        adapter.update<T>(collection, id, data),\n      );\n    },\n    async delete(collection: string, id: string) {\n      return await callDelegated(\"delete\", () =>\n        adapter.delete(collection, id),\n      );\n    },\n    async list<T>(collection: string, options?: ListOptions) {\n      return await callDelegated(\"list\", () =>\n        adapter.list<T>(collection, options),\n      );\n    },\n    async query<T>(collection: string, filter: QueryFilter) {\n      return await callDelegated(\"query\", () =>\n        adapter.query<T>(collection, filter),\n      );\n    },\n    async count(collection: string, filter?: QueryFilter) {\n      return await callDelegated(\"count\", () =>\n        adapter.count(collection, filter),\n      );\n    },\n  };\n\n  if (!hasTransaction(adapter)) {\n    return wrapped;\n  }\n\n  const wrappedWithTransaction: NeonDbAdapter = {\n    ...wrapped,\n    async transaction<TResult>(handler: NeonTransactionHandler<TResult>) {\n      return await callDelegated(\"transaction\", () =>\n        adapter.transaction(handler),\n      );\n    },\n  };\n\n  return wrappedWithTransaction;\n}\n","/**\n * @module migrations\n * @package @geenius/adapters/neon\n * @description Declares the idempotent Neon/Postgres schema contract for the\n * generic adapter-record table used by conformance and local backend swaps.\n */\n\nimport { NeonBindingError } from \"./errors\";\nimport type { NeonMigration, NeonSqlClient, NeonSqlExecutor } from \"./types\";\n\n/**\n * Table names owned by the Neon adapters backend contract. Consumers can use\n * this list to verify their schema before enabling the conformance adapter.\n */\nexport const neonAdapterTables = [\"geenius_adapter_records\"] as const;\n\n/**\n * Idempotent SQL migration for the generic adapter records table used by the\n * Neon conformance adapter. The statement avoids provider SDK imports and can\n * run through any Postgres-compatible executor.\n */\nexport const NEON_MIGRATION_0001_ADAPTERS_CORE = `CREATE TABLE IF NOT EXISTS geenius_adapter_records (\n  collection text NOT NULL,\n  id text NOT NULL,\n  payload jsonb NOT NULL,\n  created_at timestamptz NOT NULL DEFAULT now(),\n  updated_at timestamptz NOT NULL DEFAULT now(),\n  PRIMARY KEY (collection, id)\n);\n\nCREATE INDEX IF NOT EXISTS geenius_adapter_records_by_collection\n  ON geenius_adapter_records(collection);\n\nCREATE INDEX IF NOT EXISTS geenius_adapter_records_payload_gin\n  ON geenius_adapter_records USING gin (payload);\n\nCREATE OR REPLACE FUNCTION geenius_adapter_records_set_updated_at()\nRETURNS trigger AS $$\nBEGIN\n  NEW.updated_at = now();\n  RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n\nDROP TRIGGER IF EXISTS geenius_adapter_records_set_updated_at\n  ON geenius_adapter_records;\n\nCREATE TRIGGER geenius_adapter_records_set_updated_at\n  BEFORE UPDATE ON geenius_adapter_records\n  FOR EACH ROW\n  EXECUTE FUNCTION geenius_adapter_records_set_updated_at();`;\n\n/**\n * Ordered Neon migrations shipped by this package. Apply them in sequence\n * before using the generic adapter-record table in tests or local bindings.\n */\nexport const neonMigrations = Object.freeze([\n  Object.freeze({\n    id: \"0001_adapters_core\",\n    sql: NEON_MIGRATION_0001_ADAPTERS_CORE,\n  }),\n]) satisfies readonly NeonMigration[];\n\nfunction isSqlExecutor(value: unknown): value is NeonSqlExecutor {\n  return typeof value === \"function\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toSqlExecutor(client: NeonSqlClient): NeonSqlExecutor {\n  if (isSqlExecutor(client)) {\n    return client;\n  }\n\n  if (isRecord(client) && typeof client.query === \"function\") {\n    return (text, params) => client.query(text, params);\n  }\n\n  throw new NeonBindingError(\n    \"applyNeonMigrations expected a SQL executor or object with query().\",\n    \"INVALID_NEON_OPTIONS\",\n  );\n}\n\nfunction assertMigrationList(\n  migrations: unknown,\n): asserts migrations is readonly NeonMigration[] {\n  if (!Array.isArray(migrations)) {\n    throw new NeonBindingError(\n      \"applyNeonMigrations expected migrations to be an array.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n}\n\nfunction assertMigration(\n  migration: unknown,\n): asserts migration is NeonMigration {\n  if (\n    !isRecord(migration) ||\n    typeof migration.id !== \"string\" ||\n    migration.id.length === 0 ||\n    typeof migration.sql !== \"string\" ||\n    migration.sql.trim().length === 0\n  ) {\n    throw new NeonBindingError(\n      \"applyNeonMigrations expected each migration to have a non-empty id and SQL body.\",\n      \"INVALID_NEON_OPTIONS\",\n    );\n  }\n}\n\n/**\n * Applies the ordered Neon migrations through a function or query-object SQL\n * executor and returns the migration ids that completed.\n *\n * @param client - SQL executor function or object exposing `query(sql)`.\n * @param migrations - Ordered migration list; defaults to this package's Neon migrations.\n * @returns Migration ids applied in order.\n * @throws {NeonBindingError} When the client shape is invalid or a migration fails.\n */\nexport async function applyNeonMigrations(\n  client: NeonSqlClient,\n  migrations: readonly NeonMigration[] = neonMigrations,\n): Promise<string[]> {\n  const query = toSqlExecutor(client);\n  assertMigrationList(migrations);\n  const applied: string[] = [];\n\n  for (const migration of migrations) {\n    assertMigration(migration);\n    try {\n      await query(migration.sql);\n    } catch (error) {\n      throw new NeonBindingError(\n        `Failed to apply Neon migration: ${migration.id}`,\n        \"NEON_MIGRATION_FAILED\",\n        error,\n      );\n    }\n    applied.push(migration.id);\n  }\n\n  return applied;\n}\n"]}