{"version":3,"sources":["../src/system-fields.ts","../src/indexes/define-index.ts"],"names":["createSchemaIntrospector","validateNodeIndexKeyContract","parseNodeIndexKeyDirection","hasOwnKey","getNodeScopeColumns","validateEdgeIndexKeysPresence","isInteropProbeKey","jsonPointer","normalizeJsonPointer","parseJsonPointer","resolveFieldTypeInfoAtJsonPointer","fnv1aBase36","MAX_PG_IDENTIFIER_LENGTH","TRUNCATED_IDENTIFIER_MAX_LENGTH","IDENTIFIER_COMPONENT_MAX_LENGTH"],"mappings":"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","file":"chunk-WSWUEV3L.cjs","sourcesContent":["export const NODE_META_KEYS = [\n  \"version\",\n  \"validFrom\",\n  \"validTo\",\n  \"createdAt\",\n  \"updatedAt\",\n  \"deletedAt\",\n] as const;\n\nexport const EDGE_META_KEYS = [\n  \"validFrom\",\n  \"validTo\",\n  \"createdAt\",\n  \"updatedAt\",\n  \"deletedAt\",\n] as const;\n","import { type z } from \"zod\";\n\nimport {\n  IDENTIFIER_COMPONENT_MAX_LENGTH,\n  MAX_PG_IDENTIFIER_LENGTH,\n  TRUNCATED_IDENTIFIER_MAX_LENGTH,\n} from \"../constants\";\nimport {\n  type AnyEdgeType,\n  type KindEntity,\n  type NodeType,\n} from \"../core/types\";\nimport { type ValueType } from \"../query/ast\";\nimport { resolveFieldTypeInfoAtJsonPointer } from \"../query/field-type-info\";\nimport {\n  type JsonPointer,\n  jsonPointer,\n  type JsonPointerInput,\n  type JsonPointerSegment,\n  normalizeJsonPointer,\n  parseJsonPointer,\n} from \"../query/json-pointer\";\nimport {\n  createSchemaIntrospector,\n  type FieldTypeInfo,\n} from \"../query/schema-introspector\";\nimport { EDGE_META_KEYS, NODE_META_KEYS } from \"../system-fields\";\nimport { fnv1aBase36 } from \"../utils/hash\";\nimport { hasOwnKey, isInteropProbeKey } from \"../utils/object\";\nimport {\n  getNodeScopeColumns,\n  parseNodeIndexKeyDirection,\n  validateEdgeIndexKeysPresence,\n  validateNodeIndexKeyContract,\n} from \"./node-key-contract\";\nimport {\n  type EdgeIndexConfig,\n  type EdgeIndexDeclaration,\n  type EdgeIndexDirection,\n  type EdgeIndexWhereBuilder,\n  type IndexFieldInput,\n  type IndexScope,\n  type IndexWhereExpression,\n  type IndexWhereFieldBuilder,\n  type IndexWhereLiteral,\n  type IndexWhereOp,\n  type IndexWhereOperand,\n  type NodeIndexConfig,\n  type NodeIndexDeclaration,\n  type NodeIndexKey,\n  type NodeIndexWhereBuilder,\n  type RelationalIndexMethod,\n  type SystemColumnName,\n} from \"./types\";\n\n// `keySystemColumns` on a node index must fail closed: reject anything that\n// isn't a known node-valid column, not just the known edge-only ones. A\n// caller whose array escapes TypeScript's literal-union checking (`any`-typed\n// data, a value round-tripped through JSON) could otherwise pass a typo'd or\n// otherwise-invalid column that silently reaches SQL DDL generation instead\n// of failing here with a clear error. Derived from the single source of\n// truth (`createSystemColumnMapForNode`, hoisted — see below) rather than a\n// second hand-maintained list, so it can't drift from it.\nconst NODE_KEY_SYSTEM_COLUMNS: ReadonlySet<SystemColumnName> = new Set(\n  [...createSystemColumnMapForNode().values()].map((entry) => entry.column),\n);\n\n// ============================================================\n// Public API\n// ============================================================\n\nexport function defineNodeIndex<N extends NodeType>(\n  node: N,\n  config: NodeIndexConfig<N>,\n): NodeIndexDeclaration {\n  const scope = config.scope ?? \"graphAndKind\";\n  const unique = config.unique ?? false;\n  const keys = normalizeNodeIndexKeysOrThrow(node, config);\n  const keySystemColumns = normalizeKeySystemColumnsOrThrow(\n    keys.length === 0 ? (config.keySystemColumns ?? []) : [],\n    scope,\n    unique,\n  );\n\n  const schemaIntrospector = createSchemaIntrospector(\n    new Map([[node.kind, { schema: node.schema }]]),\n  );\n\n  const { pointers: fields, valueTypes: fieldValueTypes } =\n    normalizeNodeIndexFieldsOrThrow(\n      node,\n      config.fields ?? [],\n      schemaIntrospector,\n      \"fields\",\n      // GIN containment indexes exist precisely for array/object fields,\n      // which the btree guard otherwise rejects.\n      { allowJsonFields: config.method === \"gin\" },\n    );\n\n  const { pointers: coveringFields, valueTypes: coveringFieldValueTypes } =\n    normalizeNodeIndexFieldsOrThrow(\n      node,\n      config.coveringFields ?? [],\n      schemaIntrospector,\n      \"coveringFields\",\n      {},\n    );\n  assertNoOverlap(fields, coveringFields, \"fields\", \"coveringFields\");\n  const keyContractError = validateNodeIndexKeyContract({\n    keys,\n    fields,\n    coveringFields,\n    keySystemColumns: config.keySystemColumns,\n    unique,\n    scope,\n    method: config.method,\n    fieldsDeclared: config.fields !== undefined,\n  })[0];\n  if (config.keys !== undefined && keyContractError !== undefined) {\n    throw new Error(keyContractError);\n  }\n\n  if (\n    fields.length === 0 &&\n    coveringFields.length === 0 &&\n    keySystemColumns.length === 0 &&\n    keys.length === 0\n  ) {\n    throw new Error(\n      \"Index must declare at least one of keys, fields, coveringFields, or keySystemColumns\",\n    );\n  }\n\n  const where = normalizeWhereInput(config.where, () =>\n    createNodeWhereBuilder(node, schemaIntrospector),\n  );\n\n  const method = resolveAdvancedIndexMethod(config.method, {\n    fieldCount: fields.length,\n    fieldValueType: fieldValueTypes[0],\n    coveringFieldCount: coveringFields.length,\n    keySystemColumnCount: keySystemColumns.length,\n    unique,\n    hasWhere: where !== undefined,\n  });\n\n  const defaultName = generateDefaultIndexName({\n    kind: \"node\",\n    kindName: node.kind,\n    unique,\n    scope,\n    direction: \"none\",\n    fields,\n    coveringFields,\n    keySystemColumns,\n    keys,\n  });\n  const name =\n    config.name ??\n    (method === undefined ? defaultName : `${defaultName}_${method}`);\n\n  // `origin` is intentionally omitted: `\"compile-time\"` is the default\n  // and is canonicalized by absence so the serialized form stays\n  // byte-identical for legacy graphs. `method` and `keySystemColumns`\n  // follow the same rule (absence == \"btree\" / no system key columns).\n  return {\n    entity: \"node\",\n    kind: node.kind,\n    name,\n    fields,\n    fieldValueTypes,\n    coveringFields,\n    coveringFieldValueTypes,\n    unique,\n    scope,\n    where,\n    ...(method === undefined ? {} : { method }),\n    ...(keySystemColumns.length === 0 ? {} : { keySystemColumns }),\n    ...(keys.length === 0 ? {} : { keys }),\n  };\n}\n\nfunction normalizeNodeIndexKeysOrThrow<N extends NodeType>(\n  node: N,\n  config: NodeIndexConfig<N>,\n): readonly NodeIndexKey[] {\n  const inputs = config.keys;\n  if (inputs === undefined) return [];\n  const schemaIntrospector = createSchemaIntrospector(\n    new Map([[node.kind, { schema: node.schema }]]),\n  );\n  const keys: NodeIndexKey[] = [];\n\n  for (const input of inputs) {\n    const direction = parseNodeIndexKeyDirection(input.direction);\n    if (direction === undefined) {\n      throw new Error('Node index key direction must be \"asc\" or \"desc\"');\n    }\n    const hasField = hasOwnKey(input, \"field\");\n    const hasSystem = hasOwnKey(input, \"system\");\n    if (hasField === hasSystem) {\n      throw new Error(\n        \"Node index key must declare exactly one of field or system\",\n      );\n    }\n    if (hasSystem) {\n      const column = input.system;\n      if (column === undefined) {\n        throw new Error(\n          \"Node index key must declare exactly one of field or system\",\n        );\n      }\n      keys.push({ type: \"system\", column, direction });\n      continue;\n    }\n\n    const field = input.field;\n    if (field === undefined) throw new Error(\"Node index key is incomplete\");\n    const normalized = normalizeNodeIndexFieldsOrThrow(\n      node,\n      [field],\n      schemaIntrospector,\n      \"keys\",\n      {},\n    );\n    const pointer = normalized.pointers[0];\n    if (pointer === undefined) throw new Error(\"Node index key is incomplete\");\n    keys.push({\n      type: \"field\",\n      pointer,\n      valueType: normalized.valueTypes[0],\n      direction,\n    });\n  }\n\n  return keys;\n}\n\n/**\n * Validates `keySystemColumns`: must be node system columns (not\n * edge-only `from_kind`/`from_id`/`to_kind`/`to_id`), must not repeat\n * each other, must not repeat a column `scope` already prefixes the key\n * with, and must not combine `\"id\"` with `unique` (every node's `id` is\n * already unique per row, so that combination can never enforce a\n * meaningful constraint across the index's other key columns).\n */\nfunction normalizeKeySystemColumnsOrThrow(\n  columns: readonly SystemColumnName[],\n  scope: IndexScope,\n  unique: boolean,\n): readonly SystemColumnName[] {\n  if (columns.length === 0) return [];\n\n  for (const column of columns) {\n    if (!NODE_KEY_SYSTEM_COLUMNS.has(column)) {\n      throw new Error(\n        `Node index keySystemColumns does not support \"${column}\" (edge-only system column)`,\n      );\n    }\n  }\n  assertUnique(columns, \"keySystemColumns\");\n\n  const scopeColumns = new Set(getNodeScopeColumns(scope));\n  for (const column of columns) {\n    if (scopeColumns.has(column)) {\n      throw new Error(\n        `Node index keySystemColumns must not repeat a column already implied by scope \"${scope}\": \"${column}\"`,\n      );\n    }\n  }\n\n  if (unique && columns.includes(\"id\")) {\n    throw new Error(\n      `unique node indexes cannot include keySystemColumns: [\"id\"]; id is already unique per node, so including it defeats uniqueness across the prop fields`,\n    );\n  }\n\n  // Return a fresh array: the declaration must own an immutable snapshot, not\n  // a reference to the caller's array. Otherwise a post-call mutation of the\n  // original `config.keySystemColumns` bypasses these checks and desyncs the\n  // already-computed name/hash from the compiled index keys.\n  return [...columns];\n}\n\nexport function defineEdgeIndex<E extends AnyEdgeType>(\n  edge: E,\n  config: EdgeIndexConfig<E>,\n): EdgeIndexDeclaration {\n  const edgeKeyError = validateEdgeIndexKeysPresence(config);\n  if (edgeKeyError !== undefined) throw new Error(edgeKeyError);\n  const scope = config.scope ?? \"graphAndKind\";\n  const unique = config.unique ?? false;\n  const direction = config.direction ?? \"none\";\n\n  const schemaIntrospector = createSchemaIntrospector(\n    new Map(),\n    new Map([[edge.kind, { schema: edge.schema }]]),\n  );\n\n  const { pointers: fields, valueTypes: fieldValueTypes } =\n    normalizeEdgeIndexFieldsOrThrow(\n      edge,\n      config.fields,\n      schemaIntrospector,\n      \"fields\",\n      { allowEmpty: false, allowJsonFields: config.method === \"gin\" },\n    );\n\n  const { pointers: coveringFields, valueTypes: coveringFieldValueTypes } =\n    normalizeEdgeIndexFieldsOrThrow(\n      edge,\n      config.coveringFields ?? [],\n      schemaIntrospector,\n      \"coveringFields\",\n      { allowEmpty: true },\n    );\n  assertNoOverlap(fields, coveringFields, \"fields\", \"coveringFields\");\n\n  const where = normalizeWhereInput(config.where, () =>\n    createEdgeWhereBuilder(edge, schemaIntrospector),\n  );\n\n  const method = resolveAdvancedIndexMethod(config.method, {\n    fieldCount: fields.length,\n    fieldValueType: fieldValueTypes[0],\n    coveringFieldCount: coveringFields.length,\n    keySystemColumnCount: 0,\n    unique,\n    hasWhere: where !== undefined,\n  });\n\n  const defaultName = generateDefaultIndexName({\n    kind: \"edge\",\n    kindName: edge.kind,\n    unique,\n    scope,\n    direction,\n    fields,\n    coveringFields,\n  });\n  const name =\n    config.name ??\n    (method === undefined ? defaultName : `${defaultName}_${method}`);\n\n  return {\n    entity: \"edge\",\n    kind: edge.kind,\n    name,\n    fields,\n    fieldValueTypes,\n    coveringFields,\n    coveringFieldValueTypes,\n    unique,\n    scope,\n    direction,\n    where,\n    ...(method === undefined ? {} : { method }),\n  };\n}\n\n/**\n * Validates and canonicalizes a declaration's index method. `\"btree\"` (or\n * absent) canonicalizes to `undefined` so serialized declarations and\n * materialization signatures from before `method` existed stay\n * byte-identical. GIN-family methods index one expression and have no\n * ordered key columns, so multi-field, covering, unique, and partial\n * variants are rejected at declaration time rather than failing as\n * confusing DDL errors at materialization time.\n */\nfunction resolveAdvancedIndexMethod(\n  method: RelationalIndexMethod | undefined,\n  details: Readonly<{\n    fieldCount: number;\n    fieldValueType: ValueType | undefined;\n    coveringFieldCount: number;\n    keySystemColumnCount: number;\n    unique: boolean;\n    hasWhere: boolean;\n  }>,\n): Exclude<RelationalIndexMethod, \"btree\"> | undefined {\n  const resolved = method ?? \"btree\";\n  if (resolved === \"btree\") return undefined;\n  if (details.fieldCount !== 1) {\n    throw new Error(\n      `Index method \"${resolved}\" requires exactly one field (a GIN indexes one expression), got ${details.fieldCount}`,\n    );\n  }\n  // Enforce the field-type contract the methods advertise: gin serves the\n  // array containment predicates, trigram serves the string substring /\n  // case-insensitive predicates. Anything else (including unresolvable\n  // field types) would materialize an index no documented predicate can\n  // ever use, so it is rejected here rather than silently costing write\n  // amplification for nothing.\n  if (resolved === \"gin\" && details.fieldValueType !== \"array\") {\n    throw new Error(\n      details.fieldValueType === \"string\" ?\n        'Index method \"gin\" serves array containment; for substring or case-insensitive matching on a string field use method: \"trigram\"'\n      : `Index method \"gin\" requires an array field (it serves the array containment predicates), got field type \"${details.fieldValueType ?? \"unresolved\"}\"`,\n    );\n  }\n  if (resolved === \"trigram\" && details.fieldValueType !== \"string\") {\n    throw new Error(\n      details.fieldValueType === \"array\" ?\n        'Index method \"trigram\" serves substring matching on string fields; for array containment use method: \"gin\"'\n      : `Index method \"trigram\" requires a string field (it serves substring and case-insensitive matches), got field type \"${details.fieldValueType ?? \"unresolved\"}\"`,\n    );\n  }\n  const extraKeyColumns: readonly [string, number][] = [\n    [\"coveringFields\", details.coveringFieldCount],\n    [\"keySystemColumns\", details.keySystemColumnCount],\n  ];\n  for (const [label, count] of extraKeyColumns) {\n    if (count > 0) {\n      throw new Error(\n        `Index method \"${resolved}\" does not support ${label} (GIN indexes cannot serve index-only scans over extra columns)`,\n      );\n    }\n  }\n  if (details.unique) {\n    throw new Error(\n      `Index method \"${resolved}\" does not support unique (GIN indexes cannot enforce uniqueness)`,\n    );\n  }\n  if (details.hasWhere) {\n    throw new Error(\n      `Index method \"${resolved}\" does not support a partial where clause`,\n    );\n  }\n  return resolved;\n}\n\n// ============================================================\n// WHERE Builder\n// ============================================================\n\n/**\n * The WHERE builder currently only supports top-level fields.\n * Nested field access (e.g., `where.metadata.priority.gt(5)`) is not supported.\n * Use top-level field predicates like `where.status.eq(\"active\")`.\n *\n * For complex nested predicates, use `andWhere()`, `orWhere()`, and `notWhere()`\n * to compose multiple top-level conditions.\n */\n\nfunction normalizeWhereInput<Builder>(\n  input:\n    | ((where: Builder) => IndexWhereExpression)\n    | IndexWhereExpression\n    | undefined,\n  createBuilder: () => Builder,\n): IndexWhereExpression | undefined {\n  if (input === undefined) {\n    return undefined;\n  }\n\n  if (typeof input === \"function\") {\n    return input(createBuilder());\n  }\n\n  return input;\n}\n\ntype NodeShape = Readonly<Record<string, z.ZodType>>;\ntype EdgeShape = Readonly<Record<string, z.ZodType>>;\n\nfunction createNodeWhereBuilder<N extends NodeType>(\n  node: N,\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): NodeIndexWhereBuilder<N> {\n  const shape = getSchemaShape(node.schema);\n  const system = createSystemColumnMapForNode();\n\n  function getOperand(key: string): IndexWhereOperand {\n    const systemColumn = system.get(key);\n    if (systemColumn) {\n      return {\n        __type: \"index_operand_system\",\n        column: systemColumn.column,\n        valueType: systemColumn.valueType,\n      };\n    }\n\n    if (!hasOwnKey(shape, key)) {\n      throw new Error(\n        `Unknown field \"${key}\" in node index WHERE clause for \"${node.kind}\"`,\n      );\n    }\n\n    const info = schemaIntrospector.getFieldTypeInfo(node.kind, key);\n    const valueType = info?.valueType;\n\n    return {\n      __type: \"index_operand_prop\",\n      field: key,\n      valueType,\n    };\n  }\n\n  return createWhereProxy<NodeIndexWhereBuilder<N>>(\n    (key) => getOperand(key),\n    (key) => system.has(key) || hasOwnKey(shape, key),\n  );\n}\n\nfunction createEdgeWhereBuilder<E extends AnyEdgeType>(\n  edge: E,\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): EdgeIndexWhereBuilder<E> {\n  const shape = getSchemaShape(edge.schema);\n  const system = createSystemColumnMapForEdge();\n\n  function getOperand(key: string): IndexWhereOperand {\n    const systemColumn = system.get(key);\n    if (systemColumn) {\n      return {\n        __type: \"index_operand_system\",\n        column: systemColumn.column,\n        valueType: systemColumn.valueType,\n      };\n    }\n\n    if (!hasOwnKey(shape, key)) {\n      throw new Error(\n        `Unknown field \"${key}\" in edge index WHERE clause for \"${edge.kind}\"`,\n      );\n    }\n\n    const info = schemaIntrospector.getEdgeFieldTypeInfo(edge.kind, key);\n    const valueType = info?.valueType;\n\n    return {\n      __type: \"index_operand_prop\",\n      field: key,\n      valueType,\n    };\n  }\n\n  return createWhereProxy<EdgeIndexWhereBuilder<E>>(\n    (key) => getOperand(key),\n    (key) => system.has(key) || hasOwnKey(shape, key),\n  );\n}\n\nfunction createWhereProxy<TBuilder extends object>(\n  getOperand: (key: string) => IndexWhereOperand,\n  declaresField: (key: string) => boolean,\n): TBuilder {\n  // An ORDINARY object target, even though the target is never read: a proxy's\n  // target is what `instanceof`, `Object.getPrototypeOf` and every other\n  // internal method resolve against, and this proxy is handed to the CALLER's\n  // `where:` callback. A null-prototype target made `builder instanceof Object`\n  // answer `false` for no benefit — nothing is ever written to it, so it was\n  // not even the `__proto__`-write protection a data-keyed bag exists for.\n  return new Proxy({} as TBuilder, {\n    get: (_target, property: string | symbol) => {\n      if (typeof property !== \"string\") return;\n\n      // A DECLARED field wins over the interop exemption, for the reason\n      // `isInteropProbeKey` documents: `then` and `toJSON` are legal schema\n      // field names, and refusing them here left a partial index unable to\n      // reference a field the schema declares. Only an UNDECLARED probe\n      // resolves to `undefined`, keeping the builder safe to await or\n      // stringify.\n      if (isInteropProbeKey(property) && !declaresField(property)) return;\n\n      const operand = getOperand(property);\n      return createIndexWhereFieldBuilder(operand);\n    },\n  });\n}\n\nfunction createIndexWhereFieldBuilder<T>(\n  operand: IndexWhereOperand,\n): IndexWhereFieldBuilder<T> {\n  function isNull(): IndexWhereExpression {\n    return { __type: \"index_where_null_check\", operand, op: \"isNull\" };\n  }\n\n  function isNotNull(): IndexWhereExpression {\n    return { __type: \"index_where_null_check\", operand, op: \"isNotNull\" };\n  }\n\n  function comparison(op: IndexWhereOp, value: unknown): IndexWhereExpression {\n    return {\n      __type: \"index_where_comparison\",\n      left: operand,\n      op,\n      right: toLiteralOrThrow(value, operand.valueType),\n    };\n  }\n\n  function listComparison(\n    op: IndexWhereOp,\n    values: readonly unknown[],\n  ): IndexWhereExpression {\n    const literals = values.map((value) =>\n      toLiteralOrThrow(value, operand.valueType),\n    );\n    return {\n      __type: \"index_where_comparison\",\n      left: operand,\n      op,\n      right: literals,\n    };\n  }\n\n  return {\n    eq: (value) => comparison(\"eq\", value),\n    neq: (value) => comparison(\"neq\", value),\n    gt: (value) => comparison(\"gt\", value),\n    gte: (value) => comparison(\"gte\", value),\n    lt: (value) => comparison(\"lt\", value),\n    lte: (value) => comparison(\"lte\", value),\n    in: (values) => listComparison(\"in\", values),\n    notIn: (values) => listComparison(\"notIn\", values),\n    isNull,\n    isNotNull,\n  };\n}\n\nfunction toLiteralOrThrow(\n  value: unknown,\n  preferredType: ValueType | undefined,\n): IndexWhereLiteral {\n  if (value instanceof Date) {\n    return {\n      __type: \"index_where_literal\",\n      value: value.toISOString(),\n      valueType: \"date\",\n    };\n  }\n\n  if (\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    const valueType = inferValueType(value, preferredType);\n    return { __type: \"index_where_literal\", value, valueType };\n  }\n\n  throw new Error(\n    `Unsupported literal value type in index WHERE clause: ${String(value)}`,\n  );\n}\n\nfunction inferValueType(\n  value: string | number | boolean,\n  preferredType: ValueType | undefined,\n): ValueType {\n  if (preferredType === \"date\" && typeof value === \"string\") {\n    return \"date\";\n  }\n  if (preferredType === \"number\" && typeof value === \"string\") {\n    return \"number\";\n  }\n  if (preferredType === \"boolean\" && typeof value === \"string\") {\n    return \"boolean\";\n  }\n\n  if (typeof value === \"string\") return \"string\";\n  if (typeof value === \"number\") return \"number\";\n  return \"boolean\";\n}\n\nfunction toSystemColumnName(metaKey: string): SystemColumnName {\n  const snake = metaKey.replaceAll(/([A-Z])/g, \"_$1\").toLowerCase();\n\n  switch (snake) {\n    case \"deleted_at\":\n    case \"valid_from\":\n    case \"valid_to\":\n    case \"created_at\":\n    case \"updated_at\": {\n      return snake;\n    }\n    default: {\n      throw new Error(`Unsupported system meta key: ${metaKey}`);\n    }\n  }\n}\n\nfunction createSystemColumnMapForNode(): Map<\n  string,\n  Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>\n> {\n  const entries: (readonly [\n    string,\n    Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>,\n  ])[] = [\n    [\"graphId\", { column: \"graph_id\", valueType: \"string\" }],\n    [\"kind\", { column: \"kind\", valueType: \"string\" }],\n    [\"id\", { column: \"id\", valueType: \"string\" }],\n  ];\n\n  for (const key of NODE_META_KEYS) {\n    if (key === \"version\") {\n      entries.push([key, { column: \"version\", valueType: \"number\" }]);\n      continue;\n    }\n    entries.push([key, { column: toSystemColumnName(key), valueType: \"date\" }]);\n  }\n\n  return new Map(entries);\n}\n\nfunction createSystemColumnMapForEdge(): Map<\n  string,\n  Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>\n> {\n  const entries: (readonly [\n    string,\n    Readonly<{ column: SystemColumnName; valueType: ValueType | undefined }>,\n  ])[] = [\n    [\"graphId\", { column: \"graph_id\", valueType: \"string\" }],\n    [\"kind\", { column: \"kind\", valueType: \"string\" }],\n    [\"id\", { column: \"id\", valueType: \"string\" }],\n    [\"fromKind\", { column: \"from_kind\", valueType: \"string\" }],\n    [\"fromId\", { column: \"from_id\", valueType: \"string\" }],\n    [\"toKind\", { column: \"to_kind\", valueType: \"string\" }],\n    [\"toId\", { column: \"to_id\", valueType: \"string\" }],\n  ];\n\n  for (const key of EDGE_META_KEYS) {\n    entries.push([key, { column: toSystemColumnName(key), valueType: \"date\" }]);\n  }\n\n  return new Map(entries);\n}\n\nfunction getSchemaShape(schema: z.ZodType): NodeShape | EdgeShape {\n  if (schema.type !== \"object\") {\n    throw new Error(\"Index definitions require an object schema\");\n  }\n\n  const def = schema.def as { shape?: Record<string, z.ZodType> };\n  const shape = def.shape;\n  if (!shape) {\n    throw new Error(\"Index definitions require a resolvable object shape\");\n  }\n\n  return shape;\n}\n\n// ============================================================\n// Validation\n// ============================================================\n\nfunction assertNonEmpty(values: readonly unknown[], label: string): void {\n  if (values.length === 0) {\n    throw new Error(`Index ${label} must not be empty`);\n  }\n}\n\nfunction assertUnique(values: readonly string[], label: string): void {\n  const set = new Set<string>();\n  for (const value of values) {\n    if (set.has(value)) {\n      throw new Error(`Index ${label} contains duplicate value: ${value}`);\n    }\n    set.add(value);\n  }\n}\n\nfunction assertNoOverlap(\n  a: readonly string[],\n  b: readonly string[],\n  aLabel: string,\n  bLabel: string,\n): void {\n  const set = new Set(a);\n  for (const value of b) {\n    if (set.has(value)) {\n      throw new Error(`Index ${bLabel} must not overlap ${aLabel}: ${value}`);\n    }\n  }\n}\n\nfunction assertIndexableValueType(\n  valueType: ValueType,\n  context: string,\n  options: Readonly<{ allowJsonFields: boolean }>,\n): void {\n  if (valueType === \"embedding\") {\n    throw new Error(\n      `Cannot create props index for embedding field (${context}); embedding() fields are indexed automatically in the vector strategy's per-(kind, field) storage`,\n    );\n  }\n\n  if (\n    (valueType === \"array\" || valueType === \"object\") &&\n    !options.allowJsonFields\n  ) {\n    throw new Error(\n      `Cannot create btree props index for ${valueType} field (${context}); use method: \"gin\" instead`,\n    );\n  }\n}\n\ntype NormalizedIndexFields = Readonly<{\n  pointers: readonly JsonPointer[];\n  valueTypes: readonly (ValueType | undefined)[];\n}>;\n\nfunction normalizeNodeIndexFieldsOrThrow<N extends NodeType>(\n  node: N,\n  inputs: readonly IndexFieldInput<z.infer<N[\"schema\"]>>[],\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n  label: string,\n  options: Readonly<{ allowJsonFields?: boolean }>,\n): NormalizedIndexFields {\n  // Node `fields`/`coveringFields` are both optional (an index can be keyed\n  // by `keySystemColumns` alone), so unlike the edge equivalent below, an\n  // empty input is always valid here — `defineNodeIndex` enforces that at\n  // least one of `fields`/`coveringFields`/`keySystemColumns` is non-empty.\n  if (inputs.length === 0) {\n    return { pointers: [], valueTypes: [] };\n  }\n\n  const pointers: JsonPointer[] = [];\n  const valueTypes: (ValueType | undefined)[] = [];\n\n  for (const input of inputs) {\n    const pointer = normalizeIndexFieldPointer(input);\n    const info = resolveNodeFieldTypeInfoOrThrow(\n      node.kind,\n      pointer,\n      schemaIntrospector,\n    );\n    assertIndexableValueType(info.valueType, `node \"${node.kind}\" ${pointer}`, {\n      allowJsonFields: options.allowJsonFields ?? false,\n    });\n    pointers.push(pointer);\n    valueTypes.push(info.valueType);\n  }\n\n  assertUnique(pointers, label);\n\n  return { pointers, valueTypes };\n}\n\nfunction normalizeEdgeIndexFieldsOrThrow<E extends AnyEdgeType>(\n  edge: E,\n  inputs: readonly IndexFieldInput<z.infer<E[\"schema\"]>>[],\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n  label: string,\n  options: Readonly<{ allowEmpty: boolean; allowJsonFields?: boolean }>,\n): NormalizedIndexFields {\n  if (inputs.length === 0 && options.allowEmpty) {\n    return { pointers: [], valueTypes: [] };\n  }\n  assertNonEmpty(inputs, label);\n\n  const pointers: JsonPointer[] = [];\n  const valueTypes: (ValueType | undefined)[] = [];\n\n  for (const input of inputs) {\n    const pointer = normalizeIndexFieldPointer(input);\n    const info = resolveEdgeFieldTypeInfoOrThrow(\n      edge.kind,\n      pointer,\n      schemaIntrospector,\n    );\n    assertIndexableValueType(info.valueType, `edge \"${edge.kind}\" ${pointer}`, {\n      allowJsonFields: options.allowJsonFields ?? false,\n    });\n    pointers.push(pointer);\n    valueTypes.push(info.valueType);\n  }\n\n  assertUnique(pointers, label);\n\n  return { pointers, valueTypes };\n}\n\nfunction normalizeIndexFieldPointer<T>(input: IndexFieldInput<T>): JsonPointer {\n  if (Array.isArray(input)) {\n    if (input.length === 0) {\n      throw new Error(\"Index field JSON pointer must not be empty\");\n    }\n    return jsonPointer(input as readonly JsonPointerSegment[]);\n  }\n\n  if (typeof input === \"string\") {\n    if (input.startsWith(\"/\")) {\n      const pointer = normalizeJsonPointer(\n        input as JsonPointerInput<Record<string, unknown>>,\n      );\n      if (pointer === \"\") {\n        throw new Error(\"Index field JSON pointer must not be empty\");\n      }\n      return pointer;\n    }\n    return jsonPointer([input]);\n  }\n\n  throw new Error(`Unsupported index field input: ${String(input)}`);\n}\n\nfunction resolveNodeFieldTypeInfoOrThrow(\n  nodeKind: string,\n  pointer: JsonPointer,\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): FieldTypeInfo {\n  const segments = parseJsonPointer(pointer);\n  const [first, ...rest] = segments;\n  if (!first) {\n    throw new Error(\"Index field JSON pointer must not be empty\");\n  }\n\n  const rootInfo = schemaIntrospector.getFieldTypeInfo(nodeKind, first);\n  if (!rootInfo) {\n    throw new Error(\n      `Unknown field \"${first}\" for node \"${nodeKind}\" in index definition`,\n    );\n  }\n\n  if (rest.length === 0) {\n    return rootInfo;\n  }\n\n  const resolved = resolveFieldTypeInfoAtJsonPointer(\n    rootInfo,\n    jsonPointer(rest),\n  );\n  if (!resolved) {\n    throw new Error(\n      `Unknown JSON pointer \"${pointer}\" for node \"${nodeKind}\" in index definition`,\n    );\n  }\n\n  return resolved;\n}\n\nfunction resolveEdgeFieldTypeInfoOrThrow(\n  edgeKind: string,\n  pointer: JsonPointer,\n  schemaIntrospector: ReturnType<typeof createSchemaIntrospector>,\n): FieldTypeInfo {\n  const segments = parseJsonPointer(pointer);\n  const [first, ...rest] = segments;\n  if (!first) {\n    throw new Error(\"Index field JSON pointer must not be empty\");\n  }\n\n  const rootInfo = schemaIntrospector.getEdgeFieldTypeInfo(edgeKind, first);\n  if (!rootInfo) {\n    throw new Error(\n      `Unknown field \"${first}\" for edge \"${edgeKind}\" in index definition`,\n    );\n  }\n\n  if (rest.length === 0) {\n    return rootInfo;\n  }\n\n  const resolved = resolveFieldTypeInfoAtJsonPointer(\n    rootInfo,\n    jsonPointer(rest),\n  );\n  if (!resolved) {\n    throw new Error(\n      `Unknown JSON pointer \"${pointer}\" for edge \"${edgeKind}\" in index definition`,\n    );\n  }\n\n  return resolved;\n}\n\n// ============================================================\n// Default Name Generation\n// ============================================================\n\ntype DefaultNameParts = Readonly<{\n  kind: KindEntity;\n  kindName: string;\n  unique: boolean;\n  scope: IndexScope;\n  direction: EdgeIndexDirection;\n  fields: readonly string[];\n  coveringFields: readonly string[];\n  /**\n   * Node-only, defaults to `[]` for edges. Folded into the hash/name only\n   * when non-empty so indexes that don't use it keep byte-identical\n   * default names to before this field existed.\n   */\n  keySystemColumns?: readonly string[];\n  keys?: readonly NodeIndexKey[];\n}>;\n\nfunction generateDefaultIndexName(parts: DefaultNameParts): string {\n  const keySystemColumns = parts.keySystemColumns ?? [];\n  const keys = parts.keys ?? [];\n  const hash = fnv1aBase36(\n    JSON.stringify({\n      kind: parts.kind,\n      kindName: parts.kindName,\n      unique: parts.unique,\n      scope: parts.scope,\n      direction: parts.direction,\n      fields: parts.fields,\n      covering: parts.coveringFields,\n      ...(keySystemColumns.length > 0 ? { keySystemColumns } : {}),\n      ...(keys.length > 0 ? { keys } : {}),\n    }),\n  );\n\n  const nameParts = [\n    \"idx\",\n    \"tg\",\n    parts.kind,\n    sanitizeIdentifierComponent(parts.kindName),\n    parts.fields.length > 0 ?\n      sanitizeIdentifierComponent(parts.fields.join(\"_\"))\n    : undefined,\n    parts.coveringFields.length > 0 ?\n      `cov_${sanitizeIdentifierComponent(parts.coveringFields.join(\"_\"))}`\n    : undefined,\n    keySystemColumns.length > 0 ?\n      `sys_${sanitizeIdentifierComponent(keySystemColumns.join(\"_\"))}`\n    : undefined,\n    keys.length > 0 ?\n      `keys_${sanitizeIdentifierComponent(\n        keys\n          .map((key) =>\n            key.type === \"field\" ?\n              `${key.pointer}_${key.direction}`\n            : `${key.column}_${key.direction}`,\n          )\n          .join(\"_\"),\n      )}`\n    : undefined,\n    parts.direction === \"none\" ? undefined : parts.direction,\n    parts.unique ? \"uniq\" : undefined,\n    parts.scope === \"graphAndKind\" ?\n      undefined\n    : sanitizeIdentifierComponent(parts.scope),\n    hash,\n  ].filter((part) => part !== undefined);\n\n  const joined = nameParts.join(\"_\");\n  return joined.length <= MAX_PG_IDENTIFIER_LENGTH ?\n      joined\n    : `${joined.slice(0, TRUNCATED_IDENTIFIER_MAX_LENGTH)}_${hash}`;\n}\n\nfunction sanitizeIdentifierComponent(value: string): string {\n  return value\n    .toLowerCase()\n    .replaceAll(/[^a-z0-9_]+/g, \"_\")\n    .replaceAll(/^_+|_+$/g, \"\")\n    .slice(0, IDENTIFIER_COMPONENT_MAX_LENGTH);\n}\n"]}