@bldrs-ai/conway 1.447.1342 → 1.449.1351

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.
@@ -30,7 +30,7 @@ var import_node_process = require("node:process");
30
30
  var readline = __toESM(require("node:readline"), 1);
31
31
 
32
32
  // compiled/src/version/version.js
33
- var versionString = "Conway v1.447.1342";
33
+ var versionString = "Conway v1.449.1351";
34
34
 
35
35
  // compiled/dependencies/conway-geom/interface/conway_geometry.js
36
36
  var wasmType = "";
@@ -4684,6 +4684,28 @@ var StepVtableBuilder = class {
4684
4684
  }
4685
4685
  };
4686
4686
 
4687
+ // compiled/src/step/parsing/uint32_sink.js
4688
+ function extractIntegerArrayAt(buffer, cursor, endCursor, sink) {
4689
+ if (stepExtractOptional(buffer, cursor, endCursor) === null) {
4690
+ return 0;
4691
+ }
4692
+ let count = 0;
4693
+ let signedCursor0 = stepExtractArrayBegin(buffer, cursor, endCursor);
4694
+ let readCursor = Math.abs(signedCursor0);
4695
+ while (signedCursor0 >= 0) {
4696
+ const value = stepExtractNumber(buffer, readCursor, endCursor);
4697
+ if (value === void 0) {
4698
+ throw new Error("Value in STEP was incorrectly typed");
4699
+ }
4700
+ readCursor = skipValue(buffer, readCursor, endCursor);
4701
+ sink.push(value);
4702
+ ++count;
4703
+ signedCursor0 = stepExtractArrayToken(buffer, readCursor, endCursor);
4704
+ readCursor = Math.abs(signedCursor0);
4705
+ }
4706
+ return count;
4707
+ }
4708
+
4687
4709
  // compiled/src/indexing/index_set_constants.js
4688
4710
  var IndexSetConstants = class {
4689
4711
  };
@@ -5240,6 +5262,48 @@ var StepModelBase = class {
5240
5262
  * @param element The raw elment to populate the vtable entry for.
5241
5263
  * @return {boolean} Did the vtable entry populate correctly?
5242
5264
  */
5265
+ /**
5266
+ * Append a referenced record's unsigned-integer list field into `sink`
5267
+ * without materialising the referenced entity.
5268
+ *
5269
+ * This is the reference-level twin of
5270
+ * `StepEntityBase.extractIntegerArrayInto`, for hot loops that walk
5271
+ * millions of small records (tessellated facesets) where constructing
5272
+ * an entity per record dominates. It deliberately handles only the
5273
+ * simple case and reports failure otherwise, so callers keep a
5274
+ * correct fallback rather than this growing subtle special cases:
5275
+ * the reference must resolve, be single-class (no multi-mapping),
5276
+ * and be exactly `expectedTypeID` — which is what makes reading
5277
+ * `offset` as a plain vtable slot equivalent to the generated
5278
+ * getter's `getOffsetCursor( offset, _, _ )` (that only subtracts a
5279
+ * base offset for multi-mapped records).
5280
+ *
5281
+ * @param expressID The referenced record's express ID.
5282
+ * @param offset The field's vtable offset within the record.
5283
+ * @param expectedTypeID The type the record must be.
5284
+ * @param sink Receives the appended values.
5285
+ * @return {number | undefined} Count appended, or undefined when the
5286
+ * fast path does not apply and the caller must fall back.
5287
+ */
5288
+ extractIntegerArrayByExpressIDInto(expressID, offset, expectedTypeID, sink) {
5289
+ const localID = this.expressIDMap_.get(expressID);
5290
+ if (localID === void 0 || localID >= this.count_) {
5291
+ return void 0;
5292
+ }
5293
+ const element = this.entry(localID);
5294
+ if (element.multiMapping !== void 0 || element.typeID !== expectedTypeID) {
5295
+ return void 0;
5296
+ }
5297
+ if (element.vtableIndex === void 0 && !this.populateVtableEntryRaw(element)) {
5298
+ return void 0;
5299
+ }
5300
+ const vtable = element.vtable;
5301
+ const buffer = element.buffer;
5302
+ if (vtable === void 0 || buffer === void 0 || offset >= (element.vtableCount ?? 0)) {
5303
+ return void 0;
5304
+ }
5305
+ return extractIntegerArrayAt(buffer, vtable[element.vtableIndex + offset], buffer.length, sink);
5306
+ }
5243
5307
  populateVtableEntryRaw(element) {
5244
5308
  if (element.vtableIndex !== void 0 || element.typeID === 0) {
5245
5309
  return true;
@@ -10780,28 +10844,48 @@ var StepEntityBase = class {
10780
10844
  * @return {number} How many values were appended (0 when the field is
10781
10845
  * unset/optional-null).
10782
10846
  */
10783
- extractIntegerArrayInto(offset, baseOffset, depth, sink) {
10847
+ /**
10848
+ * Walk a reference-list field, handing each element's express ID to
10849
+ * `onReference` without resolving it to an entity.
10850
+ *
10851
+ * Lets hot loops decide per element how to read the referenced record
10852
+ * (see StepModelBase.extractIntegerArrayByExpressIDInto) instead of
10853
+ * paying for an entity per element the way the generated list getters
10854
+ * do. Inline (non-reference) elements yield `undefined`, and
10855
+ * `onReference` returning false aborts the walk — together those let
10856
+ * a caller bail out to the generated getter for anything it is not
10857
+ * prepared to handle.
10858
+ *
10859
+ * @param offset The offset in the vtable to extract from.
10860
+ * @param baseOffset The base offset of the class in the vtable.
10861
+ * @param depth The depth in the inheritance hierarchy.
10862
+ * @param onReference Receives each element's express ID, or undefined
10863
+ * for an inline element; return false to abort.
10864
+ * @return {boolean} False if the walk was aborted, true otherwise.
10865
+ */
10866
+ forEachReferenceInField(offset, baseOffset, depth, onReference) {
10784
10867
  let cursor = this.getOffsetCursor(offset, baseOffset, depth);
10785
10868
  const buffer = this.buffer;
10786
10869
  const endCursor = buffer.length;
10787
10870
  if (stepExtractOptional(buffer, cursor, endCursor) === null) {
10788
- return 0;
10871
+ return true;
10789
10872
  }
10790
- let count = 0;
10791
10873
  let signedCursor0 = stepExtractArrayBegin(buffer, cursor, endCursor);
10792
10874
  cursor = Math.abs(signedCursor0);
10793
10875
  while (signedCursor0 >= 0) {
10794
- const value = stepExtractNumber(buffer, cursor, endCursor);
10795
- if (value === void 0) {
10796
- throw new Error("Value in STEP was incorrectly typed");
10876
+ if (!onReference(stepExtractReference(buffer, cursor, endCursor))) {
10877
+ return false;
10797
10878
  }
10798
10879
  cursor = skipValue(buffer, cursor, endCursor);
10799
- sink.push(value);
10800
- ++count;
10801
10880
  signedCursor0 = stepExtractArrayToken(buffer, cursor, endCursor);
10802
10881
  cursor = Math.abs(signedCursor0);
10803
10882
  }
10804
- return count;
10883
+ return true;
10884
+ }
10885
+ extractIntegerArrayInto(offset, baseOffset, depth, sink) {
10886
+ const cursor = this.getOffsetCursor(offset, baseOffset, depth);
10887
+ const buffer = this.buffer;
10888
+ return extractIntegerArrayAt(buffer, cursor, buffer.length, sink);
10805
10889
  }
10806
10890
  /**
10807
10891
  * Extract a number at the particular vtable offset (i.e. the position