industrial-model 0.11.2 → 0.11.3

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/dist/index.cjs CHANGED
@@ -19,6 +19,11 @@ var CogniteSdkAdapter = class {
19
19
  }))
20
20
  };
21
21
  }
22
+ async retrieveViews(ids) {
23
+ const cleanIds = ids.map(({ space, externalId, version }) => ({ space, externalId, version }));
24
+ const response = await this.client.views.retrieve(cleanIds);
25
+ return { items: response.items };
26
+ }
22
27
  async queryInstances(request) {
23
28
  const response = await this.client.instances.query(
24
29
  request
@@ -2035,9 +2040,44 @@ var ViewMapper = class {
2035
2040
  for (const view of dm.views ?? []) {
2036
2041
  views.set(view.externalId, view);
2037
2042
  }
2043
+ await this.loadDependencyViews(views);
2038
2044
  return views;
2039
2045
  }
2046
+ async loadDependencyViews(views) {
2047
+ const pending = /* @__PURE__ */ new Map();
2048
+ for (const view of views.values()) {
2049
+ for (const property of Object.values(view.properties)) {
2050
+ for (const ref of collectPropertyRefs(property)) {
2051
+ if (!views.has(ref.externalId) && !pending.has(ref.externalId)) {
2052
+ pending.set(ref.externalId, ref);
2053
+ }
2054
+ }
2055
+ }
2056
+ }
2057
+ if (pending.size === 0) return;
2058
+ const sizeBefore = views.size;
2059
+ const fetched = await this.cognite.retrieveViews(Array.from(pending.values()));
2060
+ for (const view of fetched.items) {
2061
+ views.set(view.externalId, view);
2062
+ }
2063
+ if (views.size > sizeBefore) {
2064
+ await this.loadDependencyViews(views);
2065
+ }
2066
+ }
2040
2067
  };
2068
+ function collectPropertyRefs(property) {
2069
+ if (isViewPropertyDefinition(property)) {
2070
+ const source = getDirectRelationSource(property);
2071
+ return source ? [source] : [];
2072
+ }
2073
+ if (isReverseDirectRelation(property)) {
2074
+ return [property.source, property.through.source];
2075
+ }
2076
+ if (isEdgeConnection(property)) {
2077
+ return [property.source];
2078
+ }
2079
+ return [];
2080
+ }
2041
2081
 
2042
2082
  // src/client.ts
2043
2083
  var APPLY_ITEM_LIMIT = 1e3;