jssm 5.143.1 → 5.143.2

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/README.md CHANGED
@@ -18,10 +18,10 @@ Please edit the file it's derived from, instead: `./src/md/readme_base.md`
18
18
 
19
19
 
20
20
 
21
- * Generated for version 5.143.1 at 6/11/2026, 1:28:46 PM
21
+ * Generated for version 5.143.2 at 6/11/2026, 2:09:57 PM
22
22
 
23
23
  -->
24
- # jssm 5.143.1
24
+ # jssm 5.143.2
25
25
 
26
26
  [**Try the live editor**](https://stonecypher.github.io/jssm-viz-demo/graph_explorer.html) ·
27
27
  [Documentation](https://stonecypher.github.io/jssm/docs/) ·
@@ -418,7 +418,7 @@ If your contribution is missing here, please open an issue.
418
418
 
419
419
  - 6,200 specs with 100.0% coverage
420
420
  - 526 fuzz tests with 3.3% coverage
421
- - 5,776 TypeScript lines - 1.2 tests per line, 10.2 generated tests per line
421
+ - 5,780 TypeScript lines - 1.2 tests per line, 10.2 generated tests per line
422
422
 
423
423
  [![Actions Status](https://github.com/StoneCypher/jssm/workflows/Node%20CI/badge.svg)](https://github.com/StoneCypher/jssm/actions)
424
424
  [![NPM version](https://img.shields.io/npm/v/jssm.svg)](https://www.npmjs.com/package/jssm)
@@ -22152,10 +22152,22 @@ function compile(tree) {
22152
22152
  allows_override: [],
22153
22153
  allow_islands: []
22154
22154
  };
22155
- tree.map((tr) => {
22156
- const rule = compile_rule_handler(tr), agg_as = rule.agg_as, val = rule.val; // TODO FIXME no any
22157
- results[agg_as] = results[agg_as].concat(val);
22158
- });
22155
+ // Accumulate by in-place push, not `results[agg_as].concat(val)`: concat
22156
+ // recopies and reallocates the whole bucket per rule, which made this loop
22157
+ // O(n^2) over edge-heavy machines — two-thirds of construct() self-time
22158
+ // (#700). Array-valued rules spread one level, matching concat's behavior.
22159
+ for (const tr of tree) {
22160
+ const rule = compile_rule_handler(tr), val = rule.val, // TODO FIXME no any
22161
+ bucket = results[rule.agg_as];
22162
+ if (Array.isArray(val)) {
22163
+ for (const v of val) {
22164
+ bucket.push(v);
22165
+ }
22166
+ }
22167
+ else {
22168
+ bucket.push(val);
22169
+ }
22170
+ }
22159
22171
  const property_keys = results['property_definition'].map(pd => pd.name), repeat_props = find_repeated(property_keys);
22160
22172
  if (repeat_props.length) {
22161
22173
  const dup = repeat_props[0][0];
@@ -22687,7 +22699,7 @@ var constants = /*#__PURE__*/Object.freeze({
22687
22699
  * Useful for runtime diagnostics and for embedding in serialized machine
22688
22700
  * snapshots so that deserializers can detect version-skew.
22689
22701
  */
22690
- const version = "5.143.1";
22702
+ const version = "5.143.2";
22691
22703
 
22692
22704
  // whargarbl lots of these return arrays could/should be sets
22693
22705
  const { state_name_chars, state_name_first_chars, action_label_chars } = constants;
package/dist/cdn/viz.js CHANGED
@@ -22177,10 +22177,22 @@ function compile(tree) {
22177
22177
  allows_override: [],
22178
22178
  allow_islands: []
22179
22179
  };
22180
- tree.map((tr) => {
22181
- const rule = compile_rule_handler(tr), agg_as = rule.agg_as, val = rule.val; // TODO FIXME no any
22182
- results[agg_as] = results[agg_as].concat(val);
22183
- });
22180
+ // Accumulate by in-place push, not `results[agg_as].concat(val)`: concat
22181
+ // recopies and reallocates the whole bucket per rule, which made this loop
22182
+ // O(n^2) over edge-heavy machines — two-thirds of construct() self-time
22183
+ // (#700). Array-valued rules spread one level, matching concat's behavior.
22184
+ for (const tr of tree) {
22185
+ const rule = compile_rule_handler(tr), val = rule.val, // TODO FIXME no any
22186
+ bucket = results[rule.agg_as];
22187
+ if (Array.isArray(val)) {
22188
+ for (const v of val) {
22189
+ bucket.push(v);
22190
+ }
22191
+ }
22192
+ else {
22193
+ bucket.push(val);
22194
+ }
22195
+ }
22184
22196
  const property_keys = results['property_definition'].map(pd => pd.name), repeat_props = find_repeated(property_keys);
22185
22197
  if (repeat_props.length) {
22186
22198
  const dup = repeat_props[0][0];
@@ -22712,7 +22724,7 @@ var constants = /*#__PURE__*/Object.freeze({
22712
22724
  * Useful for runtime diagnostics and for embedding in serialized machine
22713
22725
  * snapshots so that deserializers can detect version-skew.
22714
22726
  */
22715
- const version = "5.143.1";
22727
+ const version = "5.143.2";
22716
22728
 
22717
22729
  // whargarbl lots of these return arrays could/should be sets
22718
22730
  const { state_name_chars, state_name_first_chars, action_label_chars } = constants;