{"version":3,"sources":["../src/cognite/adapter.ts","../src/constants.ts","../src/utils/aggregate.ts","../src/utils/array.ts","../src/utils/query.ts","../src/utils/view.ts","../src/validation.ts","../src/validators/query-validator.ts","../src/validators/aggregate-validator.ts","../src/validators/datapoints-validator.ts","../src/validators/delete-validator.ts","../src/validators/result-validator.ts","../src/validators/upsert-validator.ts","../src/mappers/filter-mapper.ts","../src/mappers/aggregate-mapper.ts","../src/mappers/aggregate-result-mapper.ts","../src/mappers/datapoints-mapper.ts","../src/mappers/files-mapper.ts","../src/mappers/sort-mapper.ts","../src/mappers/query-mapper.ts","../src/mappers/result-mapper.ts","../src/mappers/upsert-mapper.ts","../src/cache/adapters/memory-adapter.ts","../src/cache/resolver.ts","../src/mappers/view-mapper.ts","../src/client.ts"],"names":["z","NODE_PROPERTIES","target","issuePath","formatZodIssues","property","dateSchema","nodeIdSchema","formatIssues","isRecord","isLeafFilter"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CogniteClient } from \"@cognite/sdk\";\nimport type { CognitePort } from \"./port\";\nimport type {\n  CogniteDatapointDeleteItem,\n  CogniteDatapointInsertItem,\n  CogniteDatapointLatestItem,\n  CogniteDatapointResponse,\n  CogniteDatapointResultItem,\n  CogniteDatapointRetrieveOptions,\n  CogniteFileDownloadUrl,\n  CogniteFileUploadInfo,\n  CogniteFileUploadResult,\n  DataModelId,\n  DataModelRetrieveOptions,\n  InstancesAggregateRequest,\n  InstancesAggregateResponse,\n  InstancesApplyRequest,\n  InstancesApplyResponse,\n  InstancesQueryRequest,\n  InstancesQueryResponse,\n  InstancesSearchRequest,\n  InstancesSearchResponse,\n  ViewDefinition,\n} from \"./types\";\n\nexport function createCogniteAdapter(client: CogniteClient): CognitePort {\n  return new CogniteSdkAdapter(client);\n}\n\nclass CogniteSdkAdapter implements CognitePort {\n  constructor(private readonly client: CogniteClient) {}\n\n  async retrieveDataModels(ids: DataModelId[], options?: DataModelRetrieveOptions) {\n    const response = await this.client.dataModels.retrieve(ids, options);\n    return {\n      items: response.items.map((item) => ({\n        createdTime: item.createdTime,\n        views: (item.views ?? []) as ViewDefinition[],\n      })),\n    };\n  }\n\n  async retrieveViews(\n    ids: Array<{ space: string; externalId: string; version: string }>,\n  ): Promise<{ items: ViewDefinition[] }> {\n    const cleanIds = ids.map(({ space, externalId, version }) => ({ space, externalId, version }));\n    const response = await this.client.views.retrieve(cleanIds);\n    return { items: response.items as ViewDefinition[] };\n  }\n\n  async queryInstances(request: InstancesQueryRequest): Promise<InstancesQueryResponse> {\n    const response = await this.client.instances.query(\n      request as Parameters<CogniteClient[\"instances\"][\"query\"]>[0],\n    );\n    return {\n      items: response.items as unknown as InstancesQueryResponse[\"items\"],\n      nextCursor: response.nextCursor,\n    };\n  }\n\n  async searchInstances(request: InstancesSearchRequest): Promise<InstancesSearchResponse> {\n    const response = await this.client.instances.search(\n      request as Parameters<CogniteClient[\"instances\"][\"search\"]>[0],\n    );\n    return {\n      items: response.items as unknown as InstancesSearchResponse[\"items\"],\n    };\n  }\n\n  async aggregateInstances(\n    request: InstancesAggregateRequest,\n  ): Promise<InstancesAggregateResponse> {\n    const response = await this.client.instances.aggregate(\n      request as Parameters<CogniteClient[\"instances\"][\"aggregate\"]>[0],\n    );\n    return {\n      items: response.items as unknown as InstancesAggregateResponse[\"items\"],\n    };\n  }\n\n  async applyInstances(request: InstancesApplyRequest): Promise<InstancesApplyResponse> {\n    // The Cognite SDK has no combined upsert+delete endpoint: `instances.upsert` writes\n    // items and `instances.delete` removes them, as two separate API calls.\n    const { items, delete: deleteItems = [], replace } = request;\n    const results: InstancesApplyResponse[\"items\"] = [];\n\n    if (deleteItems.length > 0) {\n      const deleteResponse = await this.client.instances.delete(\n        deleteItems as Parameters<CogniteClient[\"instances\"][\"delete\"]>[0],\n      );\n      results.push(\n        ...((deleteResponse as unknown as { items?: InstancesApplyResponse[\"items\"] }).items ?? []),\n      );\n    }\n\n    if (items.length > 0) {\n      const response = await this.client.instances.upsert({\n        items,\n        ...(replace === true ? { replace: true } : {}),\n      } as Parameters<CogniteClient[\"instances\"][\"upsert\"]>[0]);\n      results.push(...(response.items as unknown as InstancesApplyResponse[\"items\"]));\n    }\n\n    return { items: results };\n  }\n\n  async retrieveDatapoints(\n    options: CogniteDatapointRetrieveOptions,\n  ): Promise<{ items: CogniteDatapointResultItem[] }> {\n    const { items, ...rest } = options;\n    const sdkItems = items.map(({ space, externalId, ...itemRest }) => ({\n      ...itemRest,\n      instanceId: { space, externalId },\n    }));\n    const response = await this.client.datapoints.retrieve({\n      ...rest,\n      items: sdkItems,\n    } as Parameters<typeof this.client.datapoints.retrieve>[0]);\n    return { items: (response as unknown as CogniteDatapointResponse[]).map(mapDatapointResult) };\n  }\n\n  async retrieveLatestDatapoints(\n    items: CogniteDatapointLatestItem[],\n    options?: { ignoreUnknownIds?: boolean },\n  ): Promise<{ items: CogniteDatapointResultItem[] }> {\n    const sdkItems = items.map(({ space, externalId, before }) => ({\n      instanceId: { space, externalId },\n      ...(before !== undefined ? { before } : {}),\n    }));\n    const response = await this.client.datapoints.retrieveLatest(\n      sdkItems as Parameters<typeof this.client.datapoints.retrieveLatest>[0],\n      options,\n    );\n    return { items: (response as unknown as CogniteDatapointResponse[]).map(mapDatapointResult) };\n  }\n\n  async insertDatapoints(items: CogniteDatapointInsertItem[]): Promise<void> {\n    const sdkItems = items.map(({ space, externalId, datapoints }) => ({\n      instanceId: { space, externalId },\n      datapoints,\n    }));\n    await this.client.datapoints.insert(\n      sdkItems as Parameters<typeof this.client.datapoints.insert>[0],\n    );\n  }\n\n  async deleteDatapoints(items: CogniteDatapointDeleteItem[]): Promise<void> {\n    const sdkItems = items.map(({ space, externalId, inclusiveBegin, exclusiveEnd }) => ({\n      instanceId: { space, externalId },\n      inclusiveBegin,\n      ...(exclusiveEnd !== undefined ? { exclusiveEnd } : {}),\n    }));\n    await this.client.datapoints.delete(\n      sdkItems as Parameters<typeof this.client.datapoints.delete>[0],\n    );\n  }\n\n  async uploadFile(\n    fileInfo: CogniteFileUploadInfo,\n    content?: unknown,\n  ): Promise<CogniteFileUploadResult> {\n    const { instanceId, ...rest } = fileInfo;\n    const response = await this.client.files.upload(\n      { ...rest, instanceId } as Parameters<typeof this.client.files.upload>[0],\n      content as Parameters<typeof this.client.files.upload>[1],\n      false,\n      content !== undefined,\n    );\n    return mapFileResult(response as SdkFileInfo);\n  }\n\n  async getFileDownloadUrls(\n    ids: Array<{ instanceId: { space: string; externalId: string } }>,\n  ): Promise<CogniteFileDownloadUrl[]> {\n    const response = await this.client.files.getDownloadUrls(\n      ids as Parameters<typeof this.client.files.getDownloadUrls>[0],\n    );\n    return (\n      response as Array<{\n        instanceId?: { space?: string; externalId?: string };\n        downloadUrl: string;\n      }>\n    ).map((item) => ({\n      ...(item.instanceId !== undefined ? { instanceId: item.instanceId } : {}),\n      downloadUrl: item.downloadUrl,\n    }));\n  }\n}\n\ntype SdkFileInfo = {\n  instanceId?: { space?: string; externalId?: string };\n  name: string;\n  uploaded: boolean;\n  uploadedTime?: Date;\n  createdTime: Date;\n  lastUpdatedTime: Date;\n  mimeType?: string;\n  directory?: string;\n  source?: string;\n  uploadUrl?: string;\n};\n\nfunction mapFileResult(item: SdkFileInfo): CogniteFileUploadResult {\n  return {\n    ...(item.instanceId !== undefined ? { instanceId: item.instanceId } : {}),\n    name: item.name,\n    uploaded: item.uploaded,\n    createdTime: item.createdTime,\n    lastUpdatedTime: item.lastUpdatedTime,\n    ...(item.uploadedTime !== undefined ? { uploadedTime: item.uploadedTime } : {}),\n    ...(item.mimeType !== undefined ? { mimeType: item.mimeType } : {}),\n    ...(item.directory !== undefined ? { directory: item.directory } : {}),\n    ...(item.source !== undefined ? { source: item.source } : {}),\n    ...(item.uploadUrl !== undefined ? { uploadUrl: item.uploadUrl } : {}),\n  };\n}\n\nfunction mapDatapointResult(item: CogniteDatapointResponse): CogniteDatapointResultItem {\n  return {\n    ...(item.instanceId?.space !== undefined ? { space: item.instanceId.space } : {}),\n    ...(item.instanceId?.externalId !== undefined\n      ? { externalId: item.instanceId.externalId }\n      : {}),\n    isString: item.isString ?? false,\n    ...(item.unit !== undefined ? { unit: item.unit } : {}),\n    datapoints: item.datapoints ?? [],\n    ...(item.nextCursor !== undefined ? { nextCursor: item.nextCursor } : {}),\n  };\n}\n","export const NESTED_SEP = \"|\" as const;\nexport const EDGE_MARKER = \"<EdgeMarker>\" as const;\nexport const MAX_LIMIT = 10_000;\nexport const DEFAULT_LIMIT = 1_000;\nexport const MAX_DEPENDENCY_DEPTH = 3;\nexport const AGGREGATE_LIMIT = 1_000;\nexport const MAX_GROUP_BY = 5;\nexport const MAX_AGGREGATES = 5;\n","import type { AggregateDefinition, AggregateOptions } from \"../types\";\n\nexport type AggregateOpName = \"avg\" | \"min\" | \"max\" | \"sum\" | \"count\";\n\nexport function normalizeAggregatesOption<TModel>(\n  aggregates: AggregateOptions<TModel>[\"aggregates\"],\n): AggregateDefinition<TModel>[] {\n  if (aggregates === undefined) return [];\n  if (Array.isArray(aggregates)) {\n    return [...aggregates];\n  }\n  return [aggregates as AggregateDefinition<TModel>];\n}\n\nexport function resolveAggregateDefinitions<TModel>(\n  options: Pick<AggregateOptions<TModel>, \"aggregate\" | \"aggregates\">,\n): AggregateDefinition<TModel>[] {\n  if (options.aggregates !== undefined) {\n    return normalizeAggregatesOption(options.aggregates);\n  }\n  if (options.aggregate !== undefined) {\n    return [options.aggregate];\n  }\n  return [];\n}\n\nexport function getAggregateOpName<TModel>(def: AggregateDefinition<TModel>): AggregateOpName {\n  if (\"count\" in def) return \"count\";\n  if (\"avg\" in def) return \"avg\";\n  if (\"min\" in def) return \"min\";\n  if (\"max\" in def) return \"max\";\n  if (\"sum\" in def) return \"sum\";\n  throw new Error(\"Invalid aggregate definition\");\n}\n","export function chunks<TItem>(items: TItem[], size: number): TItem[][] {\n  const result: TItem[][] = [];\n  for (let index = 0; index < items.length; index += size) {\n    result.push(items.slice(index, index + size));\n  }\n  return result;\n}\n","import type { InstancesQueryRequest, InstancesQueryResponse } from \"../cognite\";\nimport { EDGE_MARKER, MAX_LIMIT, NESTED_SEP } from \"../constants\";\nimport type { QueryResultMap } from \"../types\";\n\nexport function mapNodesAndEdges(\n  queryResult: InstancesQueryResponse,\n  _query: InstancesQueryRequest,\n): QueryResultMap {\n  return queryResult.items;\n}\n\nexport function appendNodesAndEdges(\n  initial: QueryResultMap,\n  additional: QueryResultMap | null,\n): QueryResultMap {\n  if (!additional) return initial;\n\n  for (const [key, items] of Object.entries(additional)) {\n    const existing = initial[key];\n    if (existing) {\n      existing.push(...items);\n    } else {\n      initial[key] = [...items];\n    }\n  }\n\n  return initial;\n}\n\nexport function getQueryForDependenciesPagination(\n  query: InstancesQueryRequest,\n  queryResult: InstancesQueryResponse,\n  viewExternalId: string,\n): InstancesQueryRequest | null {\n  const cursorKeys = new Set(Object.keys(queryResult.nextCursor));\n  const { nodesParent, nodesChildren } = getParentAndChildrenNodes(cursorKeys);\n\n  const leafCursors = getLeafCursors(queryResult, viewExternalId, nodesParent, nodesChildren);\n\n  if (Object.keys(leafCursors).length === 0) {\n    return null;\n  }\n\n  return buildDependenciesQuery(query, nodesParent, nodesChildren, leafCursors);\n}\n\nfunction getParentAndChildrenNodes(keys: Set<string>): {\n  nodesParent: Map<string, Set<string>>;\n  nodesChildren: Map<string, Set<string>>;\n} {\n  const nodesParent = new Map<string, Set<string>>();\n  const nodesChildren = new Map<string, Set<string>>();\n\n  for (const key of keys) {\n    const keyParts = key.split(NESTED_SEP);\n    const validParents = new Set<string>();\n\n    for (let i = keyParts.length - 1; i > 0; i--) {\n      const parentPath = keyParts.slice(0, i).join(NESTED_SEP);\n      const parentWithEdgeMarker = `${parentPath}${NESTED_SEP}${EDGE_MARKER}`;\n\n      if (keys.has(parentWithEdgeMarker)) {\n        validParents.add(parentWithEdgeMarker);\n        const children = nodesChildren.get(parentWithEdgeMarker) ?? new Set<string>();\n        children.add(key);\n        nodesChildren.set(parentWithEdgeMarker, children);\n      }\n      if (keys.has(parentPath)) {\n        validParents.add(parentPath);\n        const children = nodesChildren.get(parentPath) ?? new Set<string>();\n        children.add(key);\n        nodesChildren.set(parentPath, children);\n      }\n    }\n\n    nodesParent.set(key, validParents);\n  }\n\n  return { nodesParent, nodesChildren };\n}\n\nfunction getLeafCursors(\n  queryResult: InstancesQueryResponse,\n  viewExternalId: string,\n  nodesParent: Map<string, Set<string>>,\n  nodesChildren: Map<string, Set<string>>,\n): Record<string, string> {\n  const targetCursors: Record<string, string> = {};\n  const targetCursorKeys = new Set<string>();\n\n  for (const [cursorKey, cursorValue] of Object.entries(queryResult.nextCursor)) {\n    if (\n      cursorKey === viewExternalId ||\n      !cursorValue ||\n      (queryResult.items[cursorKey]?.length ?? 0) !== MAX_LIMIT\n    ) {\n      continue;\n    }\n\n    const children = nodesChildren.get(cursorKey) ?? new Set<string>();\n    let skipDueToChild = false;\n    for (const c of children) {\n      if (targetCursorKeys.has(c)) {\n        skipDueToChild = true;\n        break;\n      }\n    }\n    if (skipDueToChild) continue;\n\n    const parent = nodesParent.get(cursorKey) ?? new Set<string>();\n    for (const key of parent) {\n      if (targetCursorKeys.has(key)) {\n        delete targetCursors[key];\n        targetCursorKeys.delete(key);\n      }\n    }\n\n    targetCursors[cursorKey] = cursorValue;\n    targetCursorKeys.add(cursorKey);\n  }\n\n  return targetCursors;\n}\n\nfunction buildDependenciesQuery(\n  previousQuery: InstancesQueryRequest,\n  nodesParent: Map<string, Set<string>>,\n  nodesChildren: Map<string, Set<string>>,\n  leafCursors: Record<string, string>,\n): InstancesQueryRequest {\n  const withExprs: InstancesQueryRequest[\"with\"] = {};\n  const selectExprs: InstancesQueryRequest[\"select\"] = {};\n  const finalCursors: Record<string, string> = {};\n\n  for (const [cursorKey, cursorValue] of Object.entries(leafCursors)) {\n    const children = nodesChildren.get(cursorKey) ?? new Set<string>();\n    const parent = nodesParent.get(cursorKey) ?? new Set<string>();\n    const validKeys = new Set([...parent, ...children, cursorKey]);\n\n    for (const [k, v] of Object.entries(previousQuery.with)) {\n      if (validKeys.has(k)) withExprs[k] = v;\n    }\n    for (const [k, v] of Object.entries(previousQuery.select)) {\n      if (validKeys.has(k)) selectExprs[k] = v;\n    }\n    for (const [k, v] of Object.entries(previousQuery.cursors ?? {})) {\n      if (parent.has(k) && v) finalCursors[k] = v;\n    }\n\n    finalCursors[cursorKey] = cursorValue;\n  }\n\n  return { with: withExprs, select: selectExprs, cursors: finalCursors };\n}\n","import type {\n  EdgeConnection,\n  QuerySelectExpression,\n  ReverseDirectRelationConnection,\n  ViewDefinition,\n  ViewDefinitionProperty,\n  ViewPropertyDefinition,\n  ViewReference,\n} from \"../cognite\";\n\nconst NODE_PROPERTIES = new Set([\n  \"externalId\",\n  \"space\",\n  \"createdTime\",\n  \"deletedTime\",\n  \"lastUpdatedTime\",\n]);\nconst EDGE_PROPERTIES = new Set([\"startNode\", \"endNode\", \"type\"]);\n\nexport function getPropertyRef(\n  property: string,\n  view: ViewDefinition,\n  instanceType: \"node\" | \"edge\" = \"node\",\n): string[] {\n  if (NODE_PROPERTIES.has(property)) return [instanceType, property];\n  if (instanceType === \"edge\" && EDGE_PROPERTIES.has(property)) return [\"edge\", property];\n  return [view.space, `${view.externalId}/${view.version}`, property];\n}\n\nexport function toViewReference(view: ViewDefinition): ViewReference {\n  return { type: \"view\", space: view.space, externalId: view.externalId, version: view.version };\n}\n\nexport function isViewPropertyDefinition(p: ViewDefinitionProperty): p is ViewPropertyDefinition {\n  return \"container\" in p;\n}\n\nexport function isReverseDirectRelation(\n  p: ViewDefinitionProperty,\n): p is ReverseDirectRelationConnection {\n  return \"through\" in p;\n}\n\nexport function isEdgeConnection(p: ViewDefinitionProperty): p is EdgeConnection {\n  return !isViewPropertyDefinition(p) && !isReverseDirectRelation(p) && \"source\" in p;\n}\n\nexport function getDirectRelationSource(p: ViewPropertyDefinition): ViewReference | undefined {\n  const type = p.type;\n  if (type.type === \"direct\" && type.source) return type.source;\n  return undefined;\n}\n\nexport function isDirectRelationWithSource(p: ViewDefinitionProperty): boolean {\n  if (!isViewPropertyDefinition(p)) return false;\n  return getDirectRelationSource(p) !== undefined;\n}\n\nexport function isListDirectRelation(p: ViewPropertyDefinition): boolean {\n  return p.type.list === true;\n}\n\nexport function buildSelect(\n  source: ViewReference,\n  properties: string[],\n): QuerySelectExpression | Record<string, never> {\n  if (properties.length === 0) return {};\n  return { sources: [{ source, properties }] };\n}\n\nconst GROUPABLE_PROPERTY_TYPES = new Set([\n  \"text\",\n  \"direct\",\n  \"int32\",\n  \"int64\",\n  \"float32\",\n  \"float64\",\n  \"boolean\",\n  \"enum\",\n]);\n\nconst NUMERIC_PROPERTY_TYPES = new Set([\"int32\", \"int64\", \"float32\", \"float64\"]);\n\nexport function isGroupableProperty(property: ViewDefinitionProperty): boolean {\n  if (!isViewPropertyDefinition(property)) return false;\n  const type = property.type.type;\n  if (type == null || !GROUPABLE_PROPERTY_TYPES.has(type)) return false;\n  // Cognite explodes list properties (direct relations and primitive arrays).\n  return true;\n}\n\n/** Countable properties are groupable scalars — list fields can be grouped, not counted. */\nexport function isCountableProperty(property: ViewDefinitionProperty): boolean {\n  if (!isViewPropertyDefinition(property)) return false;\n  if (property.type.list === true) return false;\n  return isGroupableProperty(property);\n}\n\nexport function isNumericProperty(property: ViewPropertyDefinition): boolean {\n  if (property.type.list === true) return false;\n  const type = property.type.type;\n  return type != null && NUMERIC_PROPERTY_TYPES.has(type);\n}\n\nexport function getSelectedGroupByKeys(groupBy: Record<string, boolean | undefined>): string[] {\n  return Object.entries(groupBy)\n    .filter((entry): entry is [string, true] => entry[1] === true)\n    .map(([key]) => key);\n}\n","import { z } from \"zod\";\nimport type { ViewDefinition, ViewPropertyDefinition } from \"./cognite\";\nimport { isViewPropertyDefinition } from \"./utils\";\n\nexport interface BuildViewSchemaOptions {\n  dateMode?: \"preserve\" | \"coerce\";\n}\n\nexport const nodeIdSchema = z.object({\n  space: z.string().min(1),\n  externalId: z.string().min(1),\n});\n\nfunction dateSchema(dateMode: BuildViewSchemaOptions[\"dateMode\"]): z.ZodType {\n  if (dateMode === \"coerce\") {\n    return z.preprocess(\n      (value) => (typeof value === \"string\" || typeof value === \"number\" ? new Date(value) : value),\n      z.date(),\n    );\n  }\n  return z.union([z.string(), z.date()]);\n}\n\nexport function propertyValueSchema(\n  property: ViewPropertyDefinition,\n  options: BuildViewSchemaOptions = {},\n): z.ZodType {\n  const type = property.type;\n  let schema: z.ZodType;\n\n  switch (type.type) {\n    case \"text\":\n      schema = z.string();\n      break;\n    case \"enum\":\n      if (type.values && Object.keys(type.values).length > 0) {\n        const values = Object.keys(type.values) as [string, ...string[]];\n        schema = z.enum(values);\n      } else {\n        schema = z.string();\n      }\n      break;\n    case \"int32\":\n    case \"int64\":\n      schema = z.number().int();\n      break;\n    case \"float32\":\n    case \"float64\":\n      schema = z.number();\n      break;\n    case \"boolean\":\n      schema = z.boolean();\n      break;\n    case \"date\":\n    case \"timestamp\":\n      schema = dateSchema(options.dateMode);\n      break;\n    case \"direct\":\n      schema = nodeIdSchema;\n      break;\n    case \"json\":\n      schema = z.unknown();\n      break;\n    default:\n      schema = z.unknown();\n      break;\n  }\n\n  return type.list === true ? z.array(schema) : schema;\n}\n\nexport function buildViewSchema(\n  view: ViewDefinition,\n  options: BuildViewSchemaOptions = {},\n): z.ZodObject<Record<string, z.ZodType>> {\n  const shape: Record<string, z.ZodType> = {};\n\n  for (const [name, property] of Object.entries(view.properties)) {\n    if (isViewPropertyDefinition(property)) {\n      shape[name] = propertyValueSchema(property, options).optional();\n    }\n  }\n\n  return z.object(shape).strict();\n}\n","import { z } from \"zod\";\nimport type { ViewDefinition, ViewDefinitionProperty, ViewPropertyDefinition } from \"../cognite\";\nimport { MAX_LIMIT } from \"../constants\";\nimport type { ViewMapper } from \"../mappers/view-mapper\";\nimport type { QueryOptions } from \"../types\";\nimport {\n  getDirectRelationSource,\n  isEdgeConnection,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n} from \"../utils\";\nimport { nodeIdSchema } from \"../validation\";\n\nconst NODE_STRING_PROPERTIES = [\"externalId\", \"space\"] as const;\nconst NODE_NUMBER_PROPERTIES = [\"createdTime\", \"deletedTime\", \"lastUpdatedTime\"] as const;\nconst NODE_PROPERTIES = new Set<string>([...NODE_STRING_PROPERTIES, ...NODE_NUMBER_PROPERTIES]);\nconst EDGE_NODE_ID_PROPERTIES = [\"startNode\", \"endNode\", \"type\"] as const;\nconst SORT_DIRECTION_SCHEMA = z.enum([\"ascending\", \"descending\"]);\n\nconst recordSchema = z.record(z.string(), z.unknown());\nconst leafOps = new Set([\n  \"eq\",\n  \"in\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"exists\",\n  \"prefix\",\n  \"search\",\n  \"containsAny\",\n  \"containsAll\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isLeafFilter(value: Record<string, unknown>): boolean {\n  return Object.keys(value).some((key) => leafOps.has(key));\n}\n\nfunction issuePath(path: PropertyKey[]): string {\n  return path.length === 0 ? \"query\" : path.map(String).join(\".\");\n}\n\nfunction formatZodIssues(error: z.ZodError, path: Array<string | number>): string[] {\n  return error.issues.map((issue) => `${issuePath([...path, ...issue.path])}: ${issue.message}`);\n}\n\nfunction getRelationTarget(property: ViewDefinitionProperty): string | null {\n  if (isViewPropertyDefinition(property)) {\n    return getDirectRelationSource(property)?.externalId ?? null;\n  }\n  if (isReverseDirectRelation(property) || isEdgeConnection(property)) {\n    return property.source.externalId;\n  }\n  return null;\n}\n\nfunction baseValueSchema(\n  property: ViewPropertyDefinition | \"node-string\" | \"node-number\" | \"edge-node-id\",\n): z.ZodType {\n  if (property === \"node-string\") return z.string();\n  if (property === \"node-number\") return z.number();\n  if (property === \"edge-node-id\") return nodeIdSchema;\n\n  switch (property.type.type) {\n    case \"text\":\n    case \"enum\":\n      return z.string();\n    case \"int32\":\n    case \"int64\":\n      return z.number().int();\n    case \"float32\":\n    case \"float64\":\n      return z.number();\n    case \"boolean\":\n      return z.boolean();\n    case \"date\":\n    case \"timestamp\":\n      return z.union([z.string(), z.date()]);\n    case \"direct\":\n      return nodeIdSchema;\n    default:\n      return z.union([z.string(), z.number(), z.boolean()]);\n  }\n}\n\nfunction leafFilterSchema(\n  property: ViewPropertyDefinition | \"node-string\" | \"node-number\" | \"edge-node-id\",\n): z.ZodType {\n  const value = baseValueSchema(property);\n  const isList = typeof property !== \"string\" && property.type.list === true;\n\n  if (isList) {\n    const shape: Record<string, z.ZodType> = {\n      containsAny: z.array(value).optional(),\n      containsAll: z.array(value).optional(),\n      exists: z.boolean().optional(),\n    };\n    if (property.type.type === \"text\") {\n      shape.search = z\n        .object({\n          query: z.string(),\n          operator: z.enum([\"OR\", \"AND\"]).optional(),\n        })\n        .strict()\n        .optional();\n    }\n    return z.object(shape).strict();\n  }\n\n  if (\n    property === \"node-string\" ||\n    (typeof property !== \"string\" && property.type.type === \"text\")\n  ) {\n    const shape: Record<string, z.ZodType> = {\n      eq: z.string().optional(),\n      in: z.array(z.string()).optional(),\n      prefix: z.string().optional(),\n      exists: z.boolean().optional(),\n    };\n    if (property !== \"node-string\") {\n      shape.search = z\n        .object({\n          query: z.string(),\n          operator: z.enum([\"OR\", \"AND\"]).optional(),\n        })\n        .strict()\n        .optional();\n    }\n    return z.object(shape).strict();\n  }\n\n  if (property === \"edge-node-id\") {\n    return z\n      .object({\n        eq: value.optional(),\n        in: z.array(value).optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  if (typeof property !== \"string\" && property.type.type === \"enum\") {\n    return z\n      .object({\n        eq: z.string().optional(),\n        in: z.array(z.string()).optional(),\n        prefix: z.string().optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  if (\n    property === \"node-number\" ||\n    (typeof property !== \"string\" &&\n      [\"int32\", \"int64\", \"float32\", \"float64\"].includes(property.type.type ?? \"\"))\n  ) {\n    return z\n      .object({\n        eq: value.optional(),\n        in: z.array(value).optional(),\n        gt: value.optional(),\n        gte: value.optional(),\n        lt: value.optional(),\n        lte: value.optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  if (typeof property !== \"string\" && [\"date\", \"timestamp\"].includes(property.type.type ?? \"\")) {\n    return z\n      .object({\n        eq: value.optional(),\n        in: z.array(value).optional(),\n        gt: value.optional(),\n        gte: value.optional(),\n        lt: value.optional(),\n        lte: value.optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  if (typeof property !== \"string\" && property.type.type === \"boolean\") {\n    return z\n      .object({\n        eq: z.boolean().optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  if (typeof property !== \"string\" && property.type.type === \"direct\") {\n    return z\n      .object({\n        eq: nodeIdSchema.optional(),\n        in: z.array(nodeIdSchema).optional(),\n        exists: z.boolean().optional(),\n      })\n      .strict();\n  }\n\n  return z\n    .object({\n      eq: value.optional(),\n      in: z.array(value).optional(),\n      exists: z.boolean().optional(),\n    })\n    .strict();\n}\n\nexport class QueryValidator {\n  constructor(private readonly viewMapper: ViewMapper) {}\n\n  async validate<TModel>(options: QueryOptions<TModel>, rootView: ViewDefinition): Promise<void> {\n    const errors: string[] = [];\n\n    errors.push(...this.validateOptionsShape(options, rootView));\n    if (options.select !== undefined) {\n      errors.push(...(await this.validateSelect(options.select, rootView, [\"select\"])));\n    }\n    if (options.filters !== undefined) {\n      errors.push(...(await this.validateWhereInput(options.filters, rootView, [\"filters\"])));\n    }\n    if (options.sort !== undefined) {\n      errors.push(...this.validateSort(options.sort, rootView, [\"sort\"]));\n    }\n\n    if (errors.length > 0) {\n      throw new Error(`Invalid query options:\\n${errors.map((error) => `- ${error}`).join(\"\\n\")}`);\n    }\n  }\n\n  private validateOptionsShape<TModel>(\n    options: QueryOptions<TModel>,\n    rootView: ViewDefinition,\n  ): string[] {\n    const schema = z\n      .object({\n        viewExternalId: z.literal(rootView.externalId),\n        select: z.unknown().optional(),\n        filters: z.unknown().optional(),\n        sort: z.unknown().optional(),\n        limit: z.union([z.literal(-1), z.number().int().positive().max(MAX_LIMIT)]).optional(),\n        cursor: z.string().nullable().optional(),\n      })\n      .strict();\n\n    const result = schema.safeParse(options);\n    return result.success ? [] : formatZodIssues(result.error, []);\n  }\n\n  private async validateSelect(\n    select: unknown,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): Promise<string[]> {\n    const shape: Record<string, z.ZodType> = {\n      _all: z.literal(true).optional(),\n    };\n\n    for (const property of NODE_PROPERTIES) {\n      shape[property] = z.boolean().optional();\n    }\n\n    for (const [name, property] of Object.entries(view.properties)) {\n      const target = getRelationTarget(property);\n      if (target != null) {\n        const nestedSelect = recordSchema;\n        shape[name] = isViewPropertyDefinition(property)\n          ? z.union([z.boolean(), nestedSelect]).optional()\n          : nestedSelect.optional();\n      } else {\n        shape[name] = z.boolean().optional();\n      }\n    }\n\n    const result = z.object(shape).strict().safeParse(select);\n    if (!result.success) return formatZodIssues(result.error, path);\n    if (!isRecord(select)) return [];\n\n    const errors: string[] = [];\n    for (const [name, value] of Object.entries(select)) {\n      if (name === \"_all\" || value == null || typeof value !== \"object\" || Array.isArray(value)) {\n        continue;\n      }\n\n      const property = view.properties[name];\n      if (!property) continue;\n\n      const target = getRelationTarget(property);\n      if (target == null) {\n        errors.push(\n          `${issuePath([...path, name])}: property \"${name}\" does not support nested select`,\n        );\n        continue;\n      }\n\n      if (view.usedFor === \"edge\") {\n        errors.push(\n          `${issuePath([...path, name])}: relation traversal from edge views is not supported`,\n        );\n        continue;\n      }\n\n      if (isReverseDirectRelation(property) && property.targetsList) {\n        errors.push(\n          `${issuePath([...path, name])}: cannot select \"${name}\" — Cognite does not support inward traversal of list direct relations. Query \"${property.source.externalId}\" directly and filter by the \"${property.through.identifier}\" field instead.`,\n        );\n        continue;\n      }\n\n      const targetView = await this.viewMapper.getView(target);\n      errors.push(...(await this.validateSelect(value, targetView, [...path, name])));\n    }\n\n    return errors;\n  }\n\n  async validateWhereInput(\n    filters: unknown,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): Promise<string[]> {\n    return this.validateFilters(filters, view, path);\n  }\n\n  private async validateFilters(\n    filters: unknown,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): Promise<string[]> {\n    const shape: Record<string, z.ZodType> = {\n      AND: z.union([recordSchema, z.array(recordSchema)]).optional(),\n      OR: z.array(recordSchema).optional(),\n      NOT: z.union([recordSchema, z.array(recordSchema)]).optional(),\n    };\n\n    for (const property of NODE_STRING_PROPERTIES) {\n      shape[property] = z.unknown().optional();\n    }\n    for (const property of NODE_NUMBER_PROPERTIES) {\n      shape[property] = z.unknown().optional();\n    }\n    for (const property of Object.keys(view.properties)) {\n      shape[property] = z.unknown().optional();\n    }\n    if (view.usedFor === \"edge\") {\n      for (const property of EDGE_NODE_ID_PROPERTIES) {\n        shape[property] = z.unknown().optional();\n      }\n    }\n\n    const result = z.object(shape).strict().safeParse(filters);\n    if (!result.success) return formatZodIssues(result.error, path);\n    if (!isRecord(filters)) return [];\n\n    const errors: string[] = [];\n    for (const [name, value] of Object.entries(filters)) {\n      if (value == null) continue;\n\n      if (name === \"AND\" || name === \"OR\" || name === \"NOT\") {\n        const clauses = Array.isArray(value) ? value : [value];\n        for (const [index, clause] of clauses.entries()) {\n          errors.push(...(await this.validateFilters(clause, view, [...path, name, index])));\n        }\n        continue;\n      }\n\n      if (!isRecord(value)) {\n        errors.push(`${issuePath([...path, name])}: Expected object`);\n        continue;\n      }\n\n      const nodePropertyType = NODE_STRING_PROPERTIES.includes(\n        name as (typeof NODE_STRING_PROPERTIES)[number],\n      )\n        ? \"node-string\"\n        : NODE_NUMBER_PROPERTIES.includes(name as (typeof NODE_NUMBER_PROPERTIES)[number])\n          ? \"node-number\"\n          : null;\n\n      if (nodePropertyType != null) {\n        errors.push(...this.validateLeafFilter(value, nodePropertyType, [...path, name]));\n        continue;\n      }\n\n      if (\n        view.usedFor === \"edge\" &&\n        EDGE_NODE_ID_PROPERTIES.includes(name as (typeof EDGE_NODE_ID_PROPERTIES)[number])\n      ) {\n        errors.push(...this.validateLeafFilter(value, \"edge-node-id\", [...path, name]));\n        continue;\n      }\n\n      const property = view.properties[name];\n      if (!property) continue;\n\n      if (isViewPropertyDefinition(property)) {\n        const target = getDirectRelationSource(property);\n        if (target != null && !isLeafFilter(value)) {\n          if (view.usedFor === \"edge\") {\n            errors.push(\n              `${issuePath([...path, name])}: relation traversal from edge views is not supported`,\n            );\n            continue;\n          }\n          const targetView = await this.viewMapper.getView(target.externalId);\n          errors.push(...(await this.validateFilters(value, targetView, [...path, name])));\n        } else {\n          errors.push(...this.validateLeafFilter(value, property, [...path, name]));\n        }\n        continue;\n      }\n\n      const target = getRelationTarget(property);\n      if (target == null) {\n        errors.push(`${issuePath([...path, name])}: property \"${name}\" does not support filters`);\n        continue;\n      }\n\n      errors.push(\n        `${issuePath([...path, name])}: filtering through \"${name}\" is not supported by the query mapper`,\n      );\n    }\n\n    return errors;\n  }\n\n  private validateLeafFilter(\n    value: Record<string, unknown>,\n    property: ViewPropertyDefinition | \"node-string\" | \"node-number\" | \"edge-node-id\",\n    path: Array<string | number>,\n  ): string[] {\n    const result = leafFilterSchema(property).safeParse(value);\n    return result.success ? [] : formatZodIssues(result.error, path);\n  }\n\n  private validateSort(\n    sort: unknown,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): string[] {\n    const shape: Record<string, z.ZodType> = {};\n\n    for (const property of NODE_PROPERTIES) {\n      shape[property] = SORT_DIRECTION_SCHEMA.optional();\n    }\n    for (const [name, property] of Object.entries(view.properties)) {\n      if (isViewPropertyDefinition(property) && property.type.list !== true) {\n        shape[name] = SORT_DIRECTION_SCHEMA.optional();\n      }\n    }\n    if (view.usedFor === \"edge\") {\n      for (const property of EDGE_NODE_ID_PROPERTIES) {\n        shape[property] = SORT_DIRECTION_SCHEMA.optional();\n      }\n    }\n\n    const result = z.object(shape).strict().safeParse(sort);\n    return result.success ? [] : formatZodIssues(result.error, path);\n  }\n}\n","import { z } from \"zod\";\nimport type { ViewDefinition } from \"../cognite\";\nimport { MAX_AGGREGATES, MAX_GROUP_BY } from \"../constants\";\nimport type { ViewMapper } from \"../mappers/view-mapper\";\nimport type { AggregateDefinition, AggregateGroupBy, AggregateOptions } from \"../types\";\nimport {\n  getDirectRelationSource,\n  getSelectedGroupByKeys,\n  isCountableProperty,\n  isGroupableProperty,\n  isNumericProperty,\n  isViewPropertyDefinition,\n  normalizeAggregatesOption,\n  resolveAggregateDefinitions,\n} from \"../utils\";\nimport { QueryValidator } from \"./query-validator\";\n\nconst NODE_COUNT_PROPERTIES = new Set([\"externalId\", \"space\"]);\n\nfunction issuePath(path: PropertyKey[]): string {\n  return path.length === 0 ? \"aggregates\" : path.map(String).join(\".\");\n}\n\nfunction formatZodIssues(error: z.ZodError, path: Array<string | number>): string[] {\n  return error.issues.map((issue) => `${issuePath([...path, ...issue.path])}: ${issue.message}`);\n}\n\nfunction isEmptyObject(value: unknown): value is Record<string, never> {\n  return (\n    value != null &&\n    typeof value === \"object\" &&\n    !Array.isArray(value) &&\n    Object.keys(value).length === 0\n  );\n}\n\nexport class AggregateValidator {\n  private readonly queryValidator: QueryValidator;\n\n  constructor(viewMapper: ViewMapper) {\n    this.queryValidator = new QueryValidator(viewMapper);\n  }\n\n  async validate<TModel>(\n    options: AggregateOptions<TModel>,\n    rootView: ViewDefinition,\n  ): Promise<void> {\n    const errors: string[] = [];\n\n    if (rootView.usedFor === \"edge\") {\n      throw new Error(\n        `Invalid aggregate options:\\n- viewExternalId: edge views are query-only; aggregate is not supported for \"${rootView.externalId}\"`,\n      );\n    }\n\n    errors.push(...this.validateOptionsShape(options, rootView));\n\n    const selectedGroupBy = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\n    const aggregateDefs = resolveAggregateDefinitions(options);\n    const hasAggregates = aggregateDefs.length > 0;\n\n    if (options.aggregate !== undefined && options.aggregates !== undefined) {\n      errors.push(\"aggregates: cannot set both aggregate and aggregates\");\n    }\n\n    if (\n      options.aggregates !== undefined &&\n      normalizeAggregatesOption(options.aggregates).length === 0\n    ) {\n      errors.push(\"aggregates: must contain at least one aggregate definition\");\n    }\n\n    if (aggregateDefs.length > MAX_AGGREGATES) {\n      errors.push(`aggregates: at most ${MAX_AGGREGATES} operations can be requested`);\n    }\n\n    if (selectedGroupBy.length === 0 && !hasAggregates) {\n      errors.push(\"aggregates: either groupBy, aggregate, or aggregates must be provided\");\n    }\n\n    if (options.filters !== undefined) {\n      errors.push(\n        ...(await this.queryValidator.validateWhereInput(options.filters, rootView, [\"filters\"])),\n      );\n    }\n\n    if (options.groupBy !== undefined) {\n      errors.push(...this.validateGroupBy(options.groupBy, rootView, [\"groupBy\"]));\n    }\n\n    for (const { def, path } of this.aggregateDefEntries(options)) {\n      errors.push(\n        ...this.validateAggregate(\n          def as AggregateDefinition<Record<string, unknown>>,\n          rootView,\n          path,\n        ),\n      );\n    }\n\n    if (errors.length > 0) {\n      throw new Error(\n        `Invalid aggregate options:\\n${errors.map((error) => `- ${error}`).join(\"\\n\")}`,\n      );\n    }\n  }\n\n  private aggregateDefEntries<TModel>(\n    options: AggregateOptions<TModel>,\n  ): Array<{ def: AggregateDefinition<TModel>; path: Array<string | number> }> {\n    if (options.aggregates !== undefined) {\n      const defs = normalizeAggregatesOption(options.aggregates);\n      if (Array.isArray(options.aggregates)) {\n        return defs.flatMap((def, index) =>\n          def === undefined ? [] : [{ def, path: [\"aggregates\", index] }],\n        );\n      }\n      return defs.map((def) => ({ def, path: [\"aggregates\"] }));\n    }\n    if (options.aggregate !== undefined) {\n      return [{ def: options.aggregate, path: [\"aggregate\"] }];\n    }\n    return [];\n  }\n\n  private validateOptionsShape<TModel>(\n    options: AggregateOptions<TModel>,\n    rootView: ViewDefinition,\n  ): string[] {\n    const schema = z\n      .object({\n        viewExternalId: z.literal(rootView.externalId),\n        filters: z.unknown().optional(),\n        groupBy: z.unknown().optional(),\n        aggregates: z.unknown().optional(),\n        aggregate: z.unknown().optional(),\n      })\n      .strict();\n\n    const result = schema.safeParse(options);\n    return result.success ? [] : formatZodIssues(result.error, []);\n  }\n\n  private validateGroupBy(\n    groupBy: AggregateGroupBy<unknown>,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): string[] {\n    const shape: Record<string, z.ZodType> = {};\n    for (const [name, property] of Object.entries(view.properties)) {\n      if (isGroupableProperty(property)) {\n        shape[name] = z.literal(true).optional();\n      }\n    }\n\n    const result = z.object(shape).strict().safeParse(groupBy);\n    if (!result.success) {\n      return formatZodIssues(result.error, path);\n    }\n\n    const selected = getSelectedGroupByKeys(groupBy as Record<string, boolean | undefined>);\n    const errors: string[] = [];\n\n    if (selected.length === 0) {\n      errors.push(`${issuePath(path)}: at least one property must be set to true`);\n    }\n    if (selected.length > MAX_GROUP_BY) {\n      errors.push(`${issuePath(path)}: at most ${MAX_GROUP_BY} properties can be grouped`);\n    }\n\n    for (const name of selected) {\n      const property = view.properties[name];\n      if (!property || !isGroupableProperty(property)) {\n        errors.push(`${issuePath([...path, name])}: property \"${name}\" cannot be used in groupBy`);\n      }\n    }\n\n    return errors;\n  }\n\n  private validateAggregate(\n    aggregate: AggregateDefinition<unknown>,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): string[] {\n    if (\"count\" in aggregate) {\n      const property = aggregate.count;\n      if (isEmptyObject(property)) {\n        return [];\n      }\n      if (typeof property === \"string\") {\n        if (NODE_COUNT_PROPERTIES.has(property)) {\n          return [];\n        }\n        const viewProperty = view.properties[property];\n        if (!viewProperty || !isCountableProperty(viewProperty)) {\n          return [`${issuePath([...path, \"count\"])}: property \"${property}\" cannot be counted`];\n        }\n        return [];\n      }\n      return [`${issuePath([...path, \"count\"])}: invalid count property`];\n    }\n\n    let propertyName: string | undefined;\n    let numericOp: \"avg\" | \"min\" | \"max\" | \"sum\" | null = null;\n    if (\"avg\" in aggregate) {\n      numericOp = \"avg\";\n      propertyName = aggregate.avg as string;\n    } else if (\"min\" in aggregate) {\n      numericOp = \"min\";\n      propertyName = aggregate.min as string;\n    } else if (\"max\" in aggregate) {\n      numericOp = \"max\";\n      propertyName = aggregate.max as string;\n    } else if (\"sum\" in aggregate) {\n      numericOp = \"sum\";\n      propertyName = aggregate.sum as string;\n    }\n\n    if (numericOp == null) {\n      return [`${issuePath(path)}: unknown aggregate operation`];\n    }\n    if (typeof propertyName !== \"string\") {\n      return [`${issuePath(path)}: aggregate property must be a string`];\n    }\n\n    const property = view.properties[propertyName];\n    if (!property || !isViewPropertyDefinition(property) || !isNumericProperty(property)) {\n      return [\n        `${issuePath([...path, numericOp])}: property \"${propertyName}\" must be a numeric view property`,\n      ];\n    }\n\n    if (getDirectRelationSource(property) != null) {\n      return [\n        `${issuePath([...path, numericOp])}: property \"${propertyName}\" is a relation and cannot be aggregated`,\n      ];\n    }\n\n    return [];\n  }\n}\n","import { z } from \"zod\";\nimport type { DatapointsDeleteRange, DatapointsRetrieveOptions } from \"../types\";\n\nconst dateSchema = z.date();\n\nconst nodeIdSchema = z.object({ space: z.string(), externalId: z.string() }).loose();\n\nconst limitSchema = z.union([z.literal(-1), z.number().int().positive()]);\n\nconst retrieveOptionsSchema = z\n  .object({\n    timeSeries: z.array(nodeIdSchema),\n    start: dateSchema.optional(),\n    end: dateSchema.optional(),\n    limit: limitSchema.optional(),\n  })\n  .loose();\n\nconst deleteRangeSchema = z\n  .object({\n    timeSeries: z.object({ space: z.string(), externalId: z.string() }).loose(),\n    start: dateSchema,\n    end: dateSchema.optional(),\n  })\n  .loose();\n\nfunction formatIssues(error: z.ZodError, prefix?: string): string[] {\n  return error.issues.map((issue) => {\n    const parts = prefix ? [prefix, ...issue.path] : [...issue.path];\n    return `${parts.map(String).join(\".\")}: ${issue.message}`;\n  });\n}\n\nexport class DatapointsValidator {\n  validateRetrieve(options: DatapointsRetrieveOptions): void {\n    const result = retrieveOptionsSchema.safeParse(options);\n    if (!result.success) {\n      const messages = formatIssues(result.error);\n      throw new Error(`Invalid datapoints options:\\n- ${messages.join(\"\\n- \")}`);\n    }\n  }\n\n  validateDelete(ranges: DatapointsDeleteRange[]): void {\n    const result = z.array(deleteRangeSchema).safeParse(ranges);\n    if (!result.success) {\n      const messages = formatIssues(result.error, \"ranges\");\n      throw new Error(`Invalid datapoints options:\\n- ${messages.join(\"\\n- \")}`);\n    }\n  }\n}\n","import { z } from \"zod\";\nimport type { NodeId } from \"../types\";\n\nconst nodeIdSchema = z\n  .object({\n    space: z.string().min(1),\n    externalId: z.string().min(1),\n  })\n  .loose();\n\nconst deleteItemsSchema = z.array(nodeIdSchema);\n\nfunction formatIssues(error: z.ZodError, prefix: string): string[] {\n  return error.issues.map((issue) => {\n    const parts = [prefix, ...issue.path];\n    return `${parts.map(String).join(\".\")}: ${issue.message}`;\n  });\n}\n\nexport class DeleteValidator {\n  validateItems(items: NodeId[]): void {\n    const result = deleteItemsSchema.safeParse(items);\n    if (!result.success) {\n      const messages = formatIssues(result.error, \"items\");\n      throw new Error(`Invalid delete options:\\n- ${messages.join(\"\\n- \")}`);\n    }\n  }\n}\n","import { z } from \"zod\";\nimport type { ViewDefinition, ViewDefinitionProperty } from \"../cognite\";\nimport { MAX_DEPENDENCY_DEPTH } from \"../constants\";\nimport type { ViewMapper } from \"../mappers/view-mapper\";\nimport {\n  getDirectRelationSource,\n  isEdgeConnection,\n  isListDirectRelation,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n} from \"../utils\";\nimport { propertyValueSchema } from \"../validation\";\n\ntype ResultSelect = {\n  _all?: true;\n  [property: string]: unknown;\n};\n\nconst nodeMetadataSchema = {\n  instanceType: z.literal(\"node\").optional(),\n  space: z.string(),\n  externalId: z.string(),\n  version: z.number().optional(),\n  createdTime: z.number().optional(),\n  deletedTime: z.number().optional(),\n  lastUpdatedTime: z.number().optional(),\n  _edges: z.record(z.string(), z.unknown()).optional(),\n};\n\nconst edgeEndpointSchema = z.object({ space: z.string(), externalId: z.string() });\n\nconst edgeMetadataSchema = {\n  instanceType: z.literal(\"edge\").optional(),\n  space: z.string(),\n  externalId: z.string(),\n  version: z.number().optional(),\n  createdTime: z.number().optional(),\n  deletedTime: z.number().optional(),\n  lastUpdatedTime: z.number().optional(),\n  type: edgeEndpointSchema.optional(),\n  startNode: edgeEndpointSchema,\n  endNode: edgeEndpointSchema,\n};\n\nfunction isListRelation(property: ViewDefinitionProperty): boolean {\n  if (isViewPropertyDefinition(property)) {\n    return isListDirectRelation(property);\n  }\n  if (isReverseDirectRelation(property)) {\n    return (\n      property.connectionType === \"multi_reverse_direct_relation\" || property.targetsList === true\n    );\n  }\n  return isEdgeConnection(property);\n}\n\nfunction isRecord(value: unknown): value is ResultSelect {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport class QueryResultValidator {\n  constructor(private readonly viewMapper: ViewMapper) {}\n\n  async parseItems(\n    rootViewExternalId: string,\n    items: Record<string, unknown>[],\n    select?: ResultSelect,\n  ) {\n    const rootView = await this.viewMapper.getView(rootViewExternalId);\n    const schema = await this.buildResultSchema(rootView, MAX_DEPENDENCY_DEPTH, select);\n    const result = z.array(schema).safeParse(items);\n\n    if (!result.success) {\n      throw new Error(\n        `Invalid query result:\\n${result.error.issues\n          .map((issue) => `- ${issue.path.map(String).join(\".\")}: ${issue.message}`)\n          .join(\"\\n\")}`,\n      );\n    }\n\n    return result.data;\n  }\n\n  private async buildResultSchema(\n    view: ViewDefinition,\n    remainingDepth: number,\n    select?: ResultSelect,\n  ): Promise<z.ZodObject<Record<string, z.ZodType>>> {\n    const shape: Record<string, z.ZodType> = {\n      ...(view.usedFor === \"edge\" ? edgeMetadataSchema : nodeMetadataSchema),\n    };\n    const includeAllProperties = select == null || select._all === true;\n\n    for (const [name, property] of Object.entries(view.properties)) {\n      const isSelected = includeAllProperties || name in select;\n      if (!isSelected) continue;\n\n      const nestedSelect = isRecord(select?.[name]) ? select[name] : undefined;\n\n      if (isViewPropertyDefinition(property)) {\n        const relationSource = getDirectRelationSource(property);\n        if (relationSource) {\n          shape[name] = await this.buildRelationSchema(\n            property,\n            relationSource.externalId,\n            remainingDepth,\n            nestedSelect,\n          );\n        } else {\n          shape[name] = propertyValueSchema(property, { dateMode: \"coerce\" }).optional();\n        }\n        continue;\n      }\n\n      if (isReverseDirectRelation(property) || isEdgeConnection(property)) {\n        shape[name] = await this.buildRelationSchema(\n          property,\n          property.source.externalId,\n          remainingDepth,\n          nestedSelect,\n        );\n      }\n    }\n\n    const schema = z.object(shape);\n    return includeAllProperties ? schema.strict() : schema;\n  }\n\n  private async buildRelationSchema(\n    property: ViewDefinitionProperty,\n    targetViewExternalId: string,\n    remainingDepth: number,\n    select?: ResultSelect,\n  ): Promise<z.ZodType> {\n    const isList = isListRelation(property);\n    const fallbackSchema = isViewPropertyDefinition(property)\n      ? propertyValueSchema(property, { dateMode: \"coerce\" })\n      : z.unknown();\n\n    if (remainingDepth <= 0 || select == null) {\n      return fallbackSchema.optional();\n    }\n\n    const targetView = await this.viewMapper.getView(targetViewExternalId);\n    const nestedSchema = await this.buildResultSchema(targetView, remainingDepth - 1, select);\n\n    if (isViewPropertyDefinition(property)) {\n      const nestedRelationSchema = isList ? z.array(nestedSchema) : nestedSchema;\n      return z.union([nestedRelationSchema, fallbackSchema]).optional();\n    }\n\n    return (isList ? z.array(nestedSchema) : nestedSchema).optional();\n  }\n}\n","import { z } from \"zod\";\nimport type { EdgeConnection, ReverseDirectRelationConnection, ViewDefinition } from \"../cognite\";\nimport type { UpsertOptions } from \"../types\";\nimport { isEdgeConnection, isReverseDirectRelation, isViewPropertyDefinition } from \"../utils\";\nimport { propertyValueSchema } from \"../validation\";\n\nconst strictNodeIdSchema = z\n  .object({\n    space: z.string().min(1),\n    externalId: z.string().min(1),\n  })\n  .strict();\nconst nodeIdLikeSchema = z\n  .object({\n    space: z.string().min(1),\n    externalId: z.string().min(1),\n  })\n  .loose();\n\nconst optionsSchema = z\n  .object({\n    viewExternalId: z.string().min(1),\n    items: z.array(z.record(z.string(), z.unknown())),\n    onEdgeCreation: z.record(z.string(), z.function()).optional(),\n    replace: z.boolean().optional(),\n    edgeMode: z.enum([\"append\", \"replace\"]).optional(),\n  })\n  .strict();\n\nfunction issuePath(path: PropertyKey[]): string {\n  return path.length === 0 ? \"upsert\" : path.map(String).join(\".\");\n}\n\nfunction formatZodIssues(error: z.ZodError, path: Array<string | number>): string[] {\n  return error.issues.map((issue) => `${issuePath([...path, ...issue.path])}: ${issue.message}`);\n}\n\nfunction relationValueSchema(\n  property: ReverseDirectRelationConnection | EdgeConnection,\n): z.ZodType {\n  if (isReverseDirectRelation(property) && property.targetsList === true) {\n    return z.never();\n  }\n  return z.union([nodeIdLikeSchema, z.array(nodeIdLikeSchema)]);\n}\n\nexport class UpsertValidator {\n  validate<TModel>(options: UpsertOptions<TModel>, rootView: ViewDefinition): void {\n    const errors: string[] = [];\n\n    if (rootView.usedFor === \"edge\") {\n      throw new Error(\n        `Invalid upsert options:\\n- viewExternalId: edge views are query-only; upsert is not supported for \"${rootView.externalId}\"`,\n      );\n    }\n\n    const optionsResult = optionsSchema.safeParse(options);\n    if (!optionsResult.success) {\n      errors.push(...formatZodIssues(optionsResult.error, []));\n    }\n\n    if (options.viewExternalId !== rootView.externalId) {\n      errors.push(\n        `viewExternalId: expected \"${rootView.externalId}\", received \"${options.viewExternalId}\"`,\n      );\n    }\n\n    for (const [index, item] of options.items.entries()) {\n      errors.push(\n        ...this.validateItem(item as Record<string, unknown>, rootView, [\"items\", index]),\n      );\n    }\n\n    if (errors.length > 0) {\n      throw new Error(`Invalid upsert options:\\n${errors.map((error) => `- ${error}`).join(\"\\n\")}`);\n    }\n  }\n\n  private validateItem(\n    item: Record<string, unknown>,\n    view: ViewDefinition,\n    path: Array<string | number>,\n  ): string[] {\n    const errors: string[] = [];\n\n    const identityResult = strictNodeIdSchema.safeParse({\n      space: item.space,\n      externalId: item.externalId,\n    });\n    if (!identityResult.success) {\n      errors.push(...formatZodIssues(identityResult.error, path));\n    }\n\n    for (const [name, value] of Object.entries(item)) {\n      if (name === \"space\" || name === \"externalId\") continue;\n\n      const property = view.properties[name];\n      if (!property) {\n        errors.push(`${issuePath([...path, name])}: unknown view property`);\n        continue;\n      }\n\n      if (isViewPropertyDefinition(property)) {\n        const schema =\n          property.type.type === \"direct\"\n            ? property.type.list === true\n              ? z.array(nodeIdLikeSchema)\n              : nodeIdLikeSchema\n            : propertyValueSchema(property);\n        const result = schema.safeParse(value);\n        if (!result.success) errors.push(...formatZodIssues(result.error, [...path, name]));\n        continue;\n      }\n\n      if (isReverseDirectRelation(property) || isEdgeConnection(property)) {\n        const result = relationValueSchema(property).safeParse(value);\n        if (!result.success) errors.push(...formatZodIssues(result.error, [...path, name]));\n      }\n    }\n\n    return errors;\n  }\n}\n","import type { CognitePort, FilterDefinition, ViewDefinition } from \"../cognite\";\nimport type { SearchFilter } from \"../types\";\nimport {\n  getDirectRelationSource,\n  getPropertyRef,\n  isViewPropertyDefinition,\n  toViewReference,\n} from \"../utils\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nconst LEAF_OPS = new Set([\n  \"eq\",\n  \"in\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"exists\",\n  \"prefix\",\n  \"containsAny\",\n  \"containsAll\",\n]);\n\nfunction isLeafFilter(value: Record<string, unknown>): boolean {\n  return Object.keys(value).some((k) => LEAF_OPS.has(k));\n}\n\nexport class FilterMapper {\n  constructor(\n    private readonly viewMapper: ViewMapper,\n    private readonly cognite: CognitePort,\n  ) {}\n\n  async map(input: Record<string, unknown>, rootView: ViewDefinition): Promise<FilterDefinition[]> {\n    const result: FilterDefinition[] = [];\n\n    const searchQueries: Record<string, SearchFilter> = {};\n    for (const [key, value] of Object.entries(input)) {\n      if (value == null) continue;\n\n      if (key === \"AND\") {\n        const clauses = (Array.isArray(value) ? value : [value]) as Record<string, unknown>[];\n        const inner = await Promise.all(clauses.map((c) => this.whereInputToSingle(c, rootView)));\n        result.push({ and: inner });\n      } else if (key === \"OR\") {\n        const clauses = value as Record<string, unknown>[];\n        const branches = await Promise.all(\n          clauses.map((c) => this.whereInputToSingle(c, rootView)),\n        );\n        result.push({ or: branches });\n      } else if (key === \"NOT\") {\n        const clauses = (Array.isArray(value) ? value : [value]) as Record<string, unknown>[];\n        const [firstClause, ...restClauses] = clauses;\n        const combined: Record<string, unknown> =\n          restClauses.length === 0 && firstClause !== undefined ? firstClause : { AND: clauses };\n        result.push({ not: await this.whereInputToSingle(combined, rootView) });\n      } else {\n        const filterValue = value as Record<string, unknown>;\n        const property = getPropertyRef(\n          key,\n          rootView,\n          rootView.usedFor === \"edge\" ? \"edge\" : \"node\",\n        );\n        const hasLeafFilter = isLeafFilter(filterValue);\n        if (hasLeafFilter) {\n          result.push(...this.leafToFilterDefs(property, filterValue));\n        }\n        if (\"search\" in filterValue && filterValue.search != null) {\n          searchQueries[key] = filterValue.search as SearchFilter;\n        } else if (!hasLeafFilter) {\n          const targetView = await this.getNestedTargetView(key, rootView);\n          const innerFilter = await this.whereInputToSingle(filterValue, targetView);\n          result.push({ nested: { scope: property, filter: innerFilter } });\n        }\n      }\n    }\n\n    if (Object.keys(searchQueries).length > 0) {\n      const searchFilters = await Promise.all(\n        Object.entries(searchQueries).map(([key, filterValue]) =>\n          this.searchToFilterDef(key, filterValue, rootView),\n        ),\n      );\n      result.push(...searchFilters);\n    }\n\n    return result;\n  }\n\n  private async searchToFilterDef(\n    propertyName: string,\n    search: SearchFilter,\n    rootView: ViewDefinition,\n  ): Promise<FilterDefinition> {\n    const response = await this.cognite.searchInstances({\n      view: toViewReference(rootView),\n      query: search.query,\n      instanceType: rootView.usedFor === \"edge\" ? \"edge\" : \"node\",\n      properties: [propertyName],\n      operator: search.operator ?? \"OR\",\n      limit: 1_000,\n    });\n    const instanceRefs = response.items.map((item) => ({\n      space: item.space,\n      externalId: item.externalId,\n    }));\n    return { instanceReferences: instanceRefs };\n  }\n\n  private async whereInputToSingle(\n    input: Record<string, unknown>,\n    rootView: ViewDefinition,\n  ): Promise<FilterDefinition> {\n    const filters = await this.map(input, rootView);\n    const [firstFilter, ...restFilters] = filters;\n    if (restFilters.length === 0 && firstFilter !== undefined) {\n      return firstFilter;\n    }\n    return { and: filters };\n  }\n\n  private leafToFilterDefs(\n    property: string[],\n    filter: Record<string, unknown>,\n  ): FilterDefinition[] {\n    const result: FilterDefinition[] = [];\n\n    if (\"eq\" in filter && filter.eq !== undefined) {\n      result.push({\n        equals: { property, value: this.coerceValue(filter.eq) as string | number | boolean },\n      });\n    }\n    if (\"in\" in filter && filter.in !== undefined) {\n      result.push({\n        in: { property, values: this.coerceValue(filter.in) as (string | number | boolean)[] },\n      });\n    }\n    if (\"gt\" in filter && filter.gt !== undefined) {\n      result.push({ range: { property, gt: this.coerceValue(filter.gt) as number | string } });\n    }\n    if (\"gte\" in filter && filter.gte !== undefined) {\n      result.push({ range: { property, gte: this.coerceValue(filter.gte) as number | string } });\n    }\n    if (\"lt\" in filter && filter.lt !== undefined) {\n      result.push({ range: { property, lt: this.coerceValue(filter.lt) as number | string } });\n    }\n    if (\"lte\" in filter && filter.lte !== undefined) {\n      result.push({ range: { property, lte: this.coerceValue(filter.lte) as number | string } });\n    }\n    if (\"exists\" in filter) {\n      if (filter.exists === true) {\n        result.push({ exists: { property } });\n      } else if (filter.exists === false) {\n        result.push({ not: { exists: { property } } });\n      }\n    }\n    if (\"prefix\" in filter && filter.prefix !== undefined) {\n      result.push({ prefix: { property, value: this.coerceValue(filter.prefix) as string } });\n    }\n    if (\"containsAll\" in filter && filter.containsAll !== undefined) {\n      result.push({\n        containsAll: {\n          property,\n          values: this.coerceValue(filter.containsAll) as (string | number | boolean)[],\n        },\n      });\n    }\n    if (\"containsAny\" in filter && filter.containsAny !== undefined) {\n      result.push({\n        containsAny: {\n          property,\n          values: this.coerceValue(filter.containsAny) as (string | number | boolean)[],\n        },\n      });\n    }\n\n    return result;\n  }\n\n  private async getNestedTargetView(\n    property: string,\n    rootView: ViewDefinition,\n  ): Promise<ViewDefinition> {\n    const viewProp = rootView.properties[property];\n    if (!viewProp || !isViewPropertyDefinition(viewProp)) {\n      throw new Error(`Property \"${property}\" is not a mapped property`);\n    }\n    const source = getDirectRelationSource(viewProp);\n    if (!source) throw new Error(`Property \"${property}\" has no relation source`);\n    return this.viewMapper.getView(source.externalId);\n  }\n\n  private coerceValue(value: unknown): unknown {\n    if (value instanceof Date) return value.toISOString();\n    if (Array.isArray(value)) return value.map((v) => this.coerceValue(v));\n    return value;\n  }\n}\n","import type {\n  CognitePort,\n  FilterDefinition,\n  InstancesAggregateDefinition,\n  InstancesAggregateRequest,\n} from \"../cognite\";\nimport { AGGREGATE_LIMIT } from \"../constants\";\nimport type { AggregateDefinition, AggregateOptions } from \"../types\";\nimport { getSelectedGroupByKeys, resolveAggregateDefinitions, toViewReference } from \"../utils\";\nimport { AggregateValidator } from \"../validators\";\nimport { FilterMapper } from \"./filter-mapper\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nexport class AggregateMapper {\n  private readonly filterMapper: FilterMapper;\n  private readonly validator: AggregateValidator;\n\n  constructor(\n    private readonly viewMapper: ViewMapper,\n    cognite: CognitePort,\n  ) {\n    this.filterMapper = new FilterMapper(viewMapper, cognite);\n    this.validator = new AggregateValidator(viewMapper);\n  }\n\n  async map<TModel>(options: AggregateOptions<TModel>): Promise<InstancesAggregateRequest> {\n    const { viewExternalId, filters, groupBy } = options;\n    const rootView = await this.viewMapper.getView(viewExternalId);\n    await this.validator.validate(options, rootView);\n\n    const filterParts = filters\n      ? await this.filterMapper.map(filters as Record<string, unknown>, rootView)\n      : [];\n    const filter =\n      filterParts.length === 0\n        ? undefined\n        : filterParts.length === 1\n          ? filterParts[0]\n          : ({ and: filterParts } satisfies FilterDefinition);\n\n    const aggregateDefs = resolveAggregateDefinitions(options);\n\n    return {\n      view: toViewReference(rootView),\n      instanceType: \"node\",\n      limit: AGGREGATE_LIMIT,\n      ...(filter !== undefined ? { filter } : {}),\n      ...(groupBy ? { groupBy: getSelectedGroupByKeys(groupBy) } : {}),\n      ...(aggregateDefs.length > 0\n        ? { aggregates: aggregateDefs.map(mapAggregateDefinition) }\n        : {}),\n    };\n  }\n}\n\nfunction mapAggregateDefinition<TModel>(\n  aggregate: AggregateDefinition<TModel>,\n): InstancesAggregateDefinition {\n  if (\"count\" in aggregate) {\n    const property = aggregate.count;\n    if (\n      property != null &&\n      typeof property === \"object\" &&\n      !Array.isArray(property) &&\n      Object.keys(property).length === 0\n    ) {\n      return { count: {} };\n    }\n    if (typeof property === \"string\") {\n      return { count: { property } };\n    }\n    return { count: {} };\n  }\n\n  if (\"avg\" in aggregate) {\n    return { avg: { property: aggregate.avg as string } };\n  }\n  if (\"min\" in aggregate) {\n    return { min: { property: aggregate.min as string } };\n  }\n  if (\"max\" in aggregate) {\n    return { max: { property: aggregate.max as string } };\n  }\n  if (\"sum\" in aggregate) {\n    return { sum: { property: aggregate.sum as string } };\n  }\n\n  throw new Error(\"Invalid aggregate definition\");\n}\n","import type { InstancesAggregateResponse, InstancesAggregateValue } from \"../cognite\";\nimport type { AggregateDefinition, AggregateOptions, NodeId } from \"../types\";\nimport { getAggregateOpName, getSelectedGroupByKeys, resolveAggregateDefinitions } from \"../utils\";\n\nfunction isNodeId(value: unknown): value is NodeId {\n  return (\n    value != null &&\n    typeof value === \"object\" &&\n    \"space\" in value &&\n    \"externalId\" in value &&\n    typeof (value as NodeId).space === \"string\" &&\n    typeof (value as NodeId).externalId === \"string\"\n  );\n}\n\nfunction mapAggregateValue<TModel>(\n  aggregateValue: InstancesAggregateValue | undefined,\n  requested: AggregateDefinition<TModel>,\n): { aggregate: string; property?: string; value: number } | undefined {\n  if (aggregateValue?.value === undefined) return undefined;\n  const aggregate = aggregateValue.aggregate ?? getAggregateOpName(requested);\n  return aggregateValue.property != null\n    ? { aggregate, property: aggregateValue.property, value: aggregateValue.value }\n    : { aggregate, value: aggregateValue.value };\n}\n\nexport class AggregateResultMapper {\n  map<TModel>(\n    response: InstancesAggregateResponse,\n    options: Pick<AggregateOptions<TModel>, \"groupBy\" | \"aggregate\" | \"aggregates\">,\n  ): Array<{\n    group?: Record<string, unknown>;\n    aggregates?: Array<{ aggregate: string; property?: string; value: number } | undefined>;\n    aggregate?: { aggregate: string; property?: string; value: number };\n  }> {\n    const groupByKeys = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\n    const requestedOps = resolveAggregateDefinitions(options);\n\n    return response.items.map((item) => {\n      let group: Record<string, unknown> | undefined;\n      if (item.group != null && groupByKeys.length > 0) {\n        group = {};\n        for (const key of groupByKeys) {\n          const value = item.group[key];\n          if (value === undefined) continue;\n          group[key] = isNodeId(value)\n            ? { space: value.space, externalId: value.externalId }\n            : value;\n        }\n        if (Object.keys(group).length === 0) {\n          group = undefined;\n        }\n      }\n\n      const aggregates =\n        requestedOps.length > 0\n          ? requestedOps.map((def, index) => mapAggregateValue(item.aggregates[index], def))\n          : undefined;\n      const aggregate = aggregates?.[0];\n\n      return {\n        ...(group !== undefined ? { group } : {}),\n        ...(aggregates !== undefined ? { aggregates } : {}),\n        ...(aggregate !== undefined ? { aggregate } : {}),\n      };\n    });\n  }\n}\n","import type {\n  CogniteAggregateDatapoint,\n  CogniteDatapointDeleteItem,\n  CogniteDatapointInsertItem,\n  CogniteDatapointLatestItem,\n  CogniteDatapointResultItem,\n  CogniteDatapointRetrieveItem,\n  CogniteDatapointRetrieveOptions,\n  CognitePort,\n} from \"../cognite\";\nimport type {\n  DatapointAggregate,\n  DatapointSeriesResult,\n  DatapointsDeleteRange,\n  DatapointsInsertItem,\n  DatapointsLatestOptions,\n  DatapointsResult,\n  DatapointsRetrieveOptions,\n  NodeId,\n  RawDatapoint,\n} from \"../types\";\nimport { chunks } from \"../utils/array\";\nimport { DatapointsValidator } from \"../validators\";\n\n// Cognite's datapoints retrieve endpoint accepts at most 100 items per request.\nconst MAX_TIME_SERIES_PER_REQUEST = 100;\n// Cognite caps datapoints returned across all series in a single request at 10_000.\nconst MAX_DATAPOINTS_PER_REQUEST = 10_000;\n\nexport class DatapointsMapper {\n  private readonly validator = new DatapointsValidator();\n\n  constructor(private readonly cognite: CognitePort) {}\n\n  async retrieve(options: DatapointsRetrieveOptions): Promise<DatapointsResult> {\n    this.validator.validateRetrieve(options);\n    const allPages = options.limit === -1;\n    const cogniteOptions = this.toCogniteOptions(options);\n    const itemChunks = chunks(cogniteOptions.items, MAX_TIME_SERIES_PER_REQUEST);\n\n    const chunkResults = await Promise.all(\n      itemChunks.map((items) => this.retrieveChunk(cogniteOptions, items, allPages)),\n    );\n\n    return this.mapResult(chunkResults.flat(), cogniteOptions.items, options.aggregate);\n  }\n\n  async retrieveLatest(options: DatapointsLatestOptions): Promise<DatapointsResult> {\n    const items: CogniteDatapointLatestItem[] = options.timeSeries.map(\n      ({ space, externalId, before }) => ({\n        space,\n        externalId,\n        ...(before !== undefined ? { before } : {}),\n      }),\n    );\n    const latestOptions =\n      options.ignoreUnknownIds !== undefined\n        ? { ignoreUnknownIds: options.ignoreUnknownIds }\n        : undefined;\n    const result = await this.cognite.retrieveLatestDatapoints(items, latestOptions);\n    return this.mapResult(result.items, items);\n  }\n\n  async insert(items: DatapointsInsertItem[]): Promise<void> {\n    const cogniteItems = items.map<CogniteDatapointInsertItem>(({ timeSeries, datapoints }) => ({\n      space: timeSeries.space,\n      externalId: timeSeries.externalId,\n      datapoints,\n    }));\n\n    for (const chunk of chunks(cogniteItems, MAX_TIME_SERIES_PER_REQUEST)) {\n      await this.cognite.insertDatapoints(chunk);\n    }\n  }\n\n  async delete(ranges: DatapointsDeleteRange[]): Promise<void> {\n    this.validator.validateDelete(ranges);\n    const cogniteItems = ranges.map<CogniteDatapointDeleteItem>(({ timeSeries, start, end }) => ({\n      space: timeSeries.space,\n      externalId: timeSeries.externalId,\n      inclusiveBegin: start,\n      ...(end !== undefined ? { exclusiveEnd: end } : {}),\n    }));\n\n    for (const chunk of chunks(cogniteItems, MAX_TIME_SERIES_PER_REQUEST)) {\n      await this.cognite.deleteDatapoints(chunk);\n    }\n  }\n\n  private async retrieveChunk(\n    cogniteOptions: CogniteDatapointRetrieveOptions,\n    items: CogniteDatapointRetrieveItem[],\n    allPages: boolean,\n  ): Promise<CogniteDatapointResultItem[]> {\n    if (!allPages) {\n      const result = await this.cognite.retrieveDatapoints({\n        ...cogniteOptions,\n        items,\n      });\n      return result.items;\n    }\n    return this.retrieveAllPages(cogniteOptions, items);\n  }\n\n  /**\n   * Auto-paginate: keep fetching until no series returns a nextCursor.\n   * Track accumulated datapoints keyed by \"space:externalId\".\n   */\n  private async retrieveAllPages(\n    cogniteOptions: CogniteDatapointRetrieveOptions,\n    items: CogniteDatapointRetrieveItem[],\n  ): Promise<CogniteDatapointResultItem[]> {\n    const accumulated = new Map<string, CogniteDatapointResultItem>();\n    const itemByKey = new Map(items.map((item) => [this.toKey(item), item]));\n    let currentItems = items;\n\n    while (currentItems.length > 0) {\n      const result = await this.cognite.retrieveDatapoints({\n        ...cogniteOptions,\n        items: currentItems,\n      });\n      const nextItems: CogniteDatapointRetrieveItem[] = [];\n\n      for (const resultItem of result.items) {\n        const key = this.toKey(resultItem);\n\n        let acc = accumulated.get(key);\n        if (!acc) {\n          acc = { ...resultItem, datapoints: [] };\n          accumulated.set(key, acc);\n        }\n\n        acc.datapoints.push(...resultItem.datapoints);\n        if (resultItem.nextCursor) {\n          acc.nextCursor = resultItem.nextCursor;\n        } else {\n          delete acc.nextCursor;\n        }\n\n        if (resultItem.nextCursor) {\n          const original = itemByKey.get(key);\n          nextItems.push({\n            ...original,\n            space: resultItem.space ?? original?.space ?? \"\",\n            externalId: resultItem.externalId ?? original?.externalId ?? \"\",\n            cursor: resultItem.nextCursor,\n          });\n        }\n      }\n\n      currentItems = nextItems;\n    }\n\n    // Preserve request order within the chunk.\n    return items\n      .map((item) => accumulated.get(this.toKey(item)))\n      .filter((item): item is CogniteDatapointResultItem => item !== undefined);\n  }\n\n  private toKey(item: { space?: string; externalId?: string }): string {\n    return `${item.space ?? \"\"}:${item.externalId ?? \"\"}`;\n  }\n\n  private toCogniteOptions(options: DatapointsRetrieveOptions): CogniteDatapointRetrieveOptions {\n    const { timeSeries, aggregate, limit, ...rest } = options;\n    const effectiveLimit =\n      limit === -1 ? MAX_DATAPOINTS_PER_REQUEST : limit === undefined ? undefined : limit;\n\n    return {\n      ...rest,\n      ...(effectiveLimit !== undefined ? { limit: effectiveLimit } : {}),\n      ...(aggregate !== undefined ? { aggregates: [aggregate] } : {}),\n      items: timeSeries.map(({ space, externalId }) => ({ space, externalId })),\n    };\n  }\n\n  private mapResult(\n    items: CogniteDatapointResultItem[],\n    requestedItems: NodeId[],\n    aggregate?: DatapointAggregate,\n  ): DatapointsResult {\n    const requestedByKey = new Map(requestedItems.map((item) => [this.toKey(item), item]));\n    const mappedItems = items\n      .filter((item) => !item.isString)\n      .map<DatapointSeriesResult>((item) => {\n        const requested = requestedByKey.get(this.toKey(item));\n\n        const datapoints: RawDatapoint[] =\n          aggregate !== undefined\n            ? item.datapoints.map((dp) => ({\n                timestamp: dp.timestamp,\n                value: (dp as CogniteAggregateDatapoint)[aggregate] ?? 0,\n              }))\n            : (item.datapoints as unknown as RawDatapoint[]);\n\n        return {\n          timeSeries: {\n            space: item.space ?? requested?.space ?? \"\",\n            externalId: item.externalId ?? requested?.externalId ?? \"\",\n          },\n          ...(item.unit !== undefined ? { unit: item.unit } : {}),\n          datapoints,\n          cursor: item.nextCursor ?? null,\n        };\n      });\n\n    return { items: mappedItems };\n  }\n}\n","import type { CogniteFileDownloadUrl, CogniteFileUploadResult, CognitePort } from \"../cognite\";\nimport type { FileDownloadUrl, FileUploadInfo, FileUploadResult, NodeId } from \"../types\";\n\nexport class FilesMapper {\n  constructor(private readonly cognite: CognitePort) {}\n\n  async upload(fileInfo: FileUploadInfo, content?: unknown): Promise<FileUploadResult> {\n    const { space, externalId, ...rest } = fileInfo;\n    const result = await this.cognite.uploadFile(\n      { instanceId: { space, externalId }, ...rest },\n      content,\n    );\n    return this.mapUploadResult(result, { space, externalId });\n  }\n\n  async getDownloadUrls(nodeIds: NodeId[]): Promise<FileDownloadUrl[]> {\n    if (nodeIds.length === 0) return [];\n    const ids = nodeIds.map(({ space, externalId }) => ({ instanceId: { space, externalId } }));\n    const result = await this.cognite.getFileDownloadUrls(ids);\n    return result.map((item, i) =>\n      this.mapDownloadUrl(item, nodeIds[i] ?? { space: \"\", externalId: \"\" }),\n    );\n  }\n\n  private toNodeId(\n    item: Pick<CogniteFileUploadResult | CogniteFileDownloadUrl, \"instanceId\">,\n    fallback: NodeId,\n  ): NodeId {\n    return {\n      space: item.instanceId?.space ?? fallback.space,\n      externalId: item.instanceId?.externalId ?? fallback.externalId,\n    };\n  }\n\n  private mapUploadResult(item: CogniteFileUploadResult, fallback: NodeId): FileUploadResult {\n    const nodeId = this.toNodeId(item, fallback);\n    return {\n      ...nodeId,\n      name: item.name,\n      uploaded: item.uploaded,\n      createdTime: item.createdTime,\n      lastUpdatedTime: item.lastUpdatedTime,\n      ...(item.uploadedTime !== undefined ? { uploadedTime: item.uploadedTime } : {}),\n      ...(item.mimeType !== undefined ? { mimeType: item.mimeType } : {}),\n      ...(item.directory !== undefined ? { directory: item.directory } : {}),\n      ...(item.source !== undefined ? { source: item.source } : {}),\n      ...(item.uploadUrl !== undefined ? { uploadUrl: item.uploadUrl } : {}),\n    };\n  }\n\n  private mapDownloadUrl(item: CogniteFileDownloadUrl, fallback: NodeId): FileDownloadUrl {\n    return {\n      ...this.toNodeId(item, fallback),\n      downloadUrl: item.downloadUrl,\n    };\n  }\n}\n","import type { PropertySort, ViewDefinition } from \"../cognite\";\nimport type { SortDirection } from \"../types\";\nimport { getPropertyRef } from \"../utils\";\n\nexport class SortMapper {\n  map(\n    sort: Record<string, SortDirection>,\n    rootView: ViewDefinition,\n    instanceType: \"node\" | \"edge\" = \"node\",\n  ): PropertySort[] {\n    return Object.entries(sort).map(([property, direction]) => ({\n      property: getPropertyRef(property, rootView, instanceType),\n      direction,\n      nullsFirst: direction === \"descending\",\n    }));\n  }\n}\n","import type {\n  CognitePort,\n  FilterDefinition,\n  InstancesQueryRequest,\n  QueryNodeTableExpression,\n  QuerySelectExpression,\n  QueryTableExpression,\n  TableExpressionFilter,\n  ViewDefinition,\n  ViewReference,\n} from \"../cognite\";\nimport { DEFAULT_LIMIT, EDGE_MARKER, MAX_LIMIT, NESTED_SEP } from \"../constants\";\nimport type { QueryOptions, QuerySelect } from \"../types\";\nimport {\n  buildSelect,\n  getDirectRelationSource,\n  isEdgeConnection,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n  toViewReference,\n} from \"../utils\";\nimport { QueryValidator } from \"../validators\";\nimport { FilterMapper } from \"./filter-mapper\";\nimport { SortMapper } from \"./sort-mapper\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nexport class QueryMapper {\n  private readonly filterMapper: FilterMapper;\n  private readonly sortMapper: SortMapper;\n  private readonly validator: QueryValidator;\n\n  constructor(\n    private readonly viewMapper: ViewMapper,\n    cognite: CognitePort,\n  ) {\n    this.filterMapper = new FilterMapper(viewMapper, cognite);\n    this.sortMapper = new SortMapper();\n    this.validator = new QueryValidator(viewMapper);\n  }\n\n  async map<TModel>(options: QueryOptions<TModel>): Promise<InstancesQueryRequest> {\n    const {\n      viewExternalId,\n      select = { _all: true },\n      filters,\n      sort = {},\n      limit: requestedLimit = DEFAULT_LIMIT,\n      cursor = null,\n    } = options;\n    const limit = requestedLimit === -1 ? MAX_LIMIT : requestedLimit;\n\n    const rootView = await this.viewMapper.getView(viewExternalId);\n    await this.validator.validate(options, rootView);\n    const rootViewRef = toViewReference(rootView);\n\n    const whereFilters = filters\n      ? await this.filterMapper.map(filters as Record<string, unknown>, rootView)\n      : [];\n\n    const baseFilters: FilterDefinition[] = [{ hasData: [rootViewRef] }, ...whereFilters];\n\n    const withExprs: Record<string, QueryTableExpression> = {\n      [viewExternalId]:\n        rootView.usedFor === \"edge\"\n          ? {\n              edges: {\n                filter: { and: baseFilters } as TableExpressionFilter,\n              },\n              sort: this.sortMapper.map(sort, rootView, \"edge\"),\n              limit,\n            }\n          : {\n              nodes: {\n                filter: { and: baseFilters } as TableExpressionFilter,\n              },\n              sort: this.sortMapper.map(sort, rootView),\n              limit,\n            },\n    };\n    const selectExprs: Record<string, QuerySelectExpression | Record<string, never>> = {};\n\n    const properties = await this.includeStatements(\n      viewExternalId,\n      rootView,\n      select,\n      withExprs,\n      selectExprs,\n    );\n\n    selectExprs[viewExternalId] = buildSelect(rootViewRef, properties);\n\n    const cursors: Record<string, string> = {};\n    if (cursor != null) cursors[viewExternalId] = cursor;\n\n    return { with: withExprs, select: selectExprs, cursors };\n  }\n\n  private async includeStatements<TModel>(\n    key: string,\n    view: ViewDefinition,\n    select: QuerySelect<TModel>,\n    withExprs: Record<string, QueryTableExpression>,\n    selectExprs: Record<string, QuerySelectExpression | Record<string, never>>,\n  ): Promise<string[]> {\n    const selectProperties: string[] = [];\n    const selectRecord = select as Record<string, boolean | object | undefined>;\n    for (const [propertyName, property] of Object.entries(view.properties)) {\n      const propertyKey = `${key}${NESTED_SEP}${propertyName}`;\n\n      const canIncludeProperty = select._all === true || propertyName in select;\n      if (!canIncludeProperty) {\n        continue;\n      }\n\n      const relationToInclude =\n        propertyName in select &&\n        selectRecord[propertyName] != null &&\n        typeof selectRecord[propertyName] === \"object\"\n          ? selectRecord[propertyName]\n          : null;\n      if (isViewPropertyDefinition(property)) {\n        const relSource = getDirectRelationSource(property);\n        if (!relSource) {\n          selectProperties.push(propertyName);\n        } else {\n          selectProperties.push(propertyName);\n          const nestedView = await this.viewMapper.getView(relSource.externalId);\n          const props =\n            relationToInclude != null\n              ? await this.includeStatements(\n                  propertyKey,\n                  nestedView,\n                  relationToInclude,\n                  withExprs,\n                  selectExprs,\n                )\n              : [];\n          if (props.length > 0) {\n            (withExprs[propertyKey] as QueryNodeTableExpression) = {\n              nodes: {\n                from: key,\n                direction: \"outwards\",\n                through: { view: toViewReference(view), identifier: propertyName },\n              },\n              limit: MAX_LIMIT,\n            };\n            selectExprs[propertyKey] = buildSelect(relSource, props);\n          }\n        }\n      } else if (isReverseDirectRelation(property) && relationToInclude != null) {\n        const nestedView = await this.viewMapper.getView(property.source.externalId);\n        const props = await this.includeStatements(\n          propertyKey,\n          nestedView,\n          relationToInclude,\n          withExprs,\n          selectExprs,\n        );\n        if (!props.includes(property.through.identifier)) {\n          props.push(property.through.identifier);\n        }\n        (withExprs[propertyKey] as QueryNodeTableExpression) = {\n          nodes: {\n            from: key,\n            direction: \"inwards\",\n            through: {\n              source: property.through.source as ViewReference,\n              identifier: property.through.identifier,\n            },\n          },\n          limit: MAX_LIMIT,\n        };\n        selectExprs[propertyKey] = buildSelect(property.source, props);\n      } else if (isEdgeConnection(property) && relationToInclude != null) {\n        const edgePropertyKey = `${propertyKey}${NESTED_SEP}${EDGE_MARKER}`;\n\n        withExprs[edgePropertyKey] = {\n          edges: {\n            from: key,\n            maxDistance: 1,\n            filter: {\n              equals: { property: [\"edge\", \"type\"], value: property.type },\n            } as TableExpressionFilter,\n            direction: property.direction ?? \"outwards\",\n          },\n          limit: MAX_LIMIT,\n        };\n        (withExprs[propertyKey] as QueryNodeTableExpression) = {\n          nodes: { from: edgePropertyKey },\n          limit: MAX_LIMIT,\n        };\n        selectExprs[edgePropertyKey] = {};\n\n        const nestedView = await this.viewMapper.getView(property.source.externalId);\n        const props = await this.includeStatements(\n          propertyKey,\n          nestedView,\n          relationToInclude,\n          withExprs,\n          selectExprs,\n        );\n        selectExprs[propertyKey] = buildSelect(property.source, props);\n      }\n    }\n\n    return selectProperties;\n  }\n}\n","import type {\n  EdgeDefinition,\n  NodeDefinition,\n  ReverseDirectRelationConnection,\n  ViewDefinition,\n} from \"../cognite\";\nimport { EDGE_MARKER, NESTED_SEP } from \"../constants\";\nimport type { QueryResultMap } from \"../types\";\nimport {\n  getDirectRelationSource,\n  isEdgeConnection,\n  isListDirectRelation,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n} from \"../utils\";\nimport type { ViewMapper } from \"./view-mapper\";\n\ntype ConnectionType = \"DirectRelation\" | \"ReverseDirectRelation\" | \"Edge\";\n\ninterface PropertyMapping {\n  isList: boolean;\n  connectionType: ConnectionType;\n  nodes: Map<string, NodeDefinition[]>;\n  edges: Map<string, EdgeDefinition[]>;\n}\n\nfunction nodeInstanceId(node: NodeDefinition): string {\n  return `${node.space}:${node.externalId}`;\n}\n\nfunction getElementKeys(node: NodeDefinition, element: unknown): string[] {\n  if (element && typeof element === \"object\" && !Array.isArray(element)) {\n    const ref = element as Record<string, string>;\n    return [`${ref.space ?? \"\"}:${ref.externalId ?? \"\"}`];\n  }\n  if (Array.isArray(element)) {\n    return element\n      .filter((item) => item && typeof item === \"object\")\n      .map((item) => {\n        const ref = item as Record<string, string>;\n        return `${ref.space ?? \"\"}:${ref.externalId ?? \"\"}`;\n      });\n  }\n  return [nodeInstanceId(node)];\n}\n\nfunction coerceToDate(value: unknown): unknown {\n  if (value instanceof Date) return value;\n  if (typeof value === \"string\" || typeof value === \"number\") {\n    const date = new Date(value);\n    return Number.isNaN(date.getTime()) ? value : date;\n  }\n  return value;\n}\n\nfunction coerceTemporalProperties(view: ViewDefinition, properties: Record<string, unknown>): void {\n  for (const [name, property] of Object.entries(view.properties)) {\n    if (!isViewPropertyDefinition(property)) continue;\n    const type = property.type.type;\n    if (type !== \"timestamp\" && type !== \"date\") continue;\n\n    const value = properties[name];\n    if (value === undefined || value === null) continue;\n\n    if (property.type.list === true) {\n      if (Array.isArray(value)) {\n        properties[name] = value.map(coerceToDate);\n      }\n      continue;\n    }\n\n    properties[name] = coerceToDate(value);\n  }\n}\n\nexport class QueryResultMapper {\n  constructor(private readonly viewMapper: ViewMapper) {}\n\n  async mapNodes(\n    rootNode: string,\n    queryResult: QueryResultMap,\n  ): Promise<Record<string, unknown>[]> {\n    if (!(rootNode in queryResult)) {\n      throw new Error(`\"${rootNode}\" is not available in the query result`);\n    }\n\n    const rootView = await this.viewMapper.getView(rootNode);\n    if (rootView.usedFor === \"edge\") {\n      return this.mapRootEdges(rootNode, rootView, queryResult);\n    }\n    const values = await this.mapNodeProperty(rootNode, rootView, queryResult);\n    if (!values) return [];\n\n    return [...values.values()].flatMap((nodes) => nodes.map((n) => this.nodeToDict(n)));\n  }\n\n  private mapRootEdges(\n    key: string,\n    view: ViewDefinition,\n    queryResult: QueryResultMap,\n  ): Record<string, unknown>[] {\n    const viewKey = `${view.externalId}/${view.version}`;\n    const visited = new Set<string>();\n    const result: Record<string, unknown>[] = [];\n\n    for (const item of queryResult[key] ?? []) {\n      if (item.instanceType !== \"edge\") continue;\n      const edge = item as EdgeDefinition;\n      const id = `${edge.space}:${edge.externalId}`;\n      if (visited.has(id)) continue;\n      visited.add(id);\n\n      const properties = {\n        ...(edge.properties?.[view.space]?.[viewKey] ?? {}),\n      };\n      coerceTemporalProperties(view, properties);\n      result.push(\n        this.edgeToDict({ ...edge, properties: { [view.space]: { [viewKey]: properties } } }),\n      );\n    }\n\n    return result;\n  }\n\n  private async mapNodeProperty(\n    key: string,\n    view: ViewDefinition,\n    queryResult: QueryResultMap,\n    resultPropertyKey?: string,\n  ): Promise<Map<string, NodeDefinition[]> | null> {\n    if (!(key in queryResult)) return null;\n\n    const mappings = await this.getPropertyMappings(key, view, queryResult);\n    const viewKey = `${view.externalId}/${view.version}`;\n\n    const visited = new Set<string>();\n    const result = new Map<string, NodeDefinition[]>();\n\n    for (const item of queryResult[key] ?? []) {\n      if (item.instanceType !== \"node\") continue;\n      const node = item as NodeDefinition;\n\n      const id = nodeInstanceId(node);\n      if (visited.has(id)) continue;\n      visited.add(id);\n\n      const spaceProps = node.properties?.[view.space];\n      if (!spaceProps || !(viewKey in spaceProps)) continue;\n\n      const properties: Record<string, unknown> = { ...(spaceProps[viewKey] ?? {}) };\n      coerceTemporalProperties(view, properties);\n\n      const getResultId = (): string => {\n        if (!resultPropertyKey) return id;\n        const entry = properties[resultPropertyKey];\n        if (!entry || typeof entry !== \"object\") {\n          throw new Error(`Invalid result property key \"${resultPropertyKey}\"`);\n        }\n        const ref = entry as Record<string, string>;\n        return `${ref.space ?? \"\"}:${ref.externalId ?? \"\"}`;\n      };\n\n      const edgesMapping: Record<string, EdgeDefinition[]> = {};\n      const resultId = getResultId();\n\n      for (const [mappingKey, mapping] of Object.entries(mappings)) {\n        const element = properties[mappingKey];\n        const { isList, connectionType, nodes: mappingNodes, edges: mappingEdges } = mapping;\n\n        if (element === undefined && connectionType === \"DirectRelation\") continue;\n\n        const elementKeys = getElementKeys(node, element);\n        const nodeEntries = elementKeys.flatMap((k) => mappingNodes.get(k) ?? []);\n\n        if (nodeEntries.length === 0) {\n          delete properties[mappingKey];\n          continue;\n        }\n\n        const entryData = nodeEntries.map((n) => this.nodeToDict(n));\n        properties[mappingKey] = isList ? entryData : entryData[0];\n\n        const edgeEntries = elementKeys.flatMap((k) => mappingEdges.get(k) ?? []);\n        if (edgeEntries.length > 0) edgesMapping[mappingKey] = edgeEntries;\n      }\n\n      properties._edges = edgesMapping;\n\n      if (node.properties?.[view.space]) {\n        node.properties[view.space] = {\n          ...node.properties[view.space],\n          [viewKey]: properties,\n        };\n      }\n\n      const existing = result.get(resultId);\n      if (existing) {\n        existing.push(node);\n      } else {\n        result.set(resultId, [node]);\n      }\n    }\n\n    return result;\n  }\n\n  private async getPropertyMappings(\n    key: string,\n    view: ViewDefinition,\n    queryResult: QueryResultMap,\n  ): Promise<Record<string, PropertyMapping>> {\n    const mappings: Record<string, PropertyMapping> = {};\n\n    for (const [propertyName, property] of Object.entries(view.properties)) {\n      const propertyKey = `${key}${NESTED_SEP}${propertyName}`;\n\n      let nodes: Map<string, NodeDefinition[]> | null = null;\n      let edges: Map<string, EdgeDefinition[]> = new Map();\n      let isList = false;\n      let connectionType: ConnectionType = \"DirectRelation\";\n\n      if (isViewPropertyDefinition(property)) {\n        const source = getDirectRelationSource(property);\n        if (source) {\n          const nestedView = await this.viewMapper.getView(source.externalId);\n          nodes = await this.mapNodeProperty(propertyKey, nestedView, queryResult);\n          isList = isListDirectRelation(property);\n          connectionType = \"DirectRelation\";\n        }\n      } else if (isReverseDirectRelation(property)) {\n        const rel = property as ReverseDirectRelationConnection;\n        const nestedView = await this.viewMapper.getView(rel.source.externalId);\n        nodes = await this.mapNodeProperty(\n          propertyKey,\n          nestedView,\n          queryResult,\n          rel.through.identifier,\n        );\n        isList = rel.connectionType === \"multi_reverse_direct_relation\" || rel.targetsList === true;\n        connectionType = \"ReverseDirectRelation\";\n      } else if (isEdgeConnection(property)) {\n        const nestedView = await this.viewMapper.getView(property.source.externalId);\n        const [edgeNodes, edgeEdges] = await this.mapEdgeProperty(\n          propertyKey,\n          nestedView,\n          queryResult,\n          property.direction ?? \"outwards\",\n        );\n        nodes = edgeNodes;\n        edges = edgeEdges ?? new Map();\n        isList = true;\n        connectionType = \"Edge\";\n      }\n\n      if (nodes !== null) {\n        mappings[propertyName] = { isList, connectionType, nodes, edges };\n      }\n    }\n\n    return mappings;\n  }\n\n  private async mapEdgeProperty(\n    key: string,\n    view: ViewDefinition,\n    queryResult: QueryResultMap,\n    edgeDirection: \"outwards\" | \"inwards\",\n  ): Promise<[Map<string, NodeDefinition[]> | null, Map<string, EdgeDefinition[]> | null]> {\n    const edgeKey = `${key}${NESTED_SEP}${EDGE_MARKER}`;\n    if (!(key in queryResult) || !(edgeKey in queryResult)) return [null, null];\n\n    const nodes = await this.mapNodeProperty(key, view, queryResult);\n    if (!nodes) return [null, null];\n\n    const visitedEdges = new Set<string>();\n    const nodesResult = new Map<string, NodeDefinition[]>();\n    const edgesResult = new Map<string, EdgeDefinition[]>();\n\n    for (const item of queryResult[edgeKey] ?? []) {\n      if (item.instanceType !== \"edge\") continue;\n      const edge = item as EdgeDefinition;\n\n      const edgeId = `${edge.space}:${edge.externalId}`;\n      if (visitedEdges.has(edgeId)) continue;\n      visitedEdges.add(edgeId);\n\n      const entryKey =\n        edgeDirection === \"inwards\"\n          ? `${edge.endNode.space}:${edge.endNode.externalId}`\n          : `${edge.startNode.space}:${edge.startNode.externalId}`;\n      const nodeKey =\n        edgeDirection === \"inwards\"\n          ? `${edge.startNode.space}:${edge.startNode.externalId}`\n          : `${edge.endNode.space}:${edge.endNode.externalId}`;\n\n      const existingEdges = edgesResult.get(entryKey);\n      if (existingEdges) existingEdges.push(edge);\n      else edgesResult.set(entryKey, [edge]);\n\n      const relatedNodes = nodes.get(nodeKey);\n      if (relatedNodes) {\n        const existingNodes = nodesResult.get(entryKey);\n        if (existingNodes) existingNodes.push(...relatedNodes);\n        else nodesResult.set(entryKey, relatedNodes.slice());\n      }\n    }\n\n    return [nodesResult, edgesResult];\n  }\n\n  private nodeToDict(node: NodeDefinition): Record<string, unknown> {\n    const { properties, ...rest } = node;\n    const entry: Record<string, unknown> = { ...rest };\n\n    for (const spaceProp of Object.values(properties ?? {})) {\n      for (const viewProp of Object.values(spaceProp)) {\n        Object.assign(entry, viewProp);\n      }\n    }\n\n    return entry;\n  }\n\n  private edgeToDict(edge: EdgeDefinition): Record<string, unknown> {\n    const { properties, ...rest } = edge;\n    const entry: Record<string, unknown> = { ...rest };\n\n    for (const spaceProp of Object.values(properties ?? {})) {\n      for (const viewProp of Object.values(spaceProp)) {\n        Object.assign(entry, viewProp);\n      }\n    }\n\n    return entry;\n  }\n}\n","import type {\n  CognitePort,\n  EdgeConnection,\n  EdgeDefinition,\n  InstancesApplyDelete,\n  InstancesApplyEdgeWrite,\n  InstancesApplyNodeWrite,\n  InstancesApplyRequest,\n  InstancesQueryRequest,\n  ReverseDirectRelationConnection,\n  ViewDefinition,\n} from \"../cognite\";\nimport type { EdgeCreationCallbacks, EdgeMode, NodeId, UpsertOptions } from \"../types\";\nimport {\n  isEdgeConnection,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n  toViewReference,\n} from \"../utils\";\nimport { UpsertValidator } from \"../validators\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nconst IDENTITY_KEYS = new Set([\"space\", \"externalId\"]);\nconst EDGE_QUERY_LIMIT = 1000;\n\ninterface MappedItem {\n  writes: Array<InstancesApplyNodeWrite | InstancesApplyEdgeWrite>;\n  edgeReplacements: EdgeReplacementPlan[];\n}\n\ninterface EdgeReplacementPlan {\n  rootNode: NodeId;\n  propertyName: string;\n  property: EdgeConnection;\n  desiredEdges: InstancesApplyEdgeWrite[];\n}\n\nexport class UpsertMapper {\n  private readonly validator = new UpsertValidator();\n\n  constructor(\n    private readonly viewMapper: ViewMapper,\n    private readonly cognite: CognitePort,\n  ) {}\n\n  async map<TModel>(options: UpsertOptions<TModel>): Promise<InstancesApplyRequest> {\n    const rootView = await this.viewMapper.getView(options.viewExternalId);\n    this.validator.validate(options, rootView);\n\n    const edgeMode = options.edgeMode ?? \"append\";\n    const mappedItems = options.items.map((item) =>\n      this.mapItem(item as Record<string, unknown>, rootView, options.onEdgeCreation, edgeMode),\n    );\n    const items = mappedItems.flatMap((item) => item.writes);\n    const edgeReplacements = mappedItems.flatMap((item) => item.edgeReplacements);\n    const deleteItems =\n      edgeMode === \"replace\" ? await this.mapEdgeReplacementDeletes(edgeReplacements) : [];\n\n    return {\n      items,\n      ...(deleteItems.length > 0 ? { delete: deleteItems } : {}),\n      ...(options.replace === true ? { replace: true } : {}),\n    };\n  }\n\n  private mapItem(\n    item: Record<string, unknown>,\n    rootView: ViewDefinition,\n    onEdgeCreation: EdgeCreationCallbacks | undefined,\n    edgeMode: EdgeMode,\n  ): MappedItem {\n    const node: NodeId = { space: item.space as string, externalId: item.externalId as string };\n    const nodeProperties: Record<string, unknown> = {};\n    const inferredItems: Array<InstancesApplyNodeWrite | InstancesApplyEdgeWrite> = [];\n    const edgeReplacements: EdgeReplacementPlan[] = [];\n\n    for (const [name, value] of Object.entries(item)) {\n      if (IDENTITY_KEYS.has(name)) continue;\n\n      const property = rootView.properties[name];\n      if (!property) continue;\n\n      if (isViewPropertyDefinition(property)) {\n        nodeProperties[name] = normalizeViewPropertyValue(value, property);\n      } else if (isReverseDirectRelation(property)) {\n        inferredItems.push(...this.mapReverseDirectRelation(node, value, property));\n      } else if (isEdgeConnection(property)) {\n        const desiredEdges = this.mapEdgeConnection(node, name, value, property, onEdgeCreation);\n        inferredItems.push(...desiredEdges);\n        if (edgeMode === \"replace\") {\n          edgeReplacements.push({ rootNode: node, propertyName: name, property, desiredEdges });\n        }\n      }\n    }\n\n    const applyNode: InstancesApplyNodeWrite = {\n      instanceType: \"node\",\n      ...node,\n    };\n\n    if (Object.keys(nodeProperties).length > 0) {\n      applyNode.sources = [{ source: toViewReference(rootView), properties: nodeProperties }];\n    }\n\n    return { writes: [applyNode, ...inferredItems], edgeReplacements };\n  }\n\n  private async mapEdgeReplacementDeletes(\n    replacements: EdgeReplacementPlan[],\n  ): Promise<InstancesApplyDelete[]> {\n    const deletes = await Promise.all(\n      replacements.map(async (replacement) => {\n        const existingEdges = await this.queryExistingEdges(replacement);\n        const desiredEdgeKeys = new Set(replacement.desiredEdges.map((edge) => instanceKey(edge)));\n        return existingEdges\n          .filter((edge) => !desiredEdgeKeys.has(instanceKey(edge)))\n          .map((edge) => ({\n            instanceType: \"edge\" as const,\n            space: edge.space,\n            externalId: edge.externalId,\n          }));\n      }),\n    );\n\n    return uniqueDeletes(deletes.flat());\n  }\n\n  private async queryExistingEdges(replacement: EdgeReplacementPlan): Promise<EdgeDefinition[]> {\n    const rootKey = `${replacement.propertyName}Root`;\n    const edgeKey = `${replacement.propertyName}Edges`;\n    const direction = replacement.property.direction ?? \"outwards\";\n    const query: InstancesQueryRequest = {\n      with: {\n        [rootKey]: {\n          nodes: {\n            filter: {\n              instanceReferences: [replacement.rootNode],\n            },\n          },\n          limit: 1,\n        },\n        [edgeKey]: {\n          edges: {\n            from: rootKey,\n            maxDistance: 1,\n            direction,\n            filter: {\n              equals: { property: [\"edge\", \"type\"], value: replacement.property.type },\n            } as never,\n          },\n          limit: EDGE_QUERY_LIMIT,\n        },\n      },\n      select: {\n        [rootKey]: {},\n        [edgeKey]: {},\n      },\n    };\n\n    const edges: EdgeDefinition[] = [];\n    let cursor: string | undefined;\n\n    do {\n      const response = await this.cognite.queryInstances({\n        ...query,\n        ...(cursor ? { cursors: { [edgeKey]: cursor } } : {}),\n      });\n      edges.push(\n        ...(response.items[edgeKey] ?? []).filter(\n          (item): item is EdgeDefinition => item.instanceType === \"edge\",\n        ),\n      );\n      cursor = response.nextCursor[edgeKey];\n    } while (cursor);\n\n    return edges;\n  }\n\n  private mapReverseDirectRelation(\n    node: NodeId,\n    value: unknown,\n    property: ReverseDirectRelationConnection,\n  ): InstancesApplyNodeWrite[] {\n    const targets = asNodeIdArray(value);\n\n    return targets.map((target) => ({\n      instanceType: \"node\",\n      ...target,\n      sources: [\n        {\n          source: property.through.source,\n          properties: {\n            [property.through.identifier]: normalizeReverseDirectRelationValue(node, property),\n          },\n        },\n      ],\n    }));\n  }\n\n  private mapEdgeConnection(\n    node: NodeId,\n    propertyName: string,\n    value: unknown,\n    property: EdgeConnection,\n    onEdgeCreation: EdgeCreationCallbacks | undefined,\n  ): InstancesApplyEdgeWrite[] {\n    const direction = property.direction ?? \"outwards\";\n\n    return asNodeIdArray(value).map((target) => {\n      const startNode = direction === \"inwards\" ? target : node;\n      const endNode = direction === \"inwards\" ? node : target;\n      const edgeType = toNodeId(property.type, `edge type for \"${propertyName}\"`);\n      const createEdgeId = onEdgeCreation?.[propertyName];\n\n      if (!createEdgeId) {\n        throw new Error(\n          `Invalid upsert options:\\n- onEdgeCreation.${propertyName}: required when ingesting edge connection \"${propertyName}\"`,\n        );\n      }\n\n      const edgeId = createEdgeId({\n        startNode,\n        endNode,\n        edgeType,\n      });\n\n      assertNodeId(edgeId, `onEdgeCreation(${propertyName})`);\n\n      return {\n        instanceType: \"edge\",\n        ...edgeId,\n        type: property.type,\n        startNode,\n        endNode,\n      };\n    });\n  }\n}\n\nfunction normalizeReverseDirectRelationValue(\n  node: NodeId,\n  property: ReverseDirectRelationConnection,\n): NodeId | NodeId[] {\n  return property.targetsList === true ? [node] : node;\n}\n\nfunction normalizeViewPropertyValue(\n  value: unknown,\n  property: { type: { type?: string } },\n): unknown {\n  if (property.type.type !== \"direct\") return normalizePropertyValue(value);\n  if (Array.isArray(value)) return value.map((item) => toNodeId(item));\n  return toNodeId(value);\n}\n\nfunction normalizePropertyValue(value: unknown): unknown {\n  if (value instanceof Date) return value.toISOString();\n  if (Array.isArray(value)) return value.map(normalizePropertyValue);\n  if (isPlainObject(value)) {\n    return Object.fromEntries(\n      Object.entries(value).map(([key, nestedValue]) => [key, normalizePropertyValue(nestedValue)]),\n    );\n  }\n  return value;\n}\n\nfunction asNodeIdArray(value: unknown): NodeId[] {\n  return Array.isArray(value) ? value.map((item) => toNodeId(item)) : [toNodeId(value)];\n}\n\nfunction toNodeId(value: unknown, label = \"relation reference\"): NodeId {\n  if (\n    !isPlainObject(value) ||\n    typeof value.space !== \"string\" ||\n    typeof value.externalId !== \"string\"\n  ) {\n    throw new Error(`Invalid upsert options:\\n- ${label}: expected a NodeId`);\n  }\n  return { space: value.space, externalId: value.externalId };\n}\n\nfunction instanceKey(instance: NodeId): string {\n  return `${instance.space}\\0${instance.externalId}`;\n}\n\nfunction uniqueDeletes(deletes: InstancesApplyDelete[]): InstancesApplyDelete[] {\n  const seen = new Set<string>();\n  return deletes.filter((item) => {\n    const key = instanceKey(item);\n    if (seen.has(key)) return false;\n    seen.add(key);\n    return true;\n  });\n}\n\nfunction assertNodeId(value: unknown, label: string): asserts value is NodeId {\n  if (\n    !isPlainObject(value) ||\n    typeof value.space !== \"string\" ||\n    typeof value.externalId !== \"string\"\n  ) {\n    throw new Error(`Invalid upsert options:\\n- ${label}: expected a NodeId`);\n  }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n","import type { CachePort } from \"../types\";\n\nexport function createMemoryCacheAdapter(): CachePort {\n  const store = new Map<string, string>();\n\n  return {\n    async get(key) {\n      return store.get(key) ?? null;\n    },\n    async set(key, value) {\n      store.set(key, value);\n    },\n    async delete(key) {\n      store.delete(key);\n    },\n  };\n}\n","import { createMemoryCacheAdapter } from \"./adapters/memory-adapter\";\nimport type { CacheResolver, CacheResolverOptions } from \"./types\";\n\ntype CacheEnvelope = {\n  storedAt: number;\n  value: unknown;\n};\n\ntype ResolvedEntry<T> = {\n  value: T;\n  storedAt: number;\n};\n\nexport function createCacheResolver<T>(options: CacheResolverOptions<T> = {}): CacheResolver<T> {\n  const {\n    // Defaults to a private in-memory adapter so a resolver with no persistent adapter still\n    // memoizes indefinitely per instance, matching the previous single-promise cache it replaces.\n    adapter = createMemoryCacheAdapter(),\n    ttlMs,\n    serialize = defaultSerialize,\n    deserialize = defaultDeserialize,\n  } = options;\n\n  // `pending` de-duplicates concurrent resolve() calls for a key. `resolved` is a\n  // process-local, already-deserialized copy of the last value resolved by *this* resolver,\n  // so repeat calls (e.g. ViewMapper re-reading its own schema many times) never re-hit the\n  // adapter or re-run deserialize() once a value is already known and still fresh.\n  const pending = new Map<string, Promise<T>>();\n  const resolved = new Map<string, ResolvedEntry<T>>();\n  // Bumped by invalidate() so a load already in flight when invalidate() runs does not\n  // resurrect the invalidated entry once it settles.\n  const generations = new Map<string, number>();\n\n  function isFresh(storedAt: number): boolean {\n    return ttlMs == null || Date.now() - storedAt <= ttlMs;\n  }\n\n  function currentGeneration(key: string): number {\n    return generations.get(key) ?? 0;\n  }\n\n  async function readFromAdapter(key: string): Promise<ResolvedEntry<T> | null> {\n    let raw: string | null;\n    try {\n      raw = await adapter.get(key);\n    } catch {\n      return null;\n    }\n    if (raw == null) return null;\n\n    try {\n      const envelope = JSON.parse(raw) as CacheEnvelope;\n      if (!isFresh(envelope.storedAt)) return null;\n      return { value: deserialize(envelope.value), storedAt: envelope.storedAt };\n    } catch {\n      // A corrupted, foreign, or incompatible persisted entry is treated as a cache miss\n      // rather than failing the resolve() call.\n      return null;\n    }\n  }\n\n  async function writeToAdapter(key: string, entry: ResolvedEntry<T>): Promise<void> {\n    try {\n      const envelope: CacheEnvelope = { storedAt: entry.storedAt, value: serialize(entry.value) };\n      await adapter.set(key, JSON.stringify(envelope));\n    } catch {\n      // Best-effort persistence: a write failure (quota exceeded, storage disabled, ...)\n      // must not fail an otherwise successful load.\n    }\n  }\n\n  return {\n    resolve(key, load) {\n      const inFlight = pending.get(key);\n      if (inFlight) return inFlight;\n\n      const fresh = resolved.get(key);\n      if (fresh && isFresh(fresh.storedAt)) {\n        return Promise.resolve(fresh.value);\n      }\n\n      const generation = currentGeneration(key);\n      const promise = (async () => {\n        const fromAdapter = await readFromAdapter(key);\n        if (fromAdapter) {\n          resolved.set(key, fromAdapter);\n          return fromAdapter.value;\n        }\n\n        const value = await load();\n        const entry: ResolvedEntry<T> = { value, storedAt: Date.now() };\n        // Skip persisting a value made stale by an invalidate() that ran while load() was in flight.\n        if (currentGeneration(key) === generation) {\n          resolved.set(key, entry);\n          await writeToAdapter(key, entry);\n        }\n        return value;\n      })();\n\n      pending.set(key, promise);\n      // Rejections are surfaced to the caller through `promise` itself; this chain only\n      // clears bookkeeping and must not produce a second, unhandled rejection.\n      promise\n        .finally(() => {\n          if (pending.get(key) === promise) pending.delete(key);\n        })\n        .catch(() => {});\n\n      return promise;\n    },\n\n    async invalidate(key) {\n      generations.set(key, currentGeneration(key) + 1);\n      pending.delete(key);\n      resolved.delete(key);\n      try {\n        await adapter.delete(key);\n      } catch {\n        // Best-effort: the in-process caches above are already cleared regardless.\n      }\n    },\n  };\n}\n\nfunction defaultSerialize<T>(value: T): unknown {\n  return value;\n}\n\nfunction defaultDeserialize<T>(json: unknown): T {\n  return json as T;\n}\n","import { type CacheResolver, createCacheResolver } from \"../cache\";\nimport type {\n  CognitePort,\n  ViewDefinition,\n  ViewDefinitionProperty,\n  ViewReference,\n} from \"../cognite\";\nimport type { DataModelId } from \"../types\";\nimport {\n  getDirectRelationSource,\n  isEdgeConnection,\n  isReverseDirectRelation,\n  isViewPropertyDefinition,\n} from \"../utils/view\";\n\nexport class ViewMapper {\n  private readonly resolver: CacheResolver<Map<string, ViewDefinition>>;\n\n  constructor(\n    private readonly cognite: CognitePort,\n    private readonly dataModelId: DataModelId,\n  ) {\n    this.resolver = createCacheResolver<Map<string, ViewDefinition>>({\n      serialize: (views) => Array.from(views.values()),\n      deserialize: (json) => {\n        const views = json as ViewDefinition[];\n        return new Map(views.map((view) => [view.externalId, view]));\n      },\n    });\n  }\n\n  async getView(externalId: string): Promise<ViewDefinition> {\n    return requireView(await this.loadViews(), externalId, this.dataModelId);\n  }\n\n  async getViews(): Promise<ViewDefinition[]> {\n    const views = await this.loadViews();\n    return Array.from(views.values());\n  }\n\n  protected loadViews(): Promise<Map<string, ViewDefinition>> {\n    return this.resolver.resolve(this.cacheKey(), () => this.fetchViews());\n  }\n\n  private cacheKey(): string {\n    const { space, externalId, version } = this.dataModelId;\n    return `view-mapper:${space}:${externalId}:${version}`;\n  }\n\n  private async fetchViews(): Promise<Map<string, ViewDefinition>> {\n    const response = await this.cognite.retrieveDataModels(\n      [\n        {\n          space: this.dataModelId.space,\n          externalId: this.dataModelId.externalId,\n          version: this.dataModelId.version,\n        },\n      ],\n      { inlineViews: true },\n    );\n\n    const dm = response.items.sort((a, b) => b.createdTime - a.createdTime)[0];\n    if (!dm) {\n      throw new Error(`Data model \"${this.dataModelId.externalId}\" not found`);\n    }\n\n    const views = new Map<string, ViewDefinition>();\n    for (const view of dm.views ?? []) {\n      views.set(view.externalId, view);\n    }\n\n    await this.loadDependencyViews(views);\n    return views;\n  }\n\n  private async loadDependencyViews(views: Map<string, ViewDefinition>): Promise<void> {\n    const pending = new Map<string, ViewReference>();\n\n    for (const view of views.values()) {\n      for (const property of Object.values(view.properties)) {\n        for (const ref of collectPropertyRefs(property)) {\n          if (!views.has(ref.externalId) && !pending.has(ref.externalId)) {\n            pending.set(ref.externalId, ref);\n          }\n        }\n      }\n    }\n\n    if (pending.size === 0) return;\n\n    const sizeBefore = views.size;\n    const fetched = await this.cognite.retrieveViews(Array.from(pending.values()));\n    for (const view of fetched.items) {\n      views.set(view.externalId, view);\n    }\n\n    if (views.size > sizeBefore) {\n      await this.loadDependencyViews(views);\n    }\n  }\n}\n\n/**\n * A `ViewMapper` preloaded with view definitions captured at package generation\n * time. `getView` / `getViews` never call CDF.\n */\nexport class ViewMapperCache extends ViewMapper {\n  private readonly viewsByExternalId: Map<string, ViewDefinition>;\n\n  constructor(views: Iterable<ViewDefinition> | Map<string, ViewDefinition>) {\n    super(undefined as unknown as CognitePort, VIEW_MAPPER_CACHE_DATA_MODEL);\n    this.viewsByExternalId = indexViews(views);\n  }\n\n  static fromViews(views: readonly object[]): ViewMapperCache {\n    return new ViewMapperCache(views as ViewDefinition[]);\n  }\n\n  protected override loadViews(): Promise<Map<string, ViewDefinition>> {\n    return Promise.resolve(this.viewsByExternalId);\n  }\n}\n\nconst VIEW_MAPPER_CACHE_DATA_MODEL: DataModelId = {\n  space: \"\",\n  externalId: \"\",\n  version: \"\",\n};\n\nfunction indexViews(\n  views: Iterable<ViewDefinition> | Map<string, ViewDefinition>,\n): Map<string, ViewDefinition> {\n  if (views instanceof Map) {\n    return new Map(views);\n  }\n  return new Map(Array.from(views, (view) => [view.externalId, view]));\n}\n\nfunction requireView(\n  views: Map<string, ViewDefinition>,\n  externalId: string,\n  dataModelId: DataModelId,\n): ViewDefinition {\n  const view = views.get(externalId);\n  if (!view) {\n    throw new Error(\n      dataModelId.externalId\n        ? `View \"${externalId}\" not found in data model \"${dataModelId.externalId}\"`\n        : `View \"${externalId}\" is not available in data model`,\n    );\n  }\n  return view;\n}\n\nfunction collectPropertyRefs(property: ViewDefinitionProperty): ViewReference[] {\n  if (isViewPropertyDefinition(property)) {\n    const source = getDirectRelationSource(property);\n    return source ? [source] : [];\n  }\n  if (isReverseDirectRelation(property)) {\n    return [property.source, property.through.source];\n  }\n  if (isEdgeConnection(property)) {\n    return [property.source];\n  }\n  return [];\n}\n","import type { CogniteClient } from \"@cognite/sdk\";\nimport {\n  type CognitePort,\n  createCogniteAdapter,\n  type InstancesApplyRequest,\n  type InstancesQueryRequest,\n  type InstancesQueryResponse,\n} from \"./cognite\";\nimport { DEFAULT_LIMIT, MAX_DEPENDENCY_DEPTH, MAX_LIMIT } from \"./constants\";\nimport { AggregateMapper } from \"./mappers/aggregate-mapper\";\nimport { AggregateResultMapper } from \"./mappers/aggregate-result-mapper\";\nimport { DatapointsMapper } from \"./mappers/datapoints-mapper\";\nimport { FilesMapper } from \"./mappers/files-mapper\";\nimport { QueryMapper } from \"./mappers/query-mapper\";\nimport { QueryResultMapper } from \"./mappers/result-mapper\";\nimport { UpsertMapper } from \"./mappers/upsert-mapper\";\nimport { ViewMapper } from \"./mappers/view-mapper\";\nimport type {\n  AggregateExecutor,\n  AggregateOptions,\n  AggregateResult,\n  AggregateResultItemForOptions,\n  DataModelId,\n  DatapointsExecutor,\n  DeleteResult,\n  FilesExecutor,\n  IndustrialModelClientOptions,\n  NodeId,\n  QueryExecutor,\n  QueryOptions,\n  QueryResult,\n  QueryResultItem,\n  QueryResultMap,\n  QuerySelect,\n  UpsertExecutor,\n  UpsertOptions,\n  UpsertResult,\n} from \"./types\";\nimport { chunks } from \"./utils/array\";\nimport {\n  appendNodesAndEdges,\n  getQueryForDependenciesPagination,\n  mapNodesAndEdges,\n} from \"./utils/query\";\nimport { DeleteValidator, QueryResultValidator } from \"./validators\";\n\nconst APPLY_ITEM_LIMIT = 1000;\n\nexport class IndustrialModelClient {\n  private readonly cognite: CognitePort;\n  private readonly queryMapper: QueryMapper;\n  private readonly aggregateMapper: AggregateMapper;\n  private readonly upsertMapper: UpsertMapper;\n  private readonly aggregateResultMapper: AggregateResultMapper;\n  private readonly resultMapper: QueryResultMapper;\n  private readonly datapointsMapper: DatapointsMapper;\n  private readonly filesMapper: FilesMapper;\n  private readonly deleteValidator = new DeleteValidator();\n  private readonly resultValidator: QueryResultValidator;\n  private readonly validateResults: boolean;\n\n  constructor(\n    client: CogniteClient,\n    dataModelId: DataModelId,\n    options: IndustrialModelClientOptions = {},\n  ) {\n    const cognite = createCogniteAdapter(client);\n    this.cognite = cognite;\n    const viewMapper = options.viewMapperCache ?? new ViewMapper(cognite, dataModelId);\n    this.queryMapper = new QueryMapper(viewMapper, cognite);\n    this.aggregateMapper = new AggregateMapper(viewMapper, cognite);\n    this.upsertMapper = new UpsertMapper(viewMapper, cognite);\n    this.aggregateResultMapper = new AggregateResultMapper();\n    this.resultMapper = new QueryResultMapper(viewMapper);\n    this.datapointsMapper = new DatapointsMapper(cognite);\n    this.filesMapper = new FilesMapper(cognite);\n    this.resultValidator = new QueryResultValidator(viewMapper);\n    this.validateResults = options.validateResults ?? false;\n  }\n\n  query<TModel>(): QueryExecutor<TModel> {\n    const execute = <const TSelect extends QuerySelect<TModel> | undefined = undefined>(\n      options: QueryOptions<TModel, TSelect>,\n    ): Promise<QueryResult<QueryResultItem<TModel, TSelect>>> => this.queryInternal(options);\n\n    return execute as unknown as QueryExecutor<TModel>;\n  }\n\n  aggregate<TModel>(): AggregateExecutor<TModel> {\n    const execute = <const TOptions extends AggregateOptions<TModel>>(\n      options: TOptions,\n    ): Promise<AggregateResult<AggregateResultItemForOptions<TModel, TOptions>>> =>\n      this.aggregateInternal(options);\n\n    return execute as unknown as AggregateExecutor<TModel>;\n  }\n\n  upsert<TModel>(): UpsertExecutor<TModel> {\n    const execute = (options: UpsertOptions<TModel>): Promise<UpsertResult> =>\n      this.upsertInternal(options);\n\n    return execute as unknown as UpsertExecutor<TModel>;\n  }\n\n  readonly files: FilesExecutor = {\n    upload: (fileInfo, content) => this.filesMapper.upload(fileInfo, content),\n    getDownloadUrls: (nodeIds) => this.filesMapper.getDownloadUrls(nodeIds),\n  };\n\n  readonly datapoints: DatapointsExecutor = {\n    retrieve: (options) => this.datapointsMapper.retrieve(options),\n    latest: (options) => this.datapointsMapper.retrieveLatest(options),\n    insert: (items) => this.datapointsMapper.insert(items),\n    delete: (ranges) => this.datapointsMapper.delete(ranges),\n  };\n\n  async delete<TItem extends NodeId>(items: TItem[]): Promise<DeleteResult> {\n    this.deleteValidator.validateItems(items);\n    const deleteItems = items.map((item) => ({\n      instanceType: \"node\" as const,\n      space: item.space,\n      externalId: item.externalId,\n    }));\n\n    const response = await this.applyInstancesInChunks({\n      items: [],\n      delete: deleteItems,\n    });\n    return { items: response.items as DeleteResult[\"items\"] };\n  }\n\n  private async upsertInternal<TModel>(options: UpsertOptions<TModel>): Promise<UpsertResult> {\n    const cogniteRequest = await this.upsertMapper.map(options);\n    const response = await this.applyInstancesInChunks(cogniteRequest);\n    return { items: response.items };\n  }\n\n  private async applyInstancesInChunks(\n    request: InstancesApplyRequest,\n  ): Promise<{ items: UpsertResult[\"items\"] }> {\n    const deleteItems = request.delete ?? [];\n    const totalItems = request.items.length + deleteItems.length;\n\n    if (totalItems === 0) return { items: [] };\n\n    if (totalItems <= APPLY_ITEM_LIMIT) {\n      return this.cognite.applyInstances(request);\n    }\n\n    const responses: UpsertResult[\"items\"] = [];\n\n    for (const deleteChunk of chunks(deleteItems, APPLY_ITEM_LIMIT)) {\n      const response = await this.cognite.applyInstances({\n        items: [],\n        delete: deleteChunk,\n      });\n      responses.push(...response.items);\n    }\n\n    for (const itemChunk of chunks(request.items, APPLY_ITEM_LIMIT)) {\n      const response = await this.cognite.applyInstances({\n        items: itemChunk,\n        ...(request.replace === true ? { replace: true } : {}),\n      });\n      responses.push(...response.items);\n    }\n\n    return { items: responses };\n  }\n\n  private async aggregateInternal<TModel, const TOptions extends AggregateOptions<TModel>>(\n    options: TOptions,\n  ): Promise<AggregateResult<AggregateResultItemForOptions<TModel, TOptions>>> {\n    const cogniteRequest = await this.aggregateMapper.map(options);\n    const response = await this.cognite.aggregateInstances(cogniteRequest);\n    const items = this.aggregateResultMapper.map<TModel>(\n      response,\n      options,\n    ) as unknown as AggregateResultItemForOptions<TModel, TOptions>[];\n    return { items };\n  }\n\n  private async queryInternal<TModel, TSelect extends QuerySelect<TModel> | undefined = undefined>(\n    options: QueryOptions<TModel, TSelect>,\n  ): Promise<QueryResult<QueryResultItem<TModel, TSelect>>> {\n    const { viewExternalId } = options;\n    const effectiveLimit = options.limit === -1 ? MAX_LIMIT : (options.limit ?? DEFAULT_LIMIT);\n    const allPages = options.limit === -1;\n    const cogniteQuery = await this.queryMapper.map(options);\n    const data: QueryResultItem<TModel, TSelect>[] = [];\n\n    while (true) {\n      const queryResult = await this.cognite.queryInstances(cogniteQuery);\n\n      const dependenciesData = await this.queryDependenciesPages(\n        cogniteQuery,\n        queryResult,\n        viewExternalId,\n      );\n\n      const queryResultData = appendNodesAndEdges(\n        mapNodesAndEdges(queryResult, cogniteQuery),\n        dependenciesData,\n      );\n\n      const mappedPageResult = await this.resultMapper.mapNodes(viewExternalId, queryResultData);\n      const pageResult = this.validateResults\n        ? await this.resultValidator.parseItems(viewExternalId, mappedPageResult, options.select)\n        : mappedPageResult;\n      const nextCursor = queryResult.nextCursor[viewExternalId] ?? null;\n      const isLastPage = pageResult.length < effectiveLimit || !nextCursor;\n      const resolvedCursor = isLastPage ? null : nextCursor;\n\n      data.push(...(pageResult as QueryResultItem<TModel, TSelect>[]));\n\n      if (!isLastPage && resolvedCursor !== null) {\n        cogniteQuery.cursors = { [viewExternalId]: resolvedCursor };\n      }\n\n      if (!allPages || isLastPage) {\n        return { items: data, cursor: resolvedCursor };\n      }\n    }\n  }\n\n  private async queryDependenciesPages(\n    cogniteQuery: InstancesQueryRequest,\n    queryResult: InstancesQueryResponse,\n    viewExternalId: string,\n    remainingDepth = MAX_DEPENDENCY_DEPTH,\n  ): Promise<QueryResultMap | null> {\n    if (remainingDepth <= 0) {\n      return null;\n    }\n\n    const newQuery = getQueryForDependenciesPagination(cogniteQuery, queryResult, viewExternalId);\n\n    if (!newQuery) return null;\n\n    const newQueryResult = await this.cognite.queryInstances(newQuery);\n    const result = mapNodesAndEdges(newQueryResult, newQuery);\n\n    const nestedResults = await this.queryDependenciesPages(\n      newQuery,\n      newQueryResult,\n      viewExternalId,\n      remainingDepth - 1,\n    );\n\n    return appendNodesAndEdges(result, nestedResults);\n  }\n}\n"]}