@bldrs-ai/conway 1.372.1179 → 1.373.1180

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.
Files changed (31) hide show
  1. package/compiled/examples/browser-bundled.cjs +1 -1
  2. package/compiled/examples/cli-bundled.cjs +1 -1
  3. package/compiled/examples/cli-step-bundled.cjs +1 -1
  4. package/compiled/examples/validator-bundled.cjs +1 -1
  5. package/compiled/src/compat/web-ifc/ap214_properties.d.ts +2 -2
  6. package/compiled/src/compat/web-ifc/ap214_properties.d.ts.map +1 -1
  7. package/compiled/src/compat/web-ifc/ap214_properties.js +6 -1
  8. package/compiled/src/compat/web-ifc/ifc_api.d.ts +11 -0
  9. package/compiled/src/compat/web-ifc/ifc_api.d.ts.map +1 -1
  10. package/compiled/src/compat/web-ifc/ifc_api.js +18 -0
  11. package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts +5 -0
  12. package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts.map +1 -1
  13. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts +6 -0
  14. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts.map +1 -1
  15. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.js +8 -0
  16. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts +27 -0
  17. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts.map +1 -1
  18. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.js +48 -0
  19. package/compiled/src/compat/web-ifc/ifc_properties.d.ts +2 -2
  20. package/compiled/src/compat/web-ifc/ifc_properties.d.ts.map +1 -1
  21. package/compiled/src/compat/web-ifc/ifc_properties.js +9 -1
  22. package/compiled/src/compat/web-ifc/ifc_properties_names_mode.test.d.ts +2 -0
  23. package/compiled/src/compat/web-ifc/ifc_properties_names_mode.test.d.ts.map +1 -0
  24. package/compiled/src/compat/web-ifc/ifc_properties_names_mode.test.js +97 -0
  25. package/compiled/src/compat/web-ifc/properties.d.ts +2 -1
  26. package/compiled/src/compat/web-ifc/properties.d.ts.map +1 -1
  27. package/compiled/src/compat/web-ifc/properties_passthrough.d.ts +22 -1
  28. package/compiled/src/compat/web-ifc/properties_passthrough.d.ts.map +1 -1
  29. package/compiled/src/version/version.js +1 -1
  30. package/compiled/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +1 -1
@@ -69714,7 +69714,7 @@ IfcStepParser.Instance = new IfcStepParser();
69714
69714
  var ifc_step_parser_default = IfcStepParser;
69715
69715
 
69716
69716
  // compiled/src/version/version.js
69717
- var versionString = "Conway Web-Ifc Shim v1.372.1179";
69717
+ var versionString = "Conway Web-Ifc Shim v1.373.1180";
69718
69718
 
69719
69719
  // compiled/src/statistics/statistics.js
69720
69720
  var Statistics = class {
@@ -85955,7 +85955,7 @@ var IfcSceneBuilder = class {
85955
85955
  };
85956
85956
 
85957
85957
  // compiled/src/version/version.js
85958
- var versionString = "Conway Web-Ifc Shim v1.372.1179";
85958
+ var versionString = "Conway Web-Ifc Shim v1.373.1180";
85959
85959
 
85960
85960
  // compiled/src/statistics/statistics.js
85961
85961
  var Statistics = class {
@@ -79406,7 +79406,7 @@ var ExtractResult;
79406
79406
  })(ExtractResult || (ExtractResult = {}));
79407
79407
 
79408
79408
  // compiled/src/version/version.js
79409
- var versionString = "Conway Web-Ifc Shim v1.372.1179";
79409
+ var versionString = "Conway Web-Ifc Shim v1.373.1180";
79410
79410
 
79411
79411
  // compiled/src/statistics/statistics.js
79412
79412
  var Statistics = class {
@@ -69712,7 +69712,7 @@ IfcStepParser.Instance = new IfcStepParser();
69712
69712
  var ifc_step_parser_default = IfcStepParser;
69713
69713
 
69714
69714
  // compiled/src/version/version.js
69715
- var versionString = "Conway Web-Ifc Shim v1.372.1179";
69715
+ var versionString = "Conway Web-Ifc Shim v1.373.1180";
69716
69716
 
69717
69717
  // compiled/src/statistics/statistics.js
69718
69718
  var Statistics = class {
@@ -1,5 +1,5 @@
1
1
  import { IfcApiProxyAP214 } from "./ifc_api_proxy_ap214.js";
2
- import { Node } from "./properties_passthrough.js";
2
+ import { IncludeProperties, Node } from "./properties_passthrough.js";
3
3
  /**
4
4
  * web-ifc-compatible property/spatial surface over an AP214/AP242 step model.
5
5
  *
@@ -88,7 +88,7 @@ export declare class AP214Properties {
88
88
  * @return {Promise<Node>} The root node. A single-root file returns its root
89
89
  * directly; a multi-root file is wrapped in a synthetic container root.
90
90
  */
91
- getSpatialStructure(includeProperties?: boolean): Promise<Node>;
91
+ getSpatialStructure(includeProperties?: IncludeProperties): Promise<Node>;
92
92
  /**
93
93
  * Get every element of a STEP entity type, backed by the model type index.
94
94
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ap214_properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ap214_properties.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAuG/C;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAWb,OAAO,CAAC,GAAG;IATxB,OAAO,CAAC,eAAe,CAAC,CAAwB;IAChD,OAAO,CAAC,YAAY,CAAC,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAAC,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAAC,CAAqB;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAgC;IAE1D;;OAEG;gBACkB,GAAG,EAAE,gBAAgB;IAG1C;;;;;;OAMG;IACH,UAAU,CAAE,IAAI,EAAE,MAAM,GAAI,MAAM;IAIlC;;;;;;;;;;;;;;;;;;OAkBG;IACG,iBAAiB,CAAE,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,MAAM,CAAC;IAoBzE;;;;;;;;;;;OAWG;IACG,eAAe,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAkD7E;;;;;;OAMG;IACG,iBAAiB,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAI/E;;;;;;OAMG;IACG,sBAAsB,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAIpF;;;;;;;OAOG;IACG,mBAAmB,CAAE,iBAAiB,CAAC,EAAE,OAAO,GAAI,OAAO,CAAC,IAAI,CAAC;IAuBvE;;;;;;OAMG;IACG,iBAAiB,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAmBzE;;;;;;;OAOG;YACW,aAAa;IAwB3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAQnB"}
1
+ {"version":3,"file":"ap214_properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ap214_properties.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAuGlE;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAWb,OAAO,CAAC,GAAG;IATxB,OAAO,CAAC,eAAe,CAAC,CAAwB;IAChD,OAAO,CAAC,YAAY,CAAC,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAAC,CAAqB;IAC/C,OAAO,CAAC,oBAAoB,CAAC,CAAqB;IAClD,OAAO,CAAC,iBAAiB,CAAC,CAAgC;IAE1D;;OAEG;gBACkB,GAAG,EAAE,gBAAgB;IAG1C;;;;;;OAMG;IACH,UAAU,CAAE,IAAI,EAAE,MAAM,GAAI,MAAM;IAIlC;;;;;;;;;;;;;;;;;;OAkBG;IACG,iBAAiB,CAAE,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,MAAM,CAAC;IAoBzE;;;;;;;;;;;OAWG;IACG,eAAe,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAkD7E;;;;;;OAMG;IACG,iBAAiB,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAI/E;;;;;;OAMG;IACG,sBAAsB,CAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAIpF;;;;;;;OAOG;IACG,mBAAmB,CAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAI,OAAO,CAAC,IAAI,CAAC;IAuBjF;;;;;;OAMG;IACG,iBAAiB,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAmBzE;;;;;;;OAOG;YACW,aAAa;IA4B3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAUlB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAQnB"}
@@ -217,7 +217,12 @@ export class AP214Properties {
217
217
  occurrencePath: node.occurrencePath,
218
218
  children,
219
219
  };
220
- if (includeProperties) {
220
+ if (includeProperties === "names") {
221
+ // Satisfied by the unconditional Name handle above.
222
+ }
223
+ else if (includeProperties) {
224
+ // Truthy semantics match the IFC path (web-ifc parity for untyped
225
+ // JS callers passing truthy non-booleans).
221
226
  const properties = await this.getItemProperties(node.expressID);
222
227
  spatialNode = { ...properties, ...spatialNode };
223
228
  }
@@ -132,6 +132,17 @@ export declare class IfcAPI {
132
132
  * @return {any} line data
133
133
  */
134
134
  GetLine(modelID: number, expressID: number, flatten?: boolean): string | void;
135
+ /**
136
+ * Conway extension (no web-ifc equivalent): drop the model's
137
+ * materialised entity/descriptor caches, returning that memory to the
138
+ * JS heap. Entities and attributes rematerialise transparently on the
139
+ * next property access, so callers can invoke this between UI
140
+ * interactions to keep the property working set bounded to what the
141
+ * active UI is touching.
142
+ *
143
+ * @param modelID
144
+ */
145
+ ReleaseEntityCache(modelID: number): void;
135
146
  /**
136
147
  *
137
148
  * @param modelID
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_api.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifc_api.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api.ts"],"names":[],"mappings":"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"}
@@ -154,6 +154,24 @@ export class IfcAPI {
154
154
  }
155
155
  return result.getLine(expressID, flatten);
156
156
  }
157
+ /**
158
+ * Conway extension (no web-ifc equivalent): drop the model's
159
+ * materialised entity/descriptor caches, returning that memory to the
160
+ * JS heap. Entities and attributes rematerialise transparently on the
161
+ * next property access, so callers can invoke this between UI
162
+ * interactions to keep the property working set bounded to what the
163
+ * active UI is touching.
164
+ *
165
+ * @param modelID
166
+ */
167
+ ReleaseEntityCache(modelID) {
168
+ const result = this.models.get(modelID);
169
+ if (result === void 0) {
170
+ Logger.error("[ReleaseEntityCache]: model === undefined");
171
+ return;
172
+ }
173
+ result.releaseEntityCache?.();
174
+ }
157
175
  /**
158
176
  *
159
177
  * @param modelID
@@ -13,5 +13,10 @@ export interface IfcApiModelPassthrough {
13
13
  flattenLine(line: any): void;
14
14
  getLine(expressID: number, flatten?: boolean): string | void;
15
15
  getGeometry(geometryExpressID: number): IfcGeometry;
16
+ /**
17
+ * Optional: drop the model's materialised entity/descriptor caches,
18
+ * returning that memory. Entities rematerialise on next access.
19
+ */
20
+ releaseEntityCache?(): void;
16
21
  }
17
22
  //# sourceMappingURL=ifc_api_model_passthrough.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_api_model_passthrough.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_model_passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAGhE,MAAM,WAAW,sBAAsB;IAErC,UAAU,EAAE,qBAAqB,CAAA;IAEjC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAA;IACxC,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAA;IACvF,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7D,qBAAqB,IAAI,MAAM,EAAE,CAAA;IACjC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAChD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;IAC9C,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;IAC5D,WAAW,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAA;CACpD"}
1
+ {"version":3,"file":"ifc_api_model_passthrough.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_model_passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAGhE,MAAM,WAAW,sBAAsB;IAErC,UAAU,EAAE,qBAAqB,CAAA;IAEjC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAA;IACxC,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAA;IACvF,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7D,qBAAqB,IAAI,MAAM,EAAE,CAAA;IACjC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAChD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;IAC9C,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAA;IAC5B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;IAC5D,WAAW,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW,CAAA;IAEnD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,IAAI,CAAA;CAC5B"}
@@ -39,6 +39,12 @@ export declare class IfcApiProxyAP214 implements IfcApiModelPassthrough {
39
39
  * @return {AP214StepModel} The underlying step model.
40
40
  */
41
41
  get StepModel(): AP214StepModel;
42
+ /**
43
+ * Drop this model's materialised entity/descriptor cache (and lazily
44
+ * rebuilt vtable data), returning that memory to the JS heap. Entities
45
+ * rematerialise transparently on next access.
46
+ */
47
+ releaseEntityCache(): void;
42
48
  /**
43
49
  * Contains all the logic and methods regarding properties, psets, qsets, etc.
44
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_api_proxy_ap214.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ap214.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,MAAM,EACP,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AAOrC,OAAO,cAAc,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD;GACG;AACH,qBAAa,gBAAiB,YAAW,sBAAsB;aA4CzC,OAAO,EAAE,MAAM;IAE/B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IA7C9B,EAAE,CAAC,EAAE,GAAG,CAAY;IAEpB,KAAK,EACH;QAAC,cAAc;QACb,iBAAiB;QACjB,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/C,GAAG,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI;KAAC,CAAA;IACpC,UAAU,EAAE,cAAc,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAQ;IAC/B,mBAAmB,EAAE,MAAM,CAAI;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAmD;IAGrE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAK1B;IAED;;;;OAIG;IACH,IAAW,SAAS,IAAI,cAAc,CAErC;IAED;;OAEG;IACH,UAAU,kBAA4B;IAEtC;;;;OAIG;gBAGiB,OAAO,EAAE,MAAM,EAC/B,IAAI,EAAE,UAAU,EACC,UAAU,EAAE,GAAG,EACf,QAAQ,CAAC,EAAE,cAAc,YAAA;IA6M9C;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA4BxC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,MAAM;IAM9C;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAO5C;;;;;;OAMG;IACH,WAAW,CAAC,iBAAiB,EAAE,MAAM,GAAG,WAAW;IA8BnD;;;;;;OAMG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe;IAKnD;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,CAAC,WAAW,CAAC;IAoBxC;;;;OAIG;IACH,SAAS,CAAC,UAAU,EAAE,GAAG;IAIzB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAI5B;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAkD9C;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW;IAIlC;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IA0BhD;;;;OAIG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;IA2C7B;;;;OAIG;IACH,yBAAyB,CAAC,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC;IAU7D;;;;OAIG;IACH,qBAAqB,IAAI,KAAK,CAAC,MAAM,CAAC;IAQtC;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY;IAIvD;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAIrD;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAC/E,YAAY,GAAG,WAAW;IAK5B;;;;OAIG;IACH,UAAU;IAIV;;;;OAIG;IACH,eAAe,CAAE,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI;IAuNvD;;;;;OAKG;IACH,wBAAwB,CACpB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI;IAI1C;;;;OAIG;IACH,eAAe,IAAI,MAAM,CAAC,QAAQ,CAAC;IAmRnC;;;;;OAKG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ;IAqDxC;;;;;OAKG;IACH,4BAA4B,IAAI,IAAI;CAwBrC"}
1
+ {"version":3,"file":"ifc_api_proxy_ap214.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ap214.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,14 @@ export class IfcApiProxyAP214 {
21
21
  get StepModel() {
22
22
  return this.model[0];
23
23
  }
24
+ /**
25
+ * Drop this model's materialised entity/descriptor cache (and lazily
26
+ * rebuilt vtable data), returning that memory to the JS heap. Entities
27
+ * rematerialise transparently on next access.
28
+ */
29
+ releaseEntityCache() {
30
+ this.model[0].invalidate(true);
31
+ }
24
32
  /**
25
33
  * Construct wwih a wasm module.
26
34
  *
@@ -4,6 +4,7 @@ import { IfcSceneBuilder } from "../../ifc/ifc_scene_builder.js";
4
4
  import IfcStepModel from "../../ifc/ifc_step_model.js";
5
5
  import { FlatMesh, IfcGeometry, LoaderError, Loadersettings, PlacedGeometry, RawLineData, Vector } from "./ifc_api.js";
6
6
  import { IfcApiModelPassthrough } from "./ifc_api_model_passthrough.js";
7
+ import { NodeValueHandle } from "./properties_passthrough.js";
7
8
  import * as glmatrix from "gl-matrix";
8
9
  import { IfcProperties } from "./ifc_properties.js";
9
10
  /**
@@ -79,6 +80,32 @@ export declare class IfcApiProxyIfc implements IfcApiModelPassthrough {
79
80
  * @return {any} line data
80
81
  */
81
82
  getLine(expressID: number, flatten?: boolean): any;
83
+ /**
84
+ * Light attribute read: Name / LongName / GlobalId as web-ifc value
85
+ * handles, WITHOUT materialising the entity's full flattened record.
86
+ * Reads go through the typed entity's lazy per-field getters — the
87
+ * first access tokenizes the record's field offsets into the shared
88
+ * vtable, but only these attributes' values are deserialized. Used by
89
+ * the spatial structure's `'names'` mode.
90
+ *
91
+ * @param expressID
92
+ * @return {object} `{ Name?, LongName?, GlobalId? }` string handles
93
+ * (`{type: 1, value}`), each present only when the attribute exists
94
+ * and is non-null on the entity.
95
+ */
96
+ getLineNameAttributes(expressID: number): {
97
+ Name?: NodeValueHandle;
98
+ LongName?: NodeValueHandle;
99
+ GlobalId?: NodeValueHandle;
100
+ };
101
+ /**
102
+ * Drop this model's materialised entity/descriptor cache (and lazily
103
+ * rebuilt vtable data), returning that memory to the JS heap. Entities
104
+ * and attributes rematerialise transparently on next access, so this is
105
+ * safe to call between UI interactions to keep the property working set
106
+ * bounded to what the active UI has touched.
107
+ */
108
+ releaseEntityCache(): void;
82
109
  /**
83
110
  *
84
111
  * @param modelID
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_api_proxy_ifc.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ifc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifc_api_proxy_ifc.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ifc.ts"],"names":[],"mappings":"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"}
@@ -296,6 +296,54 @@ export class IfcApiProxyIfc {
296
296
  }
297
297
  return lineData;
298
298
  }
299
+ /**
300
+ * Light attribute read: Name / LongName / GlobalId as web-ifc value
301
+ * handles, WITHOUT materialising the entity's full flattened record.
302
+ * Reads go through the typed entity's lazy per-field getters — the
303
+ * first access tokenizes the record's field offsets into the shared
304
+ * vtable, but only these attributes' values are deserialized. Used by
305
+ * the spatial structure's `'names'` mode.
306
+ *
307
+ * @param expressID
308
+ * @return {object} `{ Name?, LongName?, GlobalId? }` string handles
309
+ * (`{type: 1, value}`), each present only when the attribute exists
310
+ * and is non-null on the entity.
311
+ */
312
+ getLineNameAttributes(expressID) {
313
+ const result = {};
314
+ const entity = this.model[0].getElementByExpressID(expressID);
315
+ if (entity === void 0) {
316
+ return result;
317
+ }
318
+ // web-ifc tape type 1 = string; ifclib's deref switches on this code.
319
+ const WEB_IFC_STRING_TYPE = 1;
320
+ // Absent attributes (e.g. LongName on non-spatial types) read as
321
+ // undefined and are omitted via the typeof check. The catch guards
322
+ // malformed records: field extraction throws on truncated records
323
+ // regardless of the model's nullOnErrors setting.
324
+ for (const attribute of ["Name", "LongName", "GlobalId"]) {
325
+ try {
326
+ const value = entity[attribute];
327
+ if (typeof value === "string") {
328
+ result[attribute] = { type: WEB_IFC_STRING_TYPE, value };
329
+ }
330
+ }
331
+ catch (e) {
332
+ Logger.warning(`[getLineNameAttributes]: unreadable ${attribute} for expressID: ${expressID}`);
333
+ }
334
+ }
335
+ return result;
336
+ }
337
+ /**
338
+ * Drop this model's materialised entity/descriptor cache (and lazily
339
+ * rebuilt vtable data), returning that memory to the JS heap. Entities
340
+ * and attributes rematerialise transparently on next access, so this is
341
+ * safe to call between UI interactions to keep the property working set
342
+ * bounded to what the active UI has touched.
343
+ */
344
+ releaseEntityCache() {
345
+ this.model[0].invalidate(true);
346
+ }
299
347
  /**
300
348
  *
301
349
  * @param modelID
@@ -1,5 +1,5 @@
1
1
  import { IfcApiProxyIfc } from "./ifc_api_proxy_ifc.js";
2
- import { Node, PropertiesPassthrough } from "./properties_passthrough.js";
2
+ import { IncludeProperties, Node, PropertiesPassthrough } from "./properties_passthrough.js";
3
3
  export declare class IfcProperties implements PropertiesPassthrough {
4
4
  private api;
5
5
  private types;
@@ -9,7 +9,7 @@ export declare class IfcProperties implements PropertiesPassthrough {
9
9
  getPropertySets(elementID: number, recursive?: boolean): Promise<any[]>;
10
10
  getTypeProperties(elementID: number, recursive?: boolean): Promise<any[]>;
11
11
  getMaterialsProperties(elementID: number, recursive?: boolean): Promise<any[]>;
12
- getSpatialStructure(includeProperties?: boolean): Promise<Node>;
12
+ getSpatialStructure(includeProperties?: IncludeProperties): Promise<Node>;
13
13
  getAllItemsOfType(type: number, verbose: boolean): Promise<any[]>;
14
14
  private getProperty;
15
15
  private getChunks;
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_properties.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA6CvE,qBAAa,aAAc,YAAW,qBAAqB;IAI7C,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAK;gBAEE,GAAG,EAAE,cAAc;IAGvC,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI/C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAItD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI3D,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAE,IAAI,CAAE;IAWjE,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;YAgBxC,WAAW;YASX,SAAS;IAQvB,OAAO,CAAC,MAAM,CAAC,SAAS;IASxB,OAAO,CAAC,MAAM,CAAC,aAAa;YAQd,cAAc;YAKd,WAAW;IAoBzB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,WAAW;YAKL,oBAAoB;IAOlC,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;YASJ,wBAAwB;IAatC,OAAO,CAAC,YAAY;YAIN,kBAAkB;CAcjC"}
1
+ {"version":3,"file":"ifc_properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_properties.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA6C1F,qBAAa,aAAc,YAAW,qBAAqB;IAI7C,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAK;gBAEE,GAAG,EAAE,cAAc;IAGvC,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI/C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAItD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI3D,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAE,IAAI,CAAE;IAc3E,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;YAgBxC,WAAW;YASX,SAAS;IAQvB,OAAO,CAAC,MAAM,CAAC,SAAS;IASxB,OAAO,CAAC,MAAM,CAAC,aAAa;YAQd,cAAc;YAKd,WAAW;IAwBzB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,WAAW;YAKL,oBAAoB;IAOlC,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,UAAU;YASJ,wBAAwB;IAatC,OAAO,CAAC,YAAY;YAIN,kBAAkB;CAcjC"}
@@ -64,6 +64,9 @@ export class IfcProperties {
64
64
  const allLines = await this.api.getLineIDsWithType(IFCPROJECT);
65
65
  const projectID = allLines.get(0);
66
66
  const project = IfcProperties.newIfcProject(projectID);
67
+ if (includeProperties === "names") {
68
+ Object.assign(project, this.api.getLineNameAttributes(projectID));
69
+ }
67
70
  await this.getSpatialNode(project, chunks, includeProperties);
68
71
  this.cleanupTypes();
69
72
  return project;
@@ -127,7 +130,12 @@ export class IfcProperties {
127
130
  for (let i = 0; i < children.length; i++) {
128
131
  const child = children[i];
129
132
  let node = this.newNode(child);
130
- if (includeProperties) {
133
+ if (includeProperties === "names") {
134
+ // Light mode: Name/LongName/GlobalId handles only — decodes just
135
+ // those vtable slots instead of flattening the whole record.
136
+ Object.assign(node, this.api.getLineNameAttributes(node.expressID));
137
+ }
138
+ else if (includeProperties) {
131
139
  const properties = await this.getItemProperties(node.expressID);
132
140
  node = { ...properties, ...node };
133
141
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ifc_properties_names_mode.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ifc_properties_names_mode.test.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_properties_names_mode.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ // Tests for the spatial structure's `'names'` mode and the
2
+ // ReleaseEntityCache extension.
3
+ //
4
+ // `'names'` returns nodes carrying only Name/LongName/GlobalId value
5
+ // handles (read via the typed entities' lazy per-field getters), where
6
+ // `true` spreads each node's full flattened attribute record — the
7
+ // web-ifc-era eager visit Share is moving off of. Parity requirement:
8
+ // `true`-mode output is unchanged by the feature, and `'names'` nodes
9
+ // agree with `true` nodes on the attributes they do carry.
10
+ import * as fs from "fs";
11
+ import { beforeAll, describe, expect, test } from "@jest/globals";
12
+ import { IfcAPI } from "./ifc_api.js";
13
+ const SETTINGS = { COORDINATE_TO_ORIGIN: true, USE_FAST_BOOLS: true };
14
+ let api;
15
+ let modelID;
16
+ beforeAll(async () => {
17
+ api = new IfcAPI();
18
+ await api.Init();
19
+ const buffer = new Uint8Array(fs.readFileSync("data/index.ifc"));
20
+ modelID = api.OpenModel(buffer, SETTINGS);
21
+ }, 120000);
22
+ /** Flatten a spatial tree into a node list, depth first. */
23
+ function collect(root) {
24
+ const out = [];
25
+ const stack = [root];
26
+ while (stack.length > 0) {
27
+ const node = stack.pop();
28
+ out.push(node);
29
+ stack.push(...(node.children ?? []));
30
+ }
31
+ return out;
32
+ }
33
+ describe("getSpatialStructure names mode", () => {
34
+ test("names mode returns name handles without full records", async () => {
35
+ const tree = await api.properties.getSpatialStructure(modelID, "names");
36
+ if (tree === undefined) {
37
+ throw new Error("getSpatialStructure returned undefined");
38
+ }
39
+ const nodes = collect(tree);
40
+ expect(nodes.length).toBeGreaterThan(1);
41
+ // At least one node carries a Name handle in web-ifc shape.
42
+ const named = nodes.filter((n) => n.Name !== undefined);
43
+ expect(named.length).toBeGreaterThan(0);
44
+ for (const node of named) {
45
+ expect(node.Name).toEqual({ type: 1, value: expect.any(String) });
46
+ }
47
+ // Non-project nodes are products with GlobalIds.
48
+ const withGlobalId = nodes.filter((n) => n.GlobalId !== undefined);
49
+ expect(withGlobalId.length).toBeGreaterThan(0);
50
+ // Light means light: no node carries full-record fields that only the
51
+ // flattened `true` mode spreads in (e.g. OwnerHistory / Description).
52
+ for (const node of nodes) {
53
+ expect(node.OwnerHistory).toBeUndefined();
54
+ expect(node.Description).toBeUndefined();
55
+ }
56
+ }, 120000);
57
+ test("names mode agrees with true mode where they overlap", async () => {
58
+ const namesTree = await api.properties.getSpatialStructure(modelID, "names");
59
+ const fullTree = await api.properties.getSpatialStructure(modelID, true);
60
+ if (namesTree === undefined || fullTree === undefined) {
61
+ throw new Error("getSpatialStructure returned undefined");
62
+ }
63
+ const namesByID = new Map(collect(namesTree).map((n) => [n.expressID, n]));
64
+ const fullNodes = collect(fullTree);
65
+ // Same tree shape.
66
+ expect(namesByID.size).toBe(fullNodes.length);
67
+ // Full mode still carries full records (parity with the old behavior)...
68
+ const fullWithOwnerHistory = fullNodes.filter((n) => n.OwnerHistory !== undefined);
69
+ expect(fullWithOwnerHistory.length).toBeGreaterThan(0);
70
+ // ...and wherever full mode has a Name value, names mode has the same one.
71
+ for (const fullNode of fullNodes) {
72
+ const fullName = fullNode.Name;
73
+ if (fullName === null || fullName === undefined) {
74
+ continue;
75
+ }
76
+ const namesNode = namesByID.get(fullNode.expressID);
77
+ expect(namesNode.Name?.value).toBe(fullName.value);
78
+ }
79
+ }, 120000);
80
+ test("ReleaseEntityCache frees and property access rematerialises", async () => {
81
+ const before = await api.properties.getItemProperties(modelID, await rootID());
82
+ api.ReleaseEntityCache(modelID);
83
+ const after = await api.properties.getItemProperties(modelID, await rootID());
84
+ expect(after).toEqual(before);
85
+ // The spatial structure still resolves post-release too.
86
+ const tree = await api.properties.getSpatialStructure(modelID, "names");
87
+ expect(tree?.children.length).toBeGreaterThan(0);
88
+ }, 120000);
89
+ });
90
+ /** Get the IfcProject root express ID. */
91
+ async function rootID() {
92
+ const tree = await api.properties.getSpatialStructure(modelID);
93
+ if (tree === undefined) {
94
+ throw new Error("getSpatialStructure returned undefined");
95
+ }
96
+ return tree.expressID;
97
+ }
@@ -1,4 +1,5 @@
1
1
  import { IfcAPI } from "./ifc_api.js";
2
+ import { IncludeProperties } from "./properties_passthrough.js";
2
3
  export declare class Properties {
3
4
  private api;
4
5
  private types;
@@ -8,7 +9,7 @@ export declare class Properties {
8
9
  getPropertySets(modelID: number, elementID: number, recursive?: boolean): Promise<any[] | undefined>;
9
10
  getTypeProperties(modelID: number, elementID: number, recursive?: boolean): Promise<any[] | undefined>;
10
11
  getMaterialsProperties(modelID: number, elementID: number, recursive?: boolean): Promise<any[] | undefined>;
11
- getSpatialStructure(modelID: number, includeProperties?: boolean): Promise<import("./properties_passthrough.js").Node | undefined>;
12
+ getSpatialStructure(modelID: number, includeProperties?: IncludeProperties): Promise<import("./properties_passthrough.js").Node | undefined>;
12
13
  getAllItemsOfType(modelID: number, type: number, verbose: boolean): Promise<any[] | undefined>;
13
14
  }
14
15
  //# sourceMappingURL=properties.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/properties.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACP,MAAM,WAAW,CAAA;AAIlB,qBAAa,UAAU;IAIT,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAK;gBAEE,GAAG,EAAE,MAAM;IAG/B,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIhE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIrE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIvE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI5E,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAKhE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIxE"}
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/properties.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EACP,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAG5D,qBAAa,UAAU;IAIT,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAK;gBAEE,GAAG,EAAE,MAAM;IAG/B,UAAU,CAAC,IAAI,EAAE,MAAM;IAIjB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIhE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIrE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAIvE,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;IAI5E,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAK1E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIxE"}
@@ -1,15 +1,36 @@
1
+ /**
2
+ * A web-ifc tape value handle — `{ type: 1, value: 'str' }` for strings.
3
+ * Consumers (e.g. `@bldrs-ai/ifclib`'s `deref`) switch on the tape type
4
+ * code, so bare `{ value }` objects are not interchangeable with these.
5
+ */
6
+ export interface NodeValueHandle {
7
+ type: number;
8
+ value: string | number;
9
+ }
1
10
  export interface Node {
2
11
  expressID: number;
3
12
  type: string;
4
13
  children: Node[];
14
+ Name?: NodeValueHandle;
15
+ LongName?: NodeValueHandle;
16
+ GlobalId?: NodeValueHandle;
5
17
  }
18
+ /**
19
+ * Spatial-structure property inclusion mode:
20
+ * - `false`/`undefined` — bare nodes (expressID/type/children).
21
+ * - `'names'` — bare nodes plus Name/LongName/GlobalId value handles,
22
+ * read without materialising each node's full attribute record.
23
+ * - `true` — full flattened attribute record spread into each node
24
+ * (web-ifc parity behavior).
25
+ */
26
+ export type IncludeProperties = boolean | 'names';
6
27
  export interface PropertiesPassthrough {
7
28
  getIfcType(type: number): string | undefined;
8
29
  getItemProperties(id: number, recursive?: boolean): Promise<any>;
9
30
  getPropertySets(elementID: number, recursive?: boolean): Promise<any[]>;
10
31
  getTypeProperties(elementID: number, recursive?: boolean): Promise<any[]>;
11
32
  getMaterialsProperties(elementID: number, recursive?: boolean): Promise<any[]>;
12
- getSpatialStructure(includeProperties?: boolean): Promise<Node>;
33
+ getSpatialStructure(includeProperties?: IncludeProperties): Promise<Node>;
13
34
  getAllItemsOfType(type: number, verbose: boolean): Promise<any[]>;
14
35
  }
15
36
  //# sourceMappingURL=properties_passthrough.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"properties_passthrough.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/properties_passthrough.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,IAAI,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IAEpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAE5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,CAAE,CAAA;IAEnE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAE1E,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAE5E,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAEhF,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAE,IAAI,CAAE,CAAA;IAEjE,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;CACpE"}
1
+ {"version":3,"file":"properties_passthrough.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/properties_passthrough.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,IAAI,EAAE,CAAA;IAIhB,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAA;AAEjD,MAAM,WAAW,qBAAqB;IAEpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAE5C,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,CAAE,CAAA;IAEnE,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAE1E,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAI,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAE5E,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;IAEhF,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAE,IAAI,CAAE,CAAA;IAE3E,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,GAAG,EAAE,CAAE,CAAA;CACpE"}
@@ -5,5 +5,5 @@
5
5
  // only the first segment (major) is meaningful and is the one CI carries forward.
6
6
  // Must stay in `vN.N.N` shape: the CI stamp regex, scripts/updateVersion.mjs, and
7
7
  // statistics.ts all match `v\d+\.\d+\.\d+`.
8
- const versionString = 'Conway Web-Ifc Shim v1.372.1179';
8
+ const versionString = 'Conway Web-Ifc Shim v1.373.1180';
9
9
  export { versionString };