industrial-model 0.1.0 → 0.2.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.
- package/README.md +200 -125
- package/dist/index.cjs +11 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +77 -33
- package/dist/index.d.ts +77 -33
- package/dist/index.js +11 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -207,8 +207,8 @@ var FilterMapper = class {
|
|
|
207
207
|
|
|
208
208
|
// src/mappers/sort-mapper.ts
|
|
209
209
|
var SortMapper = class {
|
|
210
|
-
map(
|
|
211
|
-
return Object.entries(
|
|
210
|
+
map(sort, rootView) {
|
|
211
|
+
return Object.entries(sort).map(([property, direction]) => ({
|
|
212
212
|
property: getPropertyRef(property, rootView),
|
|
213
213
|
direction,
|
|
214
214
|
nullsFirst: this.isNullsFirst(property, rootView, direction)
|
|
@@ -235,7 +235,7 @@ var QueryMapper = class {
|
|
|
235
235
|
viewExternalId,
|
|
236
236
|
select = { _all: true },
|
|
237
237
|
filters,
|
|
238
|
-
|
|
238
|
+
sort = {},
|
|
239
239
|
limit: requestedLimit = DEFAULT_LIMIT,
|
|
240
240
|
cursor = null
|
|
241
241
|
} = options;
|
|
@@ -249,7 +249,7 @@ var QueryMapper = class {
|
|
|
249
249
|
nodes: {
|
|
250
250
|
filter: { and: baseFilters }
|
|
251
251
|
},
|
|
252
|
-
sort: this.sortMapper.map(
|
|
252
|
+
sort: this.sortMapper.map(sort, rootView),
|
|
253
253
|
limit
|
|
254
254
|
}
|
|
255
255
|
};
|
|
@@ -680,7 +680,7 @@ function buildDependenciesQuery(previousQuery, nodesParent, nodesChildren, leafC
|
|
|
680
680
|
}
|
|
681
681
|
|
|
682
682
|
// src/client.ts
|
|
683
|
-
var
|
|
683
|
+
var IndustrialModelClient = class {
|
|
684
684
|
constructor(client, dataModelId) {
|
|
685
685
|
const cognite = createCogniteAdapter(client);
|
|
686
686
|
this.cognite = cognite;
|
|
@@ -688,7 +688,10 @@ var IndustrialModel = class {
|
|
|
688
688
|
this.queryMapper = new QueryMapper(viewMapper);
|
|
689
689
|
this.resultMapper = new QueryResultMapper(viewMapper);
|
|
690
690
|
}
|
|
691
|
-
|
|
691
|
+
query() {
|
|
692
|
+
return (options) => this.queryInternal(options);
|
|
693
|
+
}
|
|
694
|
+
async queryInternal(options) {
|
|
692
695
|
const { viewExternalId, limit = DEFAULT_LIMIT } = options;
|
|
693
696
|
const allPages = options.limit === -1;
|
|
694
697
|
const cogniteQuery = await this.queryMapper.map(options);
|
|
@@ -706,9 +709,9 @@ var IndustrialModel = class {
|
|
|
706
709
|
);
|
|
707
710
|
const pageResult = await this.resultMapper.mapNodes(viewExternalId, queryResultData);
|
|
708
711
|
const nextCursor = queryResult.nextCursor[viewExternalId] ?? null;
|
|
709
|
-
data.push(...pageResult);
|
|
710
712
|
const isLastPage = pageResult.length < limit || !nextCursor;
|
|
711
713
|
const resolvedCursor = isLastPage ? null : nextCursor;
|
|
714
|
+
data.push(...pageResult);
|
|
712
715
|
if (!isLastPage && resolvedCursor !== null) {
|
|
713
716
|
cogniteQuery.cursors = { [viewExternalId]: resolvedCursor };
|
|
714
717
|
}
|
|
@@ -735,6 +738,6 @@ var IndustrialModel = class {
|
|
|
735
738
|
}
|
|
736
739
|
};
|
|
737
740
|
|
|
738
|
-
exports.
|
|
741
|
+
exports.IndustrialModelClient = IndustrialModelClient;
|
|
739
742
|
//# sourceMappingURL=index.cjs.map
|
|
740
743
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cognite/adapter.ts","../src/constants.ts","../src/mappers/utils.ts","../src/mappers/filter-mapper.ts","../src/mappers/sort-mapper.ts","../src/mappers/query-mapper.ts","../src/mappers/result-mapper.ts","../src/mappers/view-mapper.ts","../src/utils/query.ts","../src/client.ts"],"names":[],"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 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","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;\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","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 { PropertySort, ViewDefinition } from \"../cognite\";\nimport type { SortDirection } from \"../types\";\nimport { getPropertyRef, isDirectRelationWithSource } from \"./utils\";\n\nexport class SortMapper {\n map(sortClauses: Record<string, SortDirection>, rootView: ViewDefinition): PropertySort[] {\n return Object.entries(sortClauses).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 { 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\n constructor(private readonly viewMapper: ViewMapper) {\n this.filterMapper = new FilterMapper(viewMapper);\n this.sortMapper = new SortMapper();\n }\n\n async map<T, TRelation = never>(\n options: QueryOptions<T, TRelation>,\n ): Promise<InstancesQueryRequest> {\n const {\n viewExternalId,\n select = { _all: true },\n filters,\n sortClauses = {},\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 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(sortClauses, 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<T, TRelation = never>(\n key: string,\n view: ViewDefinition,\n select: QuerySelect<T, TRelation>,\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 | QuerySelect<T> | 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 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 { QueryMapper } from \"./mappers/query-mapper\";\nimport { QueryResultMapper } from \"./mappers/result-mapper\";\nimport { ViewMapper } from \"./mappers/view-mapper\";\nimport type { DataModelId, QueryOptions, QueryResult, QueryResultMap } from \"./types\";\nimport {\n appendNodesAndEdges,\n getQueryForDependenciesPagination,\n mapNodesAndEdges,\n} from \"./utils/query\";\n\nexport class IndustrialModel {\n private readonly cognite: CognitePort;\n private readonly queryMapper: QueryMapper;\n private readonly resultMapper: QueryResultMapper;\n\n constructor(client: CogniteClient, dataModelId: DataModelId) {\n const cognite = createCogniteAdapter(client);\n this.cognite = cognite;\n const viewMapper = new ViewMapper(cognite, dataModelId);\n this.queryMapper = new QueryMapper(viewMapper);\n this.resultMapper = new QueryResultMapper(viewMapper);\n }\n\n async query<T, TRelation = never>(options: QueryOptions<T, TRelation>): Promise<QueryResult> {\n const { viewExternalId, limit = DEFAULT_LIMIT } = options;\n const allPages = options.limit === -1;\n const cogniteQuery = await this.queryMapper.map(options);\n const data: Record<string, unknown>[] = [];\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 pageResult = await this.resultMapper.mapNodes(viewExternalId, queryResultData);\n const nextCursor = queryResult.nextCursor[viewExternalId] ?? null;\n data.push(...pageResult);\n\n const isLastPage = pageResult.length < limit || !nextCursor;\n const resolvedCursor = isLastPage ? null : nextCursor;\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/mappers/filter-mapper.ts","../src/mappers/sort-mapper.ts","../src/mappers/query-mapper.ts","../src/mappers/result-mapper.ts","../src/mappers/view-mapper.ts","../src/utils/query.ts","../src/client.ts"],"names":[],"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 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","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;\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","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 { 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 { 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\n constructor(private readonly viewMapper: ViewMapper) {\n this.filterMapper = new FilterMapper(viewMapper);\n this.sortMapper = new SortMapper();\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 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 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 { QueryMapper } from \"./mappers/query-mapper\";\nimport { QueryResultMapper } from \"./mappers/result-mapper\";\nimport { ViewMapper } from \"./mappers/view-mapper\";\nimport type {\n DataModelId,\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 resultMapper: QueryResultMapper;\n\n constructor(client: CogniteClient, dataModelId: DataModelId) {\n const cognite = createCogniteAdapter(client);\n this.cognite = cognite;\n const viewMapper = new ViewMapper(cognite, dataModelId);\n this.queryMapper = new QueryMapper(viewMapper);\n this.resultMapper = new QueryResultMapper(viewMapper);\n }\n\n query<TModel>() {\n return <const TSelect extends QuerySelect<TModel> | undefined = undefined>(\n options: QueryOptions<TModel, TSelect>,\n ): Promise<QueryResult<QueryResultItem<TModel, TSelect>>> => this.queryInternal(options);\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 pageResult = await this.resultMapper.mapNodes(viewExternalId, queryResultData);\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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { CogniteClient } from '@cognite/sdk';
|
|
2
2
|
|
|
3
|
+
interface NodeDefinition {
|
|
4
|
+
instanceType: "node";
|
|
5
|
+
space: string;
|
|
6
|
+
externalId: string;
|
|
7
|
+
properties?: Record<string, Record<string, Record<string, unknown>>>;
|
|
8
|
+
createdTime?: number;
|
|
9
|
+
deletedTime?: number;
|
|
10
|
+
lastUpdatedTime?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
3
13
|
type NodeId = {
|
|
4
14
|
externalId: string;
|
|
5
15
|
space: string;
|
|
@@ -8,29 +18,64 @@ type DataModelId = NodeId & {
|
|
|
8
18
|
version: string;
|
|
9
19
|
};
|
|
10
20
|
type SortDirection = "ascending" | "descending";
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
type Simplify<T> = {
|
|
22
|
+
[K in keyof T]: T[K];
|
|
23
|
+
} & {};
|
|
24
|
+
type Merge<A, B> = Simplify<Omit<A, keyof B> & B>;
|
|
25
|
+
type NonNull<T> = Exclude<T, null | undefined>;
|
|
26
|
+
type ArrayItem<T> = T extends readonly (infer U)[] ? U : never;
|
|
27
|
+
type QueryDepth = 0 | 1 | 2 | 3;
|
|
28
|
+
type PrevDepth = {
|
|
29
|
+
0: 0;
|
|
30
|
+
1: 0;
|
|
31
|
+
2: 1;
|
|
32
|
+
3: 2;
|
|
23
33
|
};
|
|
24
|
-
|
|
34
|
+
declare const MODEL_RELATIONS: unique symbol;
|
|
35
|
+
type IndustrialModel<TProps, TRelations = {}> = Simplify<TProps & {
|
|
36
|
+
readonly [MODEL_RELATIONS]?: TRelations;
|
|
37
|
+
}>;
|
|
38
|
+
type ModelProps<TModel> = Simplify<Omit<TModel, typeof MODEL_RELATIONS>>;
|
|
39
|
+
type ModelRelations<TModel> = TModel extends {
|
|
40
|
+
readonly [MODEL_RELATIONS]?: infer TRelations;
|
|
41
|
+
} ? NonNull<TRelations> : never;
|
|
42
|
+
type RelationKeys<TModel> = [ModelRelations<TModel>] extends [never] ? never : keyof ModelRelations<TModel>;
|
|
43
|
+
type IsOptionalKey<T, K extends PropertyKey> = K extends keyof T ? {} extends Pick<T, K> ? true : false : false;
|
|
44
|
+
type UnwrapRelationTarget<T> = NonNull<T> extends readonly unknown[] ? ArrayItem<NonNull<T>> : NonNull<T>;
|
|
45
|
+
type BaseSelectFor<T, TDepth extends QueryDepth = 3> = [NonNull<T>] extends [NodeId] ? boolean : NonNull<T> extends readonly unknown[] ? [ArrayItem<NonNull<T>>] extends [NodeId] ? boolean : TDepth extends 0 ? boolean : NonNull<ArrayItem<NonNull<T>>> extends object ? boolean | QuerySelect<NonNull<ArrayItem<NonNull<T>>>, PrevDepth[TDepth]> : boolean : TDepth extends 0 ? boolean : NonNull<T> extends object ? boolean | QuerySelect<NonNull<T>, PrevDepth[TDepth]> : boolean;
|
|
46
|
+
type RelationSelectFor<T, TDepth extends QueryDepth = 3> = TDepth extends 0 ? never : QuerySelect<UnwrapRelationTarget<T>, PrevDepth[TDepth]>;
|
|
47
|
+
type QuerySelectValue<TModel, K extends PropertyKey, TDepth extends QueryDepth> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? boolean | RelationSelectFor<ModelRelations<TModel>[K], TDepth> : RelationSelectFor<ModelRelations<TModel>[K], TDepth> : K extends keyof ModelProps<TModel> ? BaseSelectFor<ModelProps<TModel>[K], TDepth> : never;
|
|
48
|
+
type QuerySelect<TModel, TDepth extends QueryDepth = 3> = {
|
|
49
|
+
_all?: true;
|
|
50
|
+
} & {
|
|
51
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QuerySelectValue<TModel, K, TDepth>;
|
|
52
|
+
};
|
|
53
|
+
type SortInput<TModel> = {
|
|
54
|
+
[K in keyof ModelProps<TModel> as NonNull<ModelProps<TModel>[K]> extends string | number | boolean | Date | NodeId ? K : never]?: SortDirection;
|
|
55
|
+
};
|
|
56
|
+
interface QueryOptions<TModel, TSelect extends QuerySelect<TModel> | undefined = QuerySelect<TModel> | undefined> {
|
|
25
57
|
viewExternalId: string;
|
|
26
|
-
select?:
|
|
27
|
-
filters?: WhereInput<
|
|
28
|
-
|
|
58
|
+
select?: TSelect;
|
|
59
|
+
filters?: WhereInput<TModel>;
|
|
60
|
+
sort?: SortInput<TModel>;
|
|
29
61
|
limit?: number;
|
|
30
62
|
cursor?: string | null;
|
|
31
63
|
}
|
|
32
|
-
|
|
33
|
-
|
|
64
|
+
type QueryResultMetadata = Pick<NodeDefinition, "space" | "externalId" | "createdTime" | "deletedTime" | "lastUpdatedTime">;
|
|
65
|
+
type ResultShapeForKey<TModel, K extends PropertyKey> = K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : never;
|
|
66
|
+
type ResultEntityForKey<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never;
|
|
67
|
+
type WrapResultValue<TShape, TValue> = [NonNull<TShape>] extends [readonly unknown[]] ? TValue[] : TValue;
|
|
68
|
+
type SelectedValue<TModel, K extends PropertyKey, TValue, TDepth extends QueryDepth> = TValue extends true ? K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never : TDepth extends 0 ? never : TValue extends object ? WrapResultValue<ResultShapeForKey<TModel, K>, QueryResultItem<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, TValue & QuerySelect<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, PrevDepth[TDepth]>, PrevDepth[TDepth]>> : never;
|
|
69
|
+
type ExplicitSelectionResult<TModel, TSelect, TDepth extends QueryDepth> = Simplify<{
|
|
70
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? never : IsOptionalKey<ModelRelations<TModel>, K> extends true ? never : K]-?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
71
|
+
} & {
|
|
72
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? K : IsOptionalKey<ModelRelations<TModel>, K> extends true ? K : never]?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
73
|
+
}>;
|
|
74
|
+
type QueryResultItem<TModel, TSelect extends QuerySelect<TModel> | undefined = undefined, TDepth extends QueryDepth = 3> = [TSelect] extends [undefined] ? Merge<QueryResultMetadata, ModelProps<TModel>> : Merge<TSelect extends {
|
|
75
|
+
_all: true;
|
|
76
|
+
} ? Merge<QueryResultMetadata, ModelProps<TModel>> : QueryResultMetadata, ExplicitSelectionResult<TModel, TSelect, TDepth>>;
|
|
77
|
+
interface QueryResult<TItem = Record<string, unknown>> {
|
|
78
|
+
items: TItem[];
|
|
34
79
|
cursor: string | null;
|
|
35
80
|
}
|
|
36
81
|
type StringFilters = {
|
|
@@ -71,26 +116,25 @@ type ListFilters<T> = {
|
|
|
71
116
|
containsAll?: T[];
|
|
72
117
|
exists?: boolean;
|
|
73
118
|
};
|
|
74
|
-
type
|
|
75
|
-
type
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
[K in
|
|
83
|
-
}
|
|
84
|
-
[K in keyof TRelation]?: FilterFor<TRelation[K], TRelation>;
|
|
85
|
-
});
|
|
119
|
+
type BaseFilterFor<T> = T extends NodeId ? NodeIdFilters : T extends string ? StringFilters : T extends number ? NumberFilters : T extends boolean ? BooleanFilters : T extends Date ? DateFilters : T extends Array<infer U> ? ListFilters<U> : T extends object ? NodeIdFilters | WhereInput<T> : never;
|
|
120
|
+
type RelationFilterFor<T> = UnwrapRelationTarget<T> extends object ? WhereInput<UnwrapRelationTarget<T>> : never;
|
|
121
|
+
type QueryFilterValue<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> | RelationFilterFor<ModelRelations<TModel>[K]> : RelationFilterFor<ModelRelations<TModel>[K]> : K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> : never;
|
|
122
|
+
type WhereInput<TModel> = {
|
|
123
|
+
AND?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
124
|
+
OR?: WhereInput<TModel>[];
|
|
125
|
+
NOT?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
126
|
+
} & {
|
|
127
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QueryFilterValue<TModel, K>;
|
|
128
|
+
};
|
|
86
129
|
|
|
87
|
-
declare class
|
|
130
|
+
declare class IndustrialModelClient {
|
|
88
131
|
private readonly cognite;
|
|
89
132
|
private readonly queryMapper;
|
|
90
133
|
private readonly resultMapper;
|
|
91
134
|
constructor(client: CogniteClient, dataModelId: DataModelId);
|
|
92
|
-
query<
|
|
135
|
+
query<TModel>(): <const TSelect extends QuerySelect<TModel> | undefined = undefined>(options: QueryOptions<TModel, TSelect>) => Promise<QueryResult<QueryResultItem<TModel, TSelect>>>;
|
|
136
|
+
private queryInternal;
|
|
93
137
|
private queryDependenciesPages;
|
|
94
138
|
}
|
|
95
139
|
|
|
96
|
-
export { type DataModelId, IndustrialModel, type NodeId, type QueryOptions, type QueryResult };
|
|
140
|
+
export { type DataModelId, type IndustrialModel, IndustrialModelClient, type ModelProps, type ModelRelations, type NodeId, type QueryOptions, type QueryResult, type QueryResultItem, type QueryResultMetadata, type QuerySelect };
|