{"version":3,"sources":["../src/query/schema-introspector.ts"],"names":["hasOwnKey","getEmbeddingDimensions","getSearchableMetadata","shape","requireDefined"],"mappings":"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","file":"chunk-57NFSCJA.cjs","sourcesContent":["import { type z } from \"zod\";\n\nimport { getEmbeddingDimensions } from \"../core/embedding\";\nimport {\n  getSearchableMetadata,\n  type SearchableMetadata,\n} from \"../core/searchable\";\nimport { hasOwnKey } from \"../utils/object\";\nimport { requireDefined } from \"../utils/presence\";\nimport { type ValueType } from \"./ast\";\n\nconst SUPPORTED_SCHEMA_TYPES = [\n  \"string\",\n  \"number\",\n  \"nan\",\n  \"boolean\",\n  \"date\",\n  \"literal\",\n  \"enum\",\n  \"nativeEnum\",\n  \"array\",\n  \"tuple\",\n  \"object\",\n  \"record\",\n  \"union\",\n  \"discriminatedUnion\",\n  \"intersection\",\n] as const;\n\ntype SupportedSchemaType = (typeof SUPPORTED_SCHEMA_TYPES)[number];\n\n// Use Set<string> to allow checking arbitrary strings while maintaining type safety\nconst SUPPORTED_SCHEMA_TYPE_SET: ReadonlySet<string> = new Set(\n  SUPPORTED_SCHEMA_TYPES,\n);\n\nfunction isSupportedSchemaType(type: string): type is SupportedSchemaType {\n  return SUPPORTED_SCHEMA_TYPE_SET.has(type);\n}\n\nexport type FieldTypeInfo = Readonly<{\n  valueType: ValueType;\n  nullable?: boolean;\n  elementType?: ValueType | undefined;\n  elementTypeInfo?: FieldTypeInfo | undefined;\n  shape?: Readonly<Record<string, FieldTypeInfo>> | undefined;\n  recordValueType?: FieldTypeInfo | undefined;\n  /** For embedding types: the number of dimensions */\n  dimensions?: number | undefined;\n  /** For fulltext-searchable string types: field-level metadata */\n  searchable?: SearchableMetadata | undefined;\n}>;\n\nexport type SchemaIntrospector = Readonly<{\n  getFieldTypeInfo: (\n    kindName: string,\n    fieldName: string,\n  ) => FieldTypeInfo | undefined;\n  getSharedFieldTypeInfo: (\n    kindNames: readonly string[],\n    fieldName: string,\n  ) => FieldTypeInfo | undefined;\n  getEdgeFieldTypeInfo: (\n    edgeKindName: string,\n    fieldName: string,\n  ) => FieldTypeInfo | undefined;\n  getSharedEdgeFieldTypeInfo: (\n    edgeKindNames: readonly string[],\n    fieldName: string,\n  ) => FieldTypeInfo | undefined;\n  /**\n   * True iff at least one kind in `kindNames` DECLARES `fieldName` as an own\n   * key of its schema shape.\n   *\n   * The single owner of \"is this name a schema field?\", asked by any layer that\n   * must tell a field access apart from something else the name could mean —\n   * today the select-tracking proxies, which would otherwise classify a\n   * DECLARED field named `toString` / `constructor` / `valueOf` as an inherited\n   * `Object.prototype` member and never track it.\n   *\n   * Deliberately ANY rather than every: a name one kind of a polymorphic alias\n   * declares is a field access, not a prototype access. Whether the field has a\n   * usable type across all of them is a separate question, answered by\n   * {@link SchemaIntrospector.getSharedFieldTypeInfo}, which stays `undefined`\n   * unless every kind agrees.\n   */\n  hasDeclaredField: (\n    kindNames: readonly string[],\n    fieldName: string,\n  ) => boolean;\n  /** Edge counterpart of {@link SchemaIntrospector.hasDeclaredField}. */\n  hasDeclaredEdgeField: (\n    edgeKindNames: readonly string[],\n    fieldName: string,\n  ) => boolean;\n  /**\n   * True iff every kind in `kindNames` has at least one `searchable()`\n   * field. For polymorphic aliases, `$fulltext` is available only when\n   * every resolved kind has searchable content — otherwise `.matches()`\n   * would silently miss some kinds.\n   */\n  hasSearchableField: (kindNames: readonly string[]) => boolean;\n}>;\n\nfunction sharedCacheKey(\n  kindNames: readonly string[],\n  fieldName: string,\n): string {\n  return `${[...kindNames].toSorted().join(\"|\")}|${fieldName}`;\n}\n\nexport function createSchemaIntrospector(\n  nodeKinds: ReadonlyMap<string, { schema: z.ZodType }>,\n  edgeKinds?: ReadonlyMap<string, { schema: z.ZodType }>,\n): SchemaIntrospector {\n  const nodeShapeCache = new Map<\n    string,\n    Readonly<Record<string, FieldTypeInfo>>\n  >();\n  const edgeShapeCache = new Map<\n    string,\n    Readonly<Record<string, FieldTypeInfo>>\n  >();\n  // Proxy-based field accessors trigger a fresh merge on every property\n  // read during a `whereNode(n => ...)` callback. For polymorphic\n  // aliases with N kinds and M field accesses, that is O(N*M) per\n  // compile; caching collapses it to O(1) after the first access.\n  const sharedFieldTypeInfoCache = new Map<string, FieldTypeInfo | undefined>();\n  const sharedEdgeFieldTypeInfoCache = new Map<\n    string,\n    FieldTypeInfo | undefined\n  >();\n  const searchableCache = new Map<string, boolean>();\n  const declaredFieldCache = new Map<string, boolean>();\n  const declaredEdgeFieldCache = new Map<string, boolean>();\n\n  function getFieldTypeInfo(\n    kindName: string,\n    fieldName: string,\n  ): FieldTypeInfo | undefined {\n    const shape = getShapeForKind(kindName);\n    return shape !== undefined && hasOwnKey(shape, fieldName) ?\n        shape[fieldName]\n      : undefined;\n  }\n\n  function getSharedFieldTypeInfo(\n    kindNames: readonly string[],\n    fieldName: string,\n  ): FieldTypeInfo | undefined {\n    const cacheKey = sharedCacheKey(kindNames, fieldName);\n    if (sharedFieldTypeInfoCache.has(cacheKey)) {\n      return sharedFieldTypeInfoCache.get(cacheKey);\n    }\n\n    const infos = kindNames\n      .map((kindName) => getFieldTypeInfo(kindName, fieldName))\n      .filter((info): info is FieldTypeInfo => info !== undefined);\n\n    const merged =\n      infos.length !== kindNames.length || infos.length === 0 ?\n        undefined\n      : mergeFieldTypeInfos(infos);\n    sharedFieldTypeInfoCache.set(cacheKey, merged);\n    return merged;\n  }\n\n  function getEdgeFieldTypeInfo(\n    edgeKindName: string,\n    fieldName: string,\n  ): FieldTypeInfo | undefined {\n    const shape = getShapeForEdgeKind(edgeKindName);\n    return shape !== undefined && hasOwnKey(shape, fieldName) ?\n        shape[fieldName]\n      : undefined;\n  }\n\n  function getSharedEdgeFieldTypeInfo(\n    edgeKindNames: readonly string[],\n    fieldName: string,\n  ): FieldTypeInfo | undefined {\n    const cacheKey = sharedCacheKey(edgeKindNames, fieldName);\n    if (sharedEdgeFieldTypeInfoCache.has(cacheKey)) {\n      return sharedEdgeFieldTypeInfoCache.get(cacheKey);\n    }\n\n    const infos = edgeKindNames\n      .map((kindName) => getEdgeFieldTypeInfo(kindName, fieldName))\n      .filter((info): info is FieldTypeInfo => info !== undefined);\n\n    const merged =\n      infos.length !== edgeKindNames.length || infos.length === 0 ?\n        undefined\n      : mergeFieldTypeInfos(infos);\n    sharedEdgeFieldTypeInfoCache.set(cacheKey, merged);\n    return merged;\n  }\n\n  function getShapeForKind(\n    kindName: string,\n  ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n    const cached = nodeShapeCache.get(kindName);\n    if (cached) {\n      return cached;\n    }\n\n    const kind = nodeKinds.get(kindName);\n    if (!kind) {\n      return undefined;\n    }\n\n    const schema = kind.schema;\n    if (schema.type !== \"object\") {\n      return undefined;\n    }\n\n    const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n    if (!shape) {\n      return undefined;\n    }\n\n    const entries = Object.entries(shape).map(\n      ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n    );\n    const resolved = Object.freeze(Object.fromEntries(entries));\n    nodeShapeCache.set(kindName, resolved);\n    return resolved;\n  }\n\n  function getShapeForEdgeKind(\n    edgeKindName: string,\n  ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n    if (!edgeKinds) {\n      return undefined;\n    }\n\n    const cached = edgeShapeCache.get(edgeKindName);\n    if (cached) {\n      return cached;\n    }\n\n    const kind = edgeKinds.get(edgeKindName);\n    if (!kind) {\n      return undefined;\n    }\n\n    const schema = kind.schema;\n    if (schema.type !== \"object\") {\n      return undefined;\n    }\n\n    const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n    if (!shape) {\n      return undefined;\n    }\n\n    const entries = Object.entries(shape).map(\n      ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n    );\n    const resolved = Object.freeze(Object.fromEntries(entries));\n    edgeShapeCache.set(edgeKindName, resolved);\n    return resolved;\n  }\n\n  function hasDeclaredField(\n    kindNames: readonly string[],\n    fieldName: string,\n  ): boolean {\n    const cacheKey = sharedCacheKey(kindNames, fieldName);\n    const cached = declaredFieldCache.get(cacheKey);\n    if (cached !== undefined) return cached;\n\n    const declared = kindNames.some((kindName) => {\n      const shape = getShapeForKind(kindName);\n      return shape !== undefined && hasOwnKey(shape, fieldName);\n    });\n    declaredFieldCache.set(cacheKey, declared);\n    return declared;\n  }\n\n  function hasDeclaredEdgeField(\n    edgeKindNames: readonly string[],\n    fieldName: string,\n  ): boolean {\n    const cacheKey = sharedCacheKey(edgeKindNames, fieldName);\n    const cached = declaredEdgeFieldCache.get(cacheKey);\n    if (cached !== undefined) return cached;\n\n    const declared = edgeKindNames.some((edgeKindName) => {\n      const shape = getShapeForEdgeKind(edgeKindName);\n      return shape !== undefined && hasOwnKey(shape, fieldName);\n    });\n    declaredEdgeFieldCache.set(cacheKey, declared);\n    return declared;\n  }\n\n  function hasSearchableField(kindNames: readonly string[]): boolean {\n    const cacheKey = [...kindNames].toSorted().join(\"|\");\n    const cached = searchableCache.get(cacheKey);\n    if (cached !== undefined) return cached;\n\n    const result =\n      kindNames.length > 0 &&\n      kindNames.every((kindName) => {\n        const shape = getShapeForKind(kindName);\n        if (!shape) return false;\n        return Object.values(shape).some(\n          (info) => info.searchable !== undefined,\n        );\n      });\n    searchableCache.set(cacheKey, result);\n    return result;\n  }\n\n  return {\n    getFieldTypeInfo,\n    getSharedFieldTypeInfo,\n    getEdgeFieldTypeInfo,\n    getSharedEdgeFieldTypeInfo,\n    hasDeclaredField,\n    hasDeclaredEdgeField,\n    hasSearchableField,\n  };\n}\n\nfunction schemaAllowsAbsence(schema: z.ZodType): boolean {\n  if (\n    schema.type === \"optional\" ||\n    schema.type === \"nullable\" ||\n    schema.type === \"null\" ||\n    schema.type === \"undefined\"\n  )\n    return true;\n  const definition = schema.def as {\n    innerType?: z.ZodType;\n    out?: z.ZodType;\n    options?: readonly z.ZodType[];\n  };\n  if (schema.type === \"union\" && definition.options !== undefined)\n    return definition.options.some((option) => schemaAllowsAbsence(option));\n  if (schema.type === \"pipe\" && definition.out !== undefined)\n    return schemaAllowsAbsence(definition.out);\n  if (\n    definition.innerType !== undefined &&\n    schema.type !== \"default\" &&\n    schema.type !== \"prefault\" &&\n    schema.type !== \"nonoptional\"\n  )\n    return schemaAllowsAbsence(definition.innerType);\n  return false;\n}\n\nfunction resolveFieldTypeInfo(schema: z.ZodType): FieldTypeInfo {\n  const info = resolveFieldTypeInfoValue(schema);\n  return schemaAllowsAbsence(schema) ? { ...info, nullable: true } : info;\n}\n\nfunction resolveFieldTypeInfoValue(schema: z.ZodType): FieldTypeInfo {\n  // Check for embedding type before unwrapping\n  // (embedding metadata is attached to the outer schema)\n  const embeddingDimensions = getEmbeddingDimensions(schema);\n  if (embeddingDimensions !== undefined) {\n    return { valueType: \"embedding\", dimensions: embeddingDimensions };\n  }\n\n  const searchableMetadata = getSearchableMetadata(schema);\n  const searchableStringSchema =\n    searchableMetadata === undefined ? undefined : (\n      unwrapSearchableStringSchema(schema)\n    );\n  if (\n    searchableMetadata !== undefined &&\n    searchableStringSchema !== undefined\n  ) {\n    return { valueType: \"string\", searchable: searchableMetadata };\n  }\n\n  const unwrapped = unwrapSchema(schema);\n\n  // Check embedding on unwrapped schema too (for z.optional(embedding(...)))\n  const unwrappedEmbeddingDimensions = getEmbeddingDimensions(unwrapped);\n  if (unwrappedEmbeddingDimensions !== undefined) {\n    return { valueType: \"embedding\", dimensions: unwrappedEmbeddingDimensions };\n  }\n\n  // Cast to string to detach from Zod's internal type union,\n  // then let the type guard narrow to our SupportedSchemaType.\n  const rawType = unwrapped.type as string;\n\n  if (!isSupportedSchemaType(rawType)) {\n    return { valueType: \"unknown\" };\n  }\n\n  // After the type guard, rawType is SupportedSchemaType.\n  const schemaType = rawType;\n\n  // Handle each schema type individually\n  if (schemaType === \"string\") {\n    return { valueType: \"string\" };\n  }\n  if (schemaType === \"number\" || schemaType === \"nan\") {\n    return { valueType: \"number\" };\n  }\n  if (schemaType === \"boolean\") {\n    return { valueType: \"boolean\" };\n  }\n  if (schemaType === \"date\") {\n    return { valueType: \"date\" };\n  }\n  if (schemaType === \"literal\") {\n    const literalValue = (unwrapped.def as { value?: unknown }).value;\n    return resolveLiteralTypeInfo(literalValue);\n  }\n  if (schemaType === \"enum\") {\n    return { valueType: \"string\" };\n  }\n  if (schemaType === \"nativeEnum\") {\n    const values = Object.values(\n      (unwrapped.def as { values?: Record<string, unknown> }).values ?? {},\n    );\n    const valueType = resolveEnumValueType(values);\n    return { valueType };\n  }\n  if (schemaType === \"array\") {\n    const elementSchema = (unwrapped.def as { element?: z.ZodType }).element;\n    const elementInfo =\n      elementSchema ? resolveFieldTypeInfo(elementSchema) : undefined;\n    return {\n      valueType: \"array\",\n      elementType: elementInfo?.valueType,\n      elementTypeInfo: elementInfo,\n    };\n  }\n  if (schemaType === \"tuple\") {\n    return {\n      valueType: \"array\",\n      elementType: \"unknown\",\n    };\n  }\n  if (schemaType === \"object\") {\n    const shape = (unwrapped.def as { shape?: Record<string, z.ZodType> })\n      .shape;\n    if (!shape) {\n      return { valueType: \"object\" };\n    }\n    const entries = Object.entries(shape).map(\n      ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n    );\n    const resolved = Object.freeze(Object.fromEntries(entries));\n    return {\n      valueType: \"object\",\n      shape: resolved,\n    };\n  }\n  if (schemaType === \"record\") {\n    const valueSchema = (unwrapped.def as { valueType?: z.ZodType }).valueType;\n    const valueInfo =\n      valueSchema ? resolveFieldTypeInfo(valueSchema) : undefined;\n    return {\n      valueType: \"object\",\n      recordValueType: valueInfo,\n    };\n  }\n  if (schemaType === \"union\" || schemaType === \"discriminatedUnion\") {\n    const unionOptions = (unwrapped.def as { options?: readonly z.ZodType[] })\n      .options;\n    if (!unionOptions || unionOptions.length === 0) {\n      return { valueType: \"unknown\" };\n    }\n    const optionInfos = unionOptions.map((option) =>\n      resolveFieldTypeInfo(option),\n    );\n    return mergeFieldTypeInfos(optionInfos) ?? { valueType: \"unknown\" };\n  }\n\n  // Only \"intersection\" remains after all other cases\n  const left = (unwrapped.def as { left?: z.ZodType }).left;\n  const right = (unwrapped.def as { right?: z.ZodType }).right;\n  if (!left || !right) {\n    return { valueType: \"unknown\" };\n  }\n  const leftInfo = resolveFieldTypeInfo(left);\n  const rightInfo = resolveFieldTypeInfo(right);\n  return mergeFieldTypeInfos([leftInfo, rightInfo]) ?? { valueType: \"unknown\" };\n}\n\nfunction resolveLiteralTypeInfo(value: unknown): FieldTypeInfo {\n  if (value instanceof Date) {\n    return { valueType: \"date\" };\n  }\n  if (typeof value === \"string\") {\n    return { valueType: \"string\" };\n  }\n  if (typeof value === \"number\") {\n    return { valueType: \"number\" };\n  }\n  if (typeof value === \"boolean\") {\n    return { valueType: \"boolean\" };\n  }\n  return { valueType: \"unknown\" };\n}\n\nfunction resolveEnumValueType(values: readonly unknown[]): ValueType {\n  const uniqueTypes = new Set(values.map((value) => typeof value));\n  if (uniqueTypes.size !== 1) {\n    return \"unknown\";\n  }\n\n  const type = uniqueTypes.values().next().value;\n  if (type === \"string\") {\n    return \"string\";\n  }\n  if (type === \"number\") {\n    return \"number\";\n  }\n  if (type === \"boolean\") {\n    return \"boolean\";\n  }\n  return \"unknown\";\n}\n\nfunction mergeFieldTypeInfos(\n  infos: readonly FieldTypeInfo[],\n): FieldTypeInfo | undefined {\n  const merged = mergeFieldTypeInfoValues(infos);\n  return merged !== undefined && infos.some((info) => info.nullable === true) ?\n      { ...merged, nullable: true }\n    : merged;\n}\n\nfunction mergeFieldTypeInfoValues(\n  infos: readonly FieldTypeInfo[],\n): FieldTypeInfo | undefined {\n  const [first, ...rest] = infos;\n  if (!first) {\n    return undefined;\n  }\n\n  const sameValueType = rest.every(\n    (info) => info.valueType === first.valueType,\n  );\n  if (!sameValueType) {\n    return undefined;\n  }\n\n  if (first.valueType === \"array\") {\n    const elementType =\n      rest.every((info) => info.elementType === first.elementType) ?\n        first.elementType\n      : \"unknown\";\n    const elementTypeInfo =\n      (\n        rest.every(\n          (info) =>\n            info.elementTypeInfo?.valueType ===\n            first.elementTypeInfo?.valueType,\n        )\n      ) ?\n        first.elementTypeInfo\n      : undefined;\n    return {\n      valueType: \"array\",\n      elementType,\n      elementTypeInfo,\n    };\n  }\n\n  if (first.valueType === \"object\") {\n    const shapes = infos\n      .map((info) => info.shape)\n      .filter(\n        (shape): shape is Readonly<Record<string, FieldTypeInfo>> =>\n          shape !== undefined,\n      );\n\n    const shape =\n      shapes.length === infos.length ? intersectShapes(shapes) : undefined;\n\n    const recordValueType =\n      (\n        rest.every(\n          (info) =>\n            info.recordValueType?.valueType ===\n            first.recordValueType?.valueType,\n        )\n      ) ?\n        first.recordValueType\n      : undefined;\n\n    return {\n      valueType: \"object\",\n      shape,\n      recordValueType,\n    };\n  }\n\n  // Strings: only mark the merged result as searchable if every kind\n  // in the polymorphic alias declares the field as searchable. A field\n  // that isn't uniformly searchable would silently search only some\n  // kinds via `.matches()`.\n  if (first.valueType === \"string\") {\n    const allSearchable =\n      first.searchable !== undefined &&\n      rest.every((info) => info.searchable !== undefined);\n    return allSearchable ?\n        { valueType: \"string\", searchable: first.searchable }\n      : { valueType: \"string\" };\n  }\n\n  return first;\n}\n\nfunction intersectShapes(\n  shapes: readonly Readonly<Record<string, FieldTypeInfo>>[],\n): Readonly<Record<string, FieldTypeInfo>> {\n  const [first, ...rest] = shapes;\n  if (!first) {\n    return Object.freeze({});\n  }\n\n  const keys = Object.keys(first).filter((key) =>\n    rest.every((shape) => hasOwnKey(shape, key)),\n  );\n\n  const entries = keys\n    .map((key) => {\n      const infos = shapes.map((shape) => requireDefined(shape[key]));\n      const merged = mergeFieldTypeInfos(infos);\n      if (!merged) {\n        return;\n      }\n      return [key, merged] as const;\n    })\n    .filter(\n      (entry): entry is readonly [string, FieldTypeInfo] => entry !== undefined,\n    );\n\n  return Object.freeze(Object.fromEntries(entries));\n}\n\nfunction unwrapSearchableStringSchema(\n  schema: z.ZodType,\n): z.ZodType | undefined {\n  const type = schema.type;\n  const def = schema.def as {\n    innerType?: z.ZodType;\n    in?: z.ZodType;\n    out?: z.ZodType;\n  };\n\n  if (\n    (type === \"optional\" ||\n      type === \"nullable\" ||\n      type === \"default\" ||\n      type === \"prefault\" ||\n      type === \"catch\" ||\n      type === \"readonly\" ||\n      type === \"nonoptional\" ||\n      type === \"success\") &&\n    def.innerType\n  ) {\n    return unwrapSearchableStringSchema(def.innerType);\n  }\n\n  if (type === \"pipe\") {\n    return (\n      (def.in === undefined ?\n        undefined\n      : unwrapSearchableStringSchema(def.in)) ??\n      (def.out === undefined ?\n        undefined\n      : unwrapSearchableStringSchema(def.out))\n    );\n  }\n\n  const unwrapped = unwrapSchema(schema);\n  return unwrapped.type === \"string\" ? unwrapped : undefined;\n}\n\nfunction unwrapSchema(schema: z.ZodType): z.ZodType {\n  const type = schema.type;\n  const def = schema.def as {\n    innerType?: z.ZodType;\n    out?: z.ZodType;\n  };\n\n  if (\n    (type === \"optional\" ||\n      type === \"nullable\" ||\n      type === \"default\" ||\n      type === \"prefault\" ||\n      type === \"catch\" ||\n      type === \"readonly\" ||\n      type === \"nonoptional\" ||\n      type === \"success\") &&\n    def.innerType\n  ) {\n    return unwrapSchema(def.innerType);\n  }\n\n  if (type === \"pipe\" && def.out) {\n    return unwrapSchema(def.out);\n  }\n\n  return schema;\n}\n"]}