@bldrs-ai/conway 1.427.1287 → 1.429.1291

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 (27) 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 +15 -1
  4. package/compiled/examples/validator-bundled.cjs +1 -1
  5. package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts +8 -0
  6. package/compiled/src/AP214E3_2010/ap214_geometry_extraction.d.ts.map +1 -1
  7. package/compiled/src/AP214E3_2010/ap214_geometry_extraction.js +14 -0
  8. package/compiled/src/compat/web-ifc/ap214_streamed_open.test.js +40 -0
  9. package/compiled/src/compat/web-ifc/ifc_api.d.ts +17 -0
  10. package/compiled/src/compat/web-ifc/ifc_api.d.ts.map +1 -1
  11. package/compiled/src/compat/web-ifc/ifc_api.js +23 -0
  12. package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.js +36 -0
  13. package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts +3 -0
  14. package/compiled/src/compat/web-ifc/ifc_api_model_passthrough.d.ts.map +1 -1
  15. package/compiled/src/compat/web-ifc/ifc_api_preview_channel.test.js +2 -2
  16. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts +13 -0
  17. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.d.ts.map +1 -1
  18. package/compiled/src/compat/web-ifc/ifc_api_proxy_ap214.js +70 -1
  19. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts +18 -0
  20. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts.map +1 -1
  21. package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.js +60 -2
  22. package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts +117 -38
  23. package/compiled/src/compat/web-ifc/streamed_preview_channel.d.ts.map +1 -1
  24. package/compiled/src/compat/web-ifc/streamed_preview_channel.js +224 -105
  25. package/compiled/src/version/version.js +1 -1
  26. package/compiled/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +1 -1
@@ -11,7 +11,7 @@ import ParsingBuffer from "../../parsing/parsing_buffer.js";
11
11
  import { BufferByteSource } from "../../step/parsing/byte_source.js";
12
12
  import { buildIndexStreamingAsync, } from "../../step/parsing/streaming_index_builder.js";
13
13
  import { ColumnarIndexSink } from "../../step/parsing/columnar_index.js";
14
- import { StreamedPreviewChannel } from "./streamed_preview_channel.js";
14
+ import { ifcPreviewAdapter, StreamedPreviewChannel, } from "./streamed_preview_channel.js";
15
15
  import { ExtractResult } from "../../index.js";
16
16
  import { IfcGeometryExtraction } from "../../ifc/ifc_geometry_extraction.js";
17
17
  import { ParseResult } from "../../index.js";
@@ -69,6 +69,9 @@ export class IfcApiProxyIfc {
69
69
  * Contains all the logic and methods regarding properties, psets, qsets, etc.
70
70
  */
71
71
  this.properties = new IfcProperties(this);
72
+ /** Native geometry freed (releaseGeometry) — scene walks would touch
73
+ * freed objects, so mesh serving degrades to the accumulated maps. */
74
+ this.released_ = false;
72
75
  // The cooperative path (createAsync) parses/extracts before construction
73
76
  // so it can await mid-load; the classic OpenModel path does it here,
74
77
  // synchronously. Both share the tail below (mesh vectors, statistics).
@@ -467,7 +470,7 @@ export class IfcApiProxyIfc {
467
470
  // and snapshot prefix models between the parse's cooperative yields.
468
471
  const sink = new ColumnarIndexSink();
469
472
  const previewChannel = deferGeometry && settings?.ON_PREVIEW_MESH !== void 0 ?
470
- new StreamedPreviewChannel(data, conwaywasm, sink, settings.COORDINATE_TO_ORIGIN === true, settings.ON_PREVIEW_MESH) : void 0;
473
+ new StreamedPreviewChannel(data, conwaywasm, sink, ifcPreviewAdapter(), settings.COORDINATE_TO_ORIGIN === true, settings.ON_PREVIEW_MESH) : void 0;
471
474
  previewChannel?.start();
472
475
  let result;
473
476
  try {
@@ -998,6 +1001,46 @@ export class IfcApiProxyIfc {
998
1001
  closeModel() {
999
1002
  // Null operation.
1000
1003
  }
1004
+ /**
1005
+ * Free this model's native geometry (conway extension): every
1006
+ * canonical mesh the extraction produced plus the GetGeometry map.
1007
+ * Call AFTER the consumer has built its own scene from the meshes —
1008
+ * subsequent GetGeometry calls return an empty dummy. On a deferred
1009
+ * model whose pump has not drained, this is a no-op (releasing would
1010
+ * break the remaining extraction).
1011
+ *
1012
+ * The wasm heap never shrinks, but freed pages are reused: repeated
1013
+ * loads in one tab plateau instead of stacking whole model scenes
1014
+ * (the multi-load crash).
1015
+ *
1016
+ * @return {boolean} True when geometry was released.
1017
+ */
1018
+ releaseGeometry() {
1019
+ if (this.deferredMode_ &&
1020
+ this.demandProducts_ !== void 0 &&
1021
+ this.demandCursor_ < this.demandProducts_.length) {
1022
+ Logger.warning("[ReleaseModelGeometry]: deferred pump not drained \u2014 not releasing");
1023
+ return false;
1024
+ }
1025
+ const model = this.model[0];
1026
+ const localIDs = [];
1027
+ for (const mesh of model.geometry) {
1028
+ localIDs.push(mesh.localID);
1029
+ }
1030
+ for (const localID of localIDs) {
1031
+ try {
1032
+ model.geometry.delete(localID);
1033
+ }
1034
+ catch {
1035
+ // Never let a free break a loaded model.
1036
+ }
1037
+ }
1038
+ // The GetGeometry map holds references to the now-freed natives —
1039
+ // clear it so lookups degrade to the dummy instead of touching them.
1040
+ this.model[3].clear();
1041
+ this.released_ = true;
1042
+ return true;
1043
+ }
1001
1044
  /**
1002
1045
  * Deferred-mode batch pump (conway extension; Share demand/tiled
1003
1046
  * rendering slice A): extract the next `batchSize` products (file
@@ -1067,6 +1110,11 @@ export class IfcApiProxyIfc {
1067
1110
  * gained instances this call.
1068
1111
  */
1069
1112
  streamNewMeshes_(meshCallback) {
1113
+ // Released models: the scene's natives are freed — nothing new can
1114
+ // exist to capture, and walking would touch freed objects.
1115
+ if (this.released_) {
1116
+ return;
1117
+ }
1070
1118
  const [model, scene, meshMap, geometryMaterialTransformMap] = this.model;
1071
1119
  let coordinationMatrix = this.demandCoordination_ ?? glmatrix.mat4.create();
1072
1120
  const seenThisPass = new Map();
@@ -1198,6 +1246,16 @@ export class IfcApiProxyIfc {
1198
1246
  * @param meshCallback
1199
1247
  */
1200
1248
  streamAllMeshes(meshCallback) {
1249
+ // Released models: the natives behind the scene are freed — serve
1250
+ // the accumulated per-entity meshes instead of re-walking.
1251
+ if (this.released_ && !this.deferredMode_) {
1252
+ const [, , meshMap, , vectorFlatMesh] = this.model;
1253
+ meshMap.forEach((mesh) => {
1254
+ vectorFlatMesh.push(mesh[1]);
1255
+ meshCallback(mesh[1]);
1256
+ });
1257
+ return;
1258
+ }
1201
1259
  // Deferred models: the delta capture has already populated (or will
1202
1260
  // populate) the shared meshMap — re-running the classic walk would
1203
1261
  // push every instance a second time. Pump any remainder to
@@ -1,5 +1,4 @@
1
1
  import { ConwayGeometry } from "../../index.js";
2
- import EntityTypesIfc from "../../ifc/ifc4_gen/entity_types_ifc.gen.js";
3
2
  import { ColumnarIndexSink } from "../../step/parsing/columnar_index.js";
4
3
  import * as glmatrix from "gl-matrix";
5
4
  /**
@@ -25,38 +24,115 @@ export interface PreviewMeshPayload {
25
24
  indexData?: Uint32Array;
26
25
  }
27
26
  /**
28
- * Parse-time preview channel (demand/tiled rendering slice A2): while the
29
- * deferred streamed open is still parsing, periodically snapshot the growing
30
- * columnar index into a PREFIX model, extract a bounded number of products
31
- * through a throwaway extraction, and emit self-contained mesh payloads —
32
- * first pixels within the first seconds of a large parse instead of after
33
- * it.
27
+ * A throwaway prefix extraction built by a {@link PreviewSchemaAdapter} —
28
+ * one preview "generation" over a snapshot of the growing columnar index.
29
+ */
30
+ export interface PreviewPrefixGeneration {
31
+ /** Scene the capture walks (canonical placed-instance tuples the
32
+ * exact tuple shape is schema-specific; the capture narrows it). */
33
+ scene: {
34
+ walk(): IterableIterator<unknown>;
35
+ };
36
+ /** Total pumpable units in this prefix. */
37
+ unitCount: number;
38
+ /** Scaling factor for the capture math. */
39
+ linearScalingFactor: number;
40
+ /**
41
+ * Execute units [from, from+count) — cheap per unit, exceptions per
42
+ * unit swallowed by the adapter (mid-parse forward references).
43
+ *
44
+ * @param from First unit ordinal to execute.
45
+ * @param count Max units.
46
+ * @return {number} Units actually executed.
47
+ */
48
+ runUnits(from: number, count: number): number;
49
+ /**
50
+ * ExpressID identifying a walked geometry (payload identity / dedup).
51
+ *
52
+ * @param geometryLocalID The canonical mesh's localID.
53
+ * @return {number | undefined} The geometry's expressID.
54
+ */
55
+ geometryExpressID(geometryLocalID: number): number | undefined;
56
+ /**
57
+ * Whether the capture math recenters geometry (IFC's classic
58
+ * normalize + center re-add) or uses bare coordination x placement
59
+ * composition (AP214 — instances share one geometry buffer, issue
60
+ * #308).
61
+ */
62
+ recenter: boolean;
63
+ /**
64
+ * Free the generation's native geometry (payloads are copies, so a
65
+ * retired generation holds nothing anyone can reference). Called by
66
+ * the channel when a generation is replaced and at stop().
67
+ */
68
+ dispose(): void;
69
+ }
70
+ /**
71
+ * Builds throwaway prefix generations for one schema — the only piece of
72
+ * the preview channel that knows what a "model" or a "unit" is.
73
+ */
74
+ export interface PreviewSchemaAdapter {
75
+ /**
76
+ * Build a generation over the given prefix columns.
77
+ *
78
+ * @param data The (fully resident) source buffer.
79
+ * @param conwaywasm The shared geometry wasm wrapper.
80
+ * @param columns A prefix snapshot of the columnar index.
81
+ * @return {PreviewPrefixGeneration | undefined} The generation, or
82
+ * undefined when the prefix cannot build one yet (throw is also
83
+ * tolerated — the channel retries on a later, larger prefix).
84
+ */
85
+ buildGeneration(data: Uint8Array, conwaywasm: ConwayGeometry, columns: unknown): PreviewPrefixGeneration | undefined;
86
+ }
87
+ /**
88
+ * IFC adapter: units are IfcProducts in localID order (stable across
89
+ * prefix growth), extracted through the per-product demand seam.
90
+ *
91
+ * @return {PreviewSchemaAdapter} The adapter.
92
+ */
93
+ export declare function ifcPreviewAdapter(): PreviewSchemaAdapter;
94
+ /**
95
+ * AP214 adapter: units are assembly-tree units (see
96
+ * AP214GeometryExtraction.prepareDemandExtraction). Unit ordinals are
97
+ * only approximately stable across prefix growth (a root's child list
98
+ * can grow, shifting later ordinals) — for a preview that is
99
+ * acceptable: a shifted ordinal re-emits an instance at an identical
100
+ * placement (invisible overlap) or skips one (the durable pump renders
101
+ * it later).
34
102
  *
35
- * Preview quality, by construction: IFC relationship records
36
- * (IfcRelVoidsElement, IfcRelAssociatesMaterial, styled items) spread to the
37
- * very end of real files (measured ~92–97% depth), so a prefix extraction
38
- * can miss openings and materials. That is why these extractions are
39
- * throwaway: the durable batch pump after the parse re-extracts every
40
- * product with the full model and REPLACES the preview — final geometry
41
- * parity is untouched by this channel.
103
+ * @return {PreviewSchemaAdapter} The adapter.
104
+ */
105
+ export declare function ap214PreviewAdapter(): PreviewSchemaAdapter;
106
+ /**
107
+ * Parse-time preview channel (demand/tiled rendering slice A2): while a
108
+ * deferred streamed open is still parsing, periodically snapshot the
109
+ * growing columnar index into a PREFIX model, extract a bounded number of
110
+ * units through a throwaway extraction, and emit self-contained mesh
111
+ * payloads — first pixels within the first seconds of a large parse
112
+ * instead of after it. Schema knowledge lives in the
113
+ * {@link PreviewSchemaAdapter}; the channel owns scheduling, generations,
114
+ * watermarks, payload copies, caps and the coordination pin.
42
115
  *
43
- * Scheduling: the cooperative parse yields to the event loop via macrotasks
44
- * every ~50ms; each pump tick runs in one of those gaps under a hard time
45
- * budget, so the parse keeps the bulk of the main thread.
116
+ * Preview quality, by construction: relationship records (IFC voids,
117
+ * materials, styled items) spread to the very end of real files
118
+ * (measured ~92–97% depth), so a prefix extraction can miss
119
+ * openings and materials. That is why these extractions are throwaway:
120
+ * the durable batch pump after the parse re-extracts every unit with the
121
+ * full model and REPLACES the preview — final geometry parity is
122
+ * untouched by this channel.
46
123
  *
47
- * Product cursor: top-level localIDs are stable across snapshots (dense
48
- * parse order) and `types(IfcProduct)` iterates in localID order, so a
49
- * single ordinal cursor advances across generations without re-extracting.
50
- * Products whose extraction throws mid-parse (unparsed forward references)
51
- * are skipped — the durable pump extracts them correctly later.
124
+ * Scheduling: the cooperative parse yields to the event loop via
125
+ * macrotasks every ~50ms; each pump tick runs in one of those gaps under
126
+ * a hard time budget, so the parse keeps the bulk of the main thread.
52
127
  */
53
128
  export declare class StreamedPreviewChannel {
54
129
  private readonly data;
55
130
  private readonly conwaywasm;
56
131
  private readonly sink;
132
+ private readonly adapter;
57
133
  private readonly coordinateToOrigin;
58
134
  private readonly onMesh;
59
- private readonly maxProducts;
135
+ private readonly maxUnits;
60
136
  private readonly maxBytes;
61
137
  private readonly firstGenerationMinRecords;
62
138
  /** Coordination matrix pinned from the first captured instance, exactly
@@ -65,10 +141,11 @@ export declare class StreamedPreviewChannel {
65
141
  coordinationMatrix?: glmatrix.mat4;
66
142
  private stopped_;
67
143
  private timer_?;
68
- private emittedProducts_;
144
+ private emittedUnits_;
69
145
  private emittedBytes_;
70
- /** Ordinal cursor into the (append-stable) product list. */
71
- private productOrdinal_;
146
+ /** Ordinal cursor into the unit list (see the adapter's stability
147
+ * notes). */
148
+ private unitOrdinal_;
72
149
  /** Geometry expressIDs whose payload has been emitted (cross-generation
73
150
  * dedup for mapped/shared geometry). */
74
151
  private readonly emittedGeometry_;
@@ -80,14 +157,15 @@ export declare class StreamedPreviewChannel {
80
157
  * — ticks run between parse yields, never concurrently with the durable
81
158
  * extraction, which is created after the parse completes).
82
159
  * @param sink The live columnar sink the streamed parse is filling.
160
+ * @param adapter The schema adapter building prefix generations.
83
161
  * @param coordinateToOrigin The open's COORDINATE_TO_ORIGIN setting.
84
162
  * @param onMesh Consumer callback for each preview payload.
85
- * @param maxProducts Cap on products ever preview-extracted.
163
+ * @param maxUnits Cap on units ever preview-extracted.
86
164
  * @param maxBytes Cap on total payload bytes copied out.
87
165
  * @param firstGenerationMinRecords Records required before the first
88
166
  * snapshot (tests lower it for tiny fixtures).
89
167
  */
90
- constructor(data: Uint8Array, conwaywasm: ConwayGeometry, sink: ColumnarIndexSink<EntityTypesIfc>, coordinateToOrigin: boolean, onMesh: (mesh: PreviewMeshPayload) => void, maxProducts?: number, maxBytes?: number, firstGenerationMinRecords?: number);
168
+ constructor(data: Uint8Array, conwaywasm: ConwayGeometry, sink: ColumnarIndexSink<number>, adapter: PreviewSchemaAdapter, coordinateToOrigin: boolean, onMesh: (mesh: PreviewMeshPayload) => void, maxUnits?: number, maxBytes?: number, firstGenerationMinRecords?: number);
91
169
  /** Begin ticking (call just before awaiting the parse). */
92
170
  start(): void;
93
171
  /**
@@ -100,29 +178,30 @@ export declare class StreamedPreviewChannel {
100
178
  get capped(): boolean;
101
179
  private schedule_;
102
180
  /**
103
- * One pump tick: ensure a generation with pending products exists, then
181
+ * One pump tick: ensure a generation with pending units exists, then
104
182
  * extract + capture under the time budget.
105
183
  */
106
184
  private tick_;
107
185
  /**
108
- * Ensure a generation with pending products: keep the current one while
109
- * it has work; otherwise snapshot a fresh prefix model once the index has
110
- * grown enough to be worth the copy.
186
+ * Ensure a generation with pending units: keep the current one while
187
+ * it has work; otherwise snapshot a fresh prefix model once the index
188
+ * has grown enough to be worth the copy.
111
189
  *
112
- * @return {boolean} True when a generation with pending products exists.
190
+ * @return {boolean} True when a generation with pending units exists.
113
191
  */
114
192
  private ensureGeneration_;
115
193
  /**
116
194
  * Walk the current generation's scene and emit every not-yet-captured
117
- * placed instance as a payload — the preview twin of the shim's durable
118
- * delta capture, with the same placed-geometry math (normalize, scaling,
119
- * coordination) so preview and durable placements coincide, but copying
120
- * geometry OUT of the wasm heap instead of retaining native references.
195
+ * placed instance as a payload — the preview twin of the durable delta
196
+ * captures, with the same placed-geometry math per schema (recentering
197
+ * for IFC, bare composition for AP214) so preview and durable
198
+ * placements coincide, but copying geometry OUT of the wasm heap
199
+ * instead of retaining native references.
121
200
  */
122
201
  private captureNewInstances_;
123
202
  /**
124
203
  * Test seam: run generation building + extraction + capture synchronously
125
- * until either every product currently in the sink is attempted or a cap
204
+ * until either every unit currently in the sink is attempted or a cap
126
205
  * is hit — what the timer-driven ticks do, without the timers.
127
206
  */
128
207
  drainForTest(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"streamed_preview_channel.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/streamed_preview_channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAM5C,OAAO,cAAc,MAAM,yCAAyC,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AAErE,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AAwCrC;;;;;;;;GAQG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrD,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,SAAS,CAAC,EAAE,WAAW,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,sBAAsB;IA6C7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAlD9C;;4DAEwD;IACjD,kBAAkB,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAA;IAEzC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAC,CAA+B;IAE9C,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,aAAa,CAAI;IAEzB,4DAA4D;IAC5D,OAAO,CAAC,eAAe,CAAI;IAE3B;4CACwC;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAErD,OAAO,CAAC,WAAW,CAAC,CAOnB;IAED,OAAO,CAAC,oBAAoB,CAAI;IAEhC;;;;;;;;;;;;OAYG;gBAEkB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACvC,kBAAkB,EAAE,OAAO,EAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,EAC1C,WAAW,GAAE,MAAqC,EAClD,QAAQ,GAAE,MAAkC,EAC5C,yBAAyB,GAAE,MAChB;IAGhC,2DAA2D;IACpD,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACI,IAAI,IAAI,IAAI;IASnB,oEAAoE;IACpE,IAAW,MAAM,IAAI,OAAO,CAG3B;IAGD,OAAO,CAAC,SAAS;IAqBjB;;;OAGG;IACH,OAAO,CAAC,KAAK;IAoCb;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAgJ5B;;;;OAIG;IACI,YAAY,IAAI,IAAI;CA+B5B"}
1
+ {"version":3,"file":"streamed_preview_channel.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/streamed_preview_channel.ts"],"names":[],"mappings":"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"}