@bldrs-ai/conway 1.502.1421 → 1.509.1435

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 (37) hide show
  1. package/compiled/Dist/ConwayGeomWasmNode.js +0 -0
  2. package/compiled/Dist/ConwayGeomWasmNodeMT.js +0 -0
  3. package/compiled/Dist/ConwayGeomWasmWeb.js +0 -0
  4. package/compiled/Dist/ConwayGeomWasmWebMT.js +1 -1
  5. package/compiled/Dist/ConwayGeomWasmWebMT.wasm +0 -0
  6. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNode.js +0 -0
  7. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNodeMT.js +0 -0
  8. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWeb.js +0 -0
  9. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.js +1 -1
  10. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.wasm +0 -0
  11. package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts +19 -0
  12. package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts.map +1 -1
  13. package/compiled/dependencies/conway-geom/interface/conway_geometry.js +17 -0
  14. package/compiled/examples/browser-bundled.cjs +132 -21
  15. package/compiled/examples/cli-bundled.cjs +189 -57
  16. package/compiled/examples/cli-step-bundled.cjs +156 -28
  17. package/compiled/examples/validator-bundled.cjs +132 -21
  18. package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts +2 -0
  19. package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts.map +1 -0
  20. package/compiled/src/compat/web-ifc/coordination_export_order.test.js +110 -0
  21. package/compiled/src/compat/web-ifc/coordination_f64.d.ts +60 -1
  22. package/compiled/src/compat/web-ifc/coordination_f64.d.ts.map +1 -1
  23. package/compiled/src/compat/web-ifc/coordination_f64.js +103 -8
  24. package/compiled/src/compat/web-ifc/coordination_f64.test.js +115 -30
  25. package/compiled/src/ifc/ifc_geometry_extraction.d.ts +0 -1
  26. package/compiled/src/ifc/ifc_geometry_extraction.d.ts.map +1 -1
  27. package/compiled/src/ifc/ifc_geometry_extraction.js +34 -44
  28. package/compiled/src/step/parsing/uint32_sink.d.ts +20 -0
  29. package/compiled/src/step/parsing/uint32_sink.d.ts.map +1 -1
  30. package/compiled/src/step/parsing/uint32_sink.js +95 -0
  31. package/compiled/src/step/parsing/uint32_sink.test.js +41 -1
  32. package/compiled/src/step/step_model_base.d.ts +32 -13
  33. package/compiled/src/step/step_model_base.d.ts.map +1 -1
  34. package/compiled/src/step/step_model_base.js +64 -24
  35. package/compiled/src/version/version.js +1 -1
  36. package/compiled/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
@@ -91,33 +91,52 @@ export default abstract class StepModelBase<EntityTypeIDs extends number, BaseEn
91
91
  */
92
92
  invalidate(dropVtable?: boolean): void;
93
93
  /**
94
- * Populate a raw vtable entry for a particular element, extra
94
+ * Resolve an express ID to a local ID, using `hintLocalID + 1` when
95
+ * the next record is the one we want. Tessellated Faces lists are
96
+ * sequential (PSB: every faceset), so this turns 9.1M interpolation
97
+ * searches into one per faceset.
95
98
  *
96
- * @param element The raw elment to populate the vtable entry for.
97
- * @return {boolean} Did the vtable entry populate correctly?
99
+ * @param expressID The referenced record.
100
+ * @param hintLocalID Local ID of the previous resolve, if any.
101
+ * @return {number | undefined} The local ID, or undefined if unknown.
98
102
  */
103
+ resolveExpressID(expressID: number, hintLocalID?: number): number | undefined;
99
104
  /**
100
- * Append a referenced record's unsigned-integer list field into `sink`
101
- * without materialising the referenced entity.
102
- *
103
- * This is the reference-level twin of
105
+ * Append a local record's unsigned-integer list field into `sink`
106
+ * without an express-ID lookup. The reference-level twin of
104
107
  * `StepEntityBase.extractIntegerArrayInto`, for hot loops that walk
105
108
  * millions of small records (tessellated facesets) where constructing
106
109
  * an entity per record dominates. It deliberately handles only the
107
110
  * simple case and reports failure otherwise, so callers keep a
108
111
  * correct fallback rather than this growing subtle special cases:
109
- * the reference must resolve, be single-class (no multi-mapping),
110
- * and be exactly `expectedTypeID` — which is what makes reading
111
- * `offset` as a plain vtable slot equivalent to the generated
112
- * getter's `getOffsetCursor( offset, _, _ )` (that only subtracts a
113
- * base offset for multi-mapped records).
112
+ * the record must be single-class (no multi-mapping) and exactly
113
+ * `expectedTypeID`.
114
+ *
115
+ * Field 0 is the data-block start the parser stored in `address_`
116
+ * (after `TYPE(`). Reading it from the columns skips the descriptor
117
+ * and vtable `entry()` would retain — on a 9 M-face model those are
118
+ * the objects the faceset path is trying not to build. Non-zero
119
+ * offsets still go through a vtable, because only field 0 has that
120
+ * address identity.
121
+ *
122
+ * @param localID The record's local ID.
123
+ * @param offset The field's vtable offset.
124
+ * @param expectedTypeID The type the record must be.
125
+ * @param sink Receives the appended values.
126
+ * @return {number | undefined} Count appended, or undefined when the
127
+ * fast path does not apply.
128
+ */
129
+ extractIntegerArrayByLocalIDInto(localID: number, offset: number, expectedTypeID: EntityTypeIDs, sink: Uint32Sink): number | undefined;
130
+ /**
131
+ * Append a referenced record's unsigned-integer list field into `sink`
132
+ * without materialising the referenced entity.
114
133
  *
115
134
  * @param expressID The referenced record's express ID.
116
135
  * @param offset The field's vtable offset within the record.
117
136
  * @param expectedTypeID The type the record must be.
118
137
  * @param sink Receives the appended values.
119
138
  * @return {number | undefined} Count appended, or undefined when the
120
- * fast path does not apply and the caller must fall back.
139
+ * fast path does not apply.
121
140
  */
122
141
  extractIntegerArrayByExpressIDInto(expressID: number, offset: number, expectedTypeID: EntityTypeIDs, sink: Uint32Sink): number | undefined;
123
142
  populateVtableEntryRaw(element: StepEntityInternalReference<EntityTypeIDs>): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"step_model_base.d.ts","sourceRoot":"","sources":["../../../src/step/step_model_base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step_model_base.d.ts","sourceRoot":"","sources":["../../../src/step/step_model_base.ts"],"names":[],"mappings":"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"}
@@ -242,45 +242,67 @@ export default class StepModelBase {
242
242
  }
243
243
  }
244
244
  /**
245
- * Populate a raw vtable entry for a particular element, extra
246
- *
247
- * @param element The raw elment to populate the vtable entry for.
248
- * @return {boolean} Did the vtable entry populate correctly?
249
- */
245
+ * Resolve an express ID to a local ID, using `hintLocalID + 1` when
246
+ * the next record is the one we want. Tessellated Faces lists are
247
+ * sequential (PSB: every faceset), so this turns 9.1M interpolation
248
+ * searches into one per faceset.
249
+ *
250
+ * @param expressID The referenced record.
251
+ * @param hintLocalID Local ID of the previous resolve, if any.
252
+ * @return {number | undefined} The local ID, or undefined if unknown.
253
+ */
254
+ resolveExpressID(expressID, hintLocalID) {
255
+ if (hintLocalID !== void 0) {
256
+ const next = hintLocalID + 1;
257
+ if (next < this.firstInlineElement_ &&
258
+ this.expressID_[next] === expressID) {
259
+ return next;
260
+ }
261
+ }
262
+ return this.expressIDMap_.get(expressID);
263
+ }
250
264
  /**
251
- * Append a referenced record's unsigned-integer list field into `sink`
252
- * without materialising the referenced entity.
253
- *
254
- * This is the reference-level twin of
265
+ * Append a local record's unsigned-integer list field into `sink`
266
+ * without an express-ID lookup. The reference-level twin of
255
267
  * `StepEntityBase.extractIntegerArrayInto`, for hot loops that walk
256
268
  * millions of small records (tessellated facesets) where constructing
257
269
  * an entity per record dominates. It deliberately handles only the
258
270
  * simple case and reports failure otherwise, so callers keep a
259
271
  * correct fallback rather than this growing subtle special cases:
260
- * the reference must resolve, be single-class (no multi-mapping),
261
- * and be exactly `expectedTypeID` — which is what makes reading
262
- * `offset` as a plain vtable slot equivalent to the generated
263
- * getter's `getOffsetCursor( offset, _, _ )` (that only subtracts a
264
- * base offset for multi-mapped records).
265
- *
266
- * @param expressID The referenced record's express ID.
267
- * @param offset The field's vtable offset within the record.
272
+ * the record must be single-class (no multi-mapping) and exactly
273
+ * `expectedTypeID`.
274
+ *
275
+ * Field 0 is the data-block start the parser stored in `address_`
276
+ * (after `TYPE(`). Reading it from the columns skips the descriptor
277
+ * and vtable `entry()` would retain — on a 9 M-face model those are
278
+ * the objects the faceset path is trying not to build. Non-zero
279
+ * offsets still go through a vtable, because only field 0 has that
280
+ * address identity.
281
+ *
282
+ * @param localID The record's local ID.
283
+ * @param offset The field's vtable offset.
268
284
  * @param expectedTypeID The type the record must be.
269
285
  * @param sink Receives the appended values.
270
286
  * @return {number | undefined} Count appended, or undefined when the
271
- * fast path does not apply and the caller must fall back.
287
+ * fast path does not apply.
272
288
  */
273
- extractIntegerArrayByExpressIDInto(expressID, offset, expectedTypeID, sink) {
274
- const localID = this.expressIDMap_.get(expressID);
275
- if (localID === void 0 || localID >= this.count_) {
289
+ extractIntegerArrayByLocalIDInto(localID, offset, expectedTypeID, sink) {
290
+ if (localID >= this.count_) {
276
291
  return void 0;
277
292
  }
278
- const element = this.entry(localID);
279
293
  // Multi-mapped records need per-depth base offsets; leave them to
280
- // the generated getters.
281
- if (element.multiMapping !== void 0 || element.typeID !== expectedTypeID) {
294
+ // the generated getters. typeID_ is -1 when unset.
295
+ if (this.complexEntries_?.has(localID) ||
296
+ this.typeID_[localID] !== expectedTypeID) {
282
297
  return void 0;
283
298
  }
299
+ if (offset === 0) {
300
+ const address = this.address_[localID];
301
+ const acquisition = this.bufferProvider_.acquire(address, this.length_[localID]);
302
+ const viewAddress = address - acquisition.offset;
303
+ return extractIntegerArrayAt(acquisition.buffer, viewAddress, acquisition.buffer.length, sink);
304
+ }
305
+ const element = this.entry(localID);
284
306
  if (element.vtableIndex === void 0 && !this.populateVtableEntryRaw(element)) {
285
307
  return void 0;
286
308
  }
@@ -294,6 +316,24 @@ export default class StepModelBase {
294
316
  // same end bound the generated array getters use.
295
317
  return extractIntegerArrayAt(buffer, vtable[element.vtableIndex + offset], buffer.length, sink);
296
318
  }
319
+ /**
320
+ * Append a referenced record's unsigned-integer list field into `sink`
321
+ * without materialising the referenced entity.
322
+ *
323
+ * @param expressID The referenced record's express ID.
324
+ * @param offset The field's vtable offset within the record.
325
+ * @param expectedTypeID The type the record must be.
326
+ * @param sink Receives the appended values.
327
+ * @return {number | undefined} Count appended, or undefined when the
328
+ * fast path does not apply.
329
+ */
330
+ extractIntegerArrayByExpressIDInto(expressID, offset, expectedTypeID, sink) {
331
+ const localID = this.expressIDMap_.get(expressID);
332
+ if (localID === void 0) {
333
+ return void 0;
334
+ }
335
+ return this.extractIntegerArrayByLocalIDInto(localID, offset, expectedTypeID, sink);
336
+ }
297
337
  populateVtableEntryRaw(element) {
298
338
  if (element.vtableIndex !== void 0 || element.typeID === 0) {
299
339
  return true;
@@ -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 v1.502.1421';
8
+ const versionString = 'Conway v1.509.1435';
9
9
  export { versionString };