industrial-model 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cognite/adapter.ts","../src/constants.ts","../src/mappers/utils.ts","../src/validation.ts","../src/mappers/query-validator.ts","../src/mappers/aggregate-validator.ts","../src/mappers/filter-mapper.ts","../src/mappers/aggregate-mapper.ts","../src/mappers/aggregate-result-mapper.ts","../src/mappers/sort-mapper.ts","../src/mappers/query-mapper.ts","../src/mappers/result-mapper.ts","../src/mappers/result-validator.ts","../src/mappers/view-mapper.ts","../src/utils/query.ts","../src/client.ts"],"names":["z","NODE_PROPERTIES","target","issuePath","formatZodIssues","property","isLeafFilter","isRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CogniteClient } from \"@cognite/sdk\";\nimport type { CognitePort } from \"./port\";\nimport type {\n DataModelId,\n DataModelRetrieveOptions,\n InstancesAggregateRequest,\n InstancesAggregateResponse,\n InstancesQueryRequest,\n InstancesQueryResponse,\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 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 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","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;\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]);\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 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 if (property.type.list === true) return false;\n const type = property.type.type;\n return type != null && GROUPABLE_PROPERTY_TYPES.has(type);\n}\n\nexport function isNumericProperty(property: ViewPropertyDefinition): boolean {\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 \"./mappers/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 case \"enum\":\n schema = z.string();\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 { QueryOptions } from \"../types\";\nimport { nodeIdSchema } from \"../validation\";\nimport {\n getDirectRelationSource,\n isEdgeConnection,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\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 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 \"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\",\n): z.ZodType {\n if (property === \"node-string\") return z.string();\n if (property === \"node-number\") return z.number();\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\",\n): z.ZodType {\n const value = baseValueSchema(property);\n const isList = typeof property !== \"string\" && property.type.list === true;\n\n if (isList) {\n return z\n .object({\n containsAny: z.array(value).optional(),\n containsAll: z.array(value).optional(),\n exists: z.boolean().optional(),\n })\n .strict();\n }\n\n if (\n property === \"node-string\" ||\n (typeof property !== \"string\" && property.type.type === \"text\")\n ) {\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 (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 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\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 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 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\",\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\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_GROUP_BY } from \"../constants\";\nimport type { AggregateDefinition, AggregateGroupBy, AggregateOptions } from \"../types\";\nimport { QueryValidator } from \"./query-validator\";\nimport {\n getDirectRelationSource,\n getSelectedGroupByKeys,\n isGroupableProperty,\n isNumericProperty,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nconst NODE_COUNT_PROPERTIES = new Set([\"externalId\", \"space\"]);\n\nfunction issuePath(path: PropertyKey[]): string {\n return path.length === 0 ? \"aggregate\" : 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 errors.push(...this.validateOptionsShape(options, rootView));\n\n const selectedGroupBy = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\n\n if (selectedGroupBy.length === 0 && options.aggregate === undefined) {\n errors.push(\"aggregate: either groupBy or aggregate 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 if (options.aggregate !== undefined) {\n errors.push(\n ...this.validateAggregate(\n options.aggregate as AggregateDefinition<Record<string, unknown>>,\n rootView,\n [\"aggregate\"],\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 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 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 || !isGroupableProperty(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 type { FilterDefinition, ViewDefinition } from \"../cognite\";\nimport { getDirectRelationSource, getPropertyRef, isViewPropertyDefinition } 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(private readonly viewMapper: ViewMapper) {}\n\n async map(input: Record<string, unknown>, rootView: ViewDefinition): Promise<FilterDefinition[]> {\n const result: FilterDefinition[] = [];\n\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(key, rootView);\n if (isLeafFilter(filterValue)) {\n result.push(...this.leafToFilterDefs(property, filterValue));\n } else {\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 return result;\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 FilterDefinition,\n InstancesAggregateDefinition,\n InstancesAggregateRequest,\n} from \"../cognite\";\nimport { AGGREGATE_LIMIT } from \"../constants\";\nimport type { AggregateDefinition, AggregateOptions } from \"../types\";\nimport { AggregateValidator } from \"./aggregate-validator\";\nimport { FilterMapper } from \"./filter-mapper\";\nimport { getSelectedGroupByKeys, toViewReference } from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nexport class AggregateMapper {\n private readonly filterMapper: FilterMapper;\n private readonly validator: AggregateValidator;\n\n constructor(private readonly viewMapper: ViewMapper) {\n this.filterMapper = new FilterMapper(viewMapper);\n this.validator = new AggregateValidator(viewMapper);\n }\n\n async map<TModel>(options: AggregateOptions<TModel>): Promise<InstancesAggregateRequest> {\n const { viewExternalId, filters, groupBy, aggregate } = 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 return {\n view: toViewReference(rootView),\n instanceType: \"node\",\n limit: AGGREGATE_LIMIT,\n ...(filter !== undefined ? { filter } : {}),\n ...(groupBy ? { groupBy: getSelectedGroupByKeys(groupBy) } : {}),\n ...(aggregate ? { aggregates: [mapAggregateDefinition(aggregate)] } : {}),\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 } from \"../cognite\";\nimport type { AggregateGroupBy, AggregateOptions, AggregateResultItem, NodeId } from \"../types\";\nimport { getSelectedGroupByKeys } 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\nexport class AggregateResultMapper {\n map<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined>(\n response: InstancesAggregateResponse,\n options: Pick<AggregateOptions<TModel>, \"groupBy\" | \"aggregate\">,\n ): AggregateResultItem<TModel, TGroupBy>[] {\n const groupByKeys = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\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 aggregateValue = item.aggregates[0];\n const aggregate =\n aggregateValue?.value !== undefined\n ? aggregateValue.property != null\n ? { property: aggregateValue.property, value: aggregateValue.value }\n : { value: aggregateValue.value }\n : undefined;\n\n return {\n ...(group !== undefined ? { group } : {}),\n ...(aggregate !== undefined ? { aggregate } : {}),\n } as AggregateResultItem<TModel, TGroupBy>;\n });\n }\n}\n","import type { PropertySort, ViewDefinition } from \"../cognite\";\nimport type { SortDirection } from \"../types\";\nimport { getPropertyRef, isDirectRelationWithSource } from \"./utils\";\n\nexport class SortMapper {\n map(sort: Record<string, SortDirection>, rootView: ViewDefinition): PropertySort[] {\n return Object.entries(sort).map(([property, direction]) => ({\n property: getPropertyRef(property, rootView),\n direction,\n nullsFirst: this.isNullsFirst(property, rootView, direction),\n }));\n }\n\n private isNullsFirst(property: string, view: ViewDefinition, direction: SortDirection): boolean {\n const prop = view.properties[property];\n if (prop && isDirectRelationWithSource(prop)) {\n return direction === \"ascending\";\n }\n return direction === \"descending\";\n }\n}\n","import type {\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 { FilterMapper } from \"./filter-mapper\";\nimport { QueryValidator } from \"./query-validator\";\nimport { SortMapper } from \"./sort-mapper\";\nimport {\n buildSelect,\n getDirectRelationSource,\n isEdgeConnection,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n toViewReference,\n} from \"./utils\";\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(private readonly viewMapper: ViewMapper) {\n this.filterMapper = new FilterMapper(viewMapper);\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 ? DEFAULT_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 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\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 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 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\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","import { z } from \"zod\";\nimport type { ViewDefinition, ViewDefinitionProperty } from \"../cognite\";\nimport { MAX_DEPENDENCY_DEPTH } from \"../constants\";\nimport { propertyValueSchema } from \"../validation\";\nimport {\n getDirectRelationSource,\n isEdgeConnection,\n isListDirectRelation,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\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\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> = { ...nodeMetadataSchema };\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 type { CognitePort, ViewDefinition } from \"../cognite\";\nimport type { DataModelId } from \"../types\";\n\nexport class ViewMapper {\n private cachePromise: Promise<Map<string, ViewDefinition>> | null = null;\n\n constructor(\n private readonly cognite: CognitePort,\n private readonly dataModelId: DataModelId,\n ) {}\n\n async getView(externalId: string): Promise<ViewDefinition> {\n const views = await this.loadViews();\n const view = views.get(externalId);\n if (!view) {\n throw new Error(\n `View \"${externalId}\" not found in data model \"${this.dataModelId.externalId}\"`,\n );\n }\n return view;\n }\n\n private loadViews(): Promise<Map<string, ViewDefinition>> {\n if (this.cachePromise == null) {\n this.cachePromise = this.fetchViews();\n }\n return this.cachePromise;\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 return views;\n }\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 { CogniteClient } from \"@cognite/sdk\";\nimport {\n type CognitePort,\n createCogniteAdapter,\n type InstancesQueryRequest,\n type InstancesQueryResponse,\n} from \"./cognite\";\nimport { DEFAULT_LIMIT, MAX_DEPENDENCY_DEPTH } from \"./constants\";\nimport { AggregateMapper } from \"./mappers/aggregate-mapper\";\nimport { AggregateResultMapper } from \"./mappers/aggregate-result-mapper\";\nimport { QueryMapper } from \"./mappers/query-mapper\";\nimport { QueryResultMapper } from \"./mappers/result-mapper\";\nimport { QueryResultValidator } from \"./mappers/result-validator\";\nimport { ViewMapper } from \"./mappers/view-mapper\";\nimport type {\n AggregateExecutor,\n AggregateOptions,\n AggregateResult,\n AggregateResultItem,\n DataModelId,\n IndustrialModelClientOptions,\n QueryExecutor,\n QueryOptions,\n QueryResult,\n QueryResultItem,\n QueryResultMap,\n QuerySelect,\n} from \"./types\";\nimport {\n appendNodesAndEdges,\n getQueryForDependenciesPagination,\n mapNodesAndEdges,\n} from \"./utils/query\";\nexport class IndustrialModelClient {\n private readonly cognite: CognitePort;\n private readonly queryMapper: QueryMapper;\n private readonly aggregateMapper: AggregateMapper;\n private readonly aggregateResultMapper: AggregateResultMapper;\n private readonly resultMapper: QueryResultMapper;\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 = new ViewMapper(cognite, dataModelId);\n this.queryMapper = new QueryMapper(viewMapper);\n this.aggregateMapper = new AggregateMapper(viewMapper);\n this.aggregateResultMapper = new AggregateResultMapper();\n this.resultMapper = new QueryResultMapper(viewMapper);\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<\n AggregateResult<AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>>\n > => this.aggregateInternal(options);\n\n return execute as unknown as AggregateExecutor<TModel>;\n }\n\n private async aggregateInternal<TModel, const TOptions extends AggregateOptions<TModel>>(\n options: TOptions,\n ): Promise<\n AggregateResult<AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>>\n > {\n const cogniteRequest = await this.aggregateMapper.map(options);\n const response = await this.cognite.aggregateInstances(cogniteRequest);\n const items = this.aggregateResultMapper.map<TModel, TOptions[\"groupBy\"]>(\n response,\n options,\n ) as AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>[];\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, limit = DEFAULT_LIMIT } = options;\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 < limit || !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"]}
1
+ {"version":3,"sources":["../src/cognite/adapter.ts","../src/constants.ts","../src/mappers/utils.ts","../src/validation.ts","../src/mappers/query-validator.ts","../src/mappers/aggregate-validator.ts","../src/mappers/filter-mapper.ts","../src/mappers/aggregate-mapper.ts","../src/mappers/aggregate-result-mapper.ts","../src/mappers/sort-mapper.ts","../src/mappers/query-mapper.ts","../src/mappers/result-mapper.ts","../src/mappers/result-validator.ts","../src/mappers/view-mapper.ts","../src/utils/query.ts","../src/client.ts"],"names":["z","NODE_PROPERTIES","target","issuePath","formatZodIssues","property","isLeafFilter","isRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CogniteClient } from \"@cognite/sdk\";\nimport type { CognitePort } from \"./port\";\nimport type {\n DataModelId,\n DataModelRetrieveOptions,\n InstancesAggregateRequest,\n InstancesAggregateResponse,\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 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 search = (\n this.client.instances as unknown as {\n search: (request: InstancesSearchRequest) => Promise<{ items: unknown[] }>;\n }\n ).search;\n const response = await search(request);\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","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;\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]);\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 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 if (property.type.list === true) return false;\n const type = property.type.type;\n return type != null && GROUPABLE_PROPERTY_TYPES.has(type);\n}\n\nexport function isNumericProperty(property: ViewPropertyDefinition): boolean {\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 \"./mappers/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 case \"enum\":\n schema = z.string();\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 { QueryOptions } from \"../types\";\nimport { nodeIdSchema } from \"../validation\";\nimport {\n getDirectRelationSource,\n isEdgeConnection,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\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 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\",\n): z.ZodType {\n if (property === \"node-string\") return z.string();\n if (property === \"node-number\") return z.number();\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\",\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 (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 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\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 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 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\",\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\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_GROUP_BY } from \"../constants\";\nimport type { AggregateDefinition, AggregateGroupBy, AggregateOptions } from \"../types\";\nimport { QueryValidator } from \"./query-validator\";\nimport {\n getDirectRelationSource,\n getSelectedGroupByKeys,\n isGroupableProperty,\n isNumericProperty,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\n\nconst NODE_COUNT_PROPERTIES = new Set([\"externalId\", \"space\"]);\n\nfunction issuePath(path: PropertyKey[]): string {\n return path.length === 0 ? \"aggregate\" : 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 errors.push(...this.validateOptionsShape(options, rootView));\n\n const selectedGroupBy = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\n\n if (selectedGroupBy.length === 0 && options.aggregate === undefined) {\n errors.push(\"aggregate: either groupBy or aggregate 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 if (options.aggregate !== undefined) {\n errors.push(\n ...this.validateAggregate(\n options.aggregate as AggregateDefinition<Record<string, unknown>>,\n rootView,\n [\"aggregate\"],\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 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 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 || !isGroupableProperty(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 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(key, rootView);\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: \"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 { AggregateValidator } from \"./aggregate-validator\";\nimport { FilterMapper } from \"./filter-mapper\";\nimport { getSelectedGroupByKeys, toViewReference } from \"./utils\";\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, aggregate } = 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 return {\n view: toViewReference(rootView),\n instanceType: \"node\",\n limit: AGGREGATE_LIMIT,\n ...(filter !== undefined ? { filter } : {}),\n ...(groupBy ? { groupBy: getSelectedGroupByKeys(groupBy) } : {}),\n ...(aggregate ? { aggregates: [mapAggregateDefinition(aggregate)] } : {}),\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 } from \"../cognite\";\nimport type { AggregateGroupBy, AggregateOptions, AggregateResultItem, NodeId } from \"../types\";\nimport { getSelectedGroupByKeys } 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\nexport class AggregateResultMapper {\n map<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined>(\n response: InstancesAggregateResponse,\n options: Pick<AggregateOptions<TModel>, \"groupBy\" | \"aggregate\">,\n ): AggregateResultItem<TModel, TGroupBy>[] {\n const groupByKeys = options.groupBy ? getSelectedGroupByKeys(options.groupBy) : [];\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 aggregateValue = item.aggregates[0];\n const aggregate =\n aggregateValue?.value !== undefined\n ? aggregateValue.property != null\n ? { property: aggregateValue.property, value: aggregateValue.value }\n : { value: aggregateValue.value }\n : undefined;\n\n return {\n ...(group !== undefined ? { group } : {}),\n ...(aggregate !== undefined ? { aggregate } : {}),\n } as AggregateResultItem<TModel, TGroupBy>;\n });\n }\n}\n","import type { PropertySort, ViewDefinition } from \"../cognite\";\nimport type { SortDirection } from \"../types\";\nimport { getPropertyRef, isDirectRelationWithSource } from \"./utils\";\n\nexport class SortMapper {\n map(sort: Record<string, SortDirection>, rootView: ViewDefinition): PropertySort[] {\n return Object.entries(sort).map(([property, direction]) => ({\n property: getPropertyRef(property, rootView),\n direction,\n nullsFirst: this.isNullsFirst(property, rootView, direction),\n }));\n }\n\n private isNullsFirst(property: string, view: ViewDefinition, direction: SortDirection): boolean {\n const prop = view.properties[property];\n if (prop && isDirectRelationWithSource(prop)) {\n return direction === \"ascending\";\n }\n return direction === \"descending\";\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 { FilterMapper } from \"./filter-mapper\";\nimport { QueryValidator } from \"./query-validator\";\nimport { SortMapper } from \"./sort-mapper\";\nimport {\n buildSelect,\n getDirectRelationSource,\n isEdgeConnection,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n toViewReference,\n} from \"./utils\";\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 ? DEFAULT_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 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\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 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 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\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","import { z } from \"zod\";\nimport type { ViewDefinition, ViewDefinitionProperty } from \"../cognite\";\nimport { MAX_DEPENDENCY_DEPTH } from \"../constants\";\nimport { propertyValueSchema } from \"../validation\";\nimport {\n getDirectRelationSource,\n isEdgeConnection,\n isListDirectRelation,\n isReverseDirectRelation,\n isViewPropertyDefinition,\n} from \"./utils\";\nimport type { ViewMapper } from \"./view-mapper\";\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\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> = { ...nodeMetadataSchema };\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 type { CognitePort, ViewDefinition } from \"../cognite\";\nimport type { DataModelId } from \"../types\";\n\nexport class ViewMapper {\n private cachePromise: Promise<Map<string, ViewDefinition>> | null = null;\n\n constructor(\n private readonly cognite: CognitePort,\n private readonly dataModelId: DataModelId,\n ) {}\n\n async getView(externalId: string): Promise<ViewDefinition> {\n const views = await this.loadViews();\n const view = views.get(externalId);\n if (!view) {\n throw new Error(\n `View \"${externalId}\" not found in data model \"${this.dataModelId.externalId}\"`,\n );\n }\n return view;\n }\n\n private loadViews(): Promise<Map<string, ViewDefinition>> {\n if (this.cachePromise == null) {\n this.cachePromise = this.fetchViews();\n }\n return this.cachePromise;\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 return views;\n }\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 { CogniteClient } from \"@cognite/sdk\";\nimport {\n type CognitePort,\n createCogniteAdapter,\n type InstancesQueryRequest,\n type InstancesQueryResponse,\n} from \"./cognite\";\nimport { DEFAULT_LIMIT, MAX_DEPENDENCY_DEPTH } from \"./constants\";\nimport { AggregateMapper } from \"./mappers/aggregate-mapper\";\nimport { AggregateResultMapper } from \"./mappers/aggregate-result-mapper\";\nimport { QueryMapper } from \"./mappers/query-mapper\";\nimport { QueryResultMapper } from \"./mappers/result-mapper\";\nimport { QueryResultValidator } from \"./mappers/result-validator\";\nimport { ViewMapper } from \"./mappers/view-mapper\";\nimport type {\n AggregateExecutor,\n AggregateOptions,\n AggregateResult,\n AggregateResultItem,\n DataModelId,\n IndustrialModelClientOptions,\n QueryExecutor,\n QueryOptions,\n QueryResult,\n QueryResultItem,\n QueryResultMap,\n QuerySelect,\n} from \"./types\";\nimport {\n appendNodesAndEdges,\n getQueryForDependenciesPagination,\n mapNodesAndEdges,\n} from \"./utils/query\";\nexport class IndustrialModelClient {\n private readonly cognite: CognitePort;\n private readonly queryMapper: QueryMapper;\n private readonly aggregateMapper: AggregateMapper;\n private readonly aggregateResultMapper: AggregateResultMapper;\n private readonly resultMapper: QueryResultMapper;\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 = new ViewMapper(cognite, dataModelId);\n this.queryMapper = new QueryMapper(viewMapper, cognite);\n this.aggregateMapper = new AggregateMapper(viewMapper, cognite);\n this.aggregateResultMapper = new AggregateResultMapper();\n this.resultMapper = new QueryResultMapper(viewMapper);\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<\n AggregateResult<AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>>\n > => this.aggregateInternal(options);\n\n return execute as unknown as AggregateExecutor<TModel>;\n }\n\n private async aggregateInternal<TModel, const TOptions extends AggregateOptions<TModel>>(\n options: TOptions,\n ): Promise<\n AggregateResult<AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>>\n > {\n const cogniteRequest = await this.aggregateMapper.map(options);\n const response = await this.cognite.aggregateInstances(cogniteRequest);\n const items = this.aggregateResultMapper.map<TModel, TOptions[\"groupBy\"]>(\n response,\n options,\n ) as AggregateResultItem<TModel, TOptions[\"groupBy\"], TOptions[\"aggregate\"]>[];\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, limit = DEFAULT_LIMIT } = options;\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 < limit || !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"]}