capdag 0.95.25089 → 0.96.25093

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 (3) hide show
  1. package/capdag.js +15 -15
  2. package/capdag.test.js +94 -94
  3. package/package.json +1 -1
package/capdag.js CHANGED
@@ -4259,7 +4259,7 @@ class PluginRepoServer {
4259
4259
  // ============================================================================
4260
4260
  // Machine Notation — compact, round-trippable DAG path identifiers
4261
4261
  //
4262
- // Route notation describes capability transformation paths using bracket-
4262
+ // Machine notation describes capability transformation paths using bracket-
4263
4263
  // delimited statements:
4264
4264
  // [alias cap:in="...";op=...;out="..."] — header (defines a cap with alias)
4265
4265
  // [src -> alias -> dst] — wiring (connects nodes via cap)
@@ -4300,7 +4300,7 @@ const MachineSyntaxErrorCodes = {
4300
4300
  };
4301
4301
 
4302
4302
  /**
4303
- * A single edge in the route graph.
4303
+ * A single edge in the machine graph.
4304
4304
  *
4305
4305
  * Each edge represents a capability that transforms one or more source
4306
4306
  * media types into a target media type. The isLoop flag indicates
@@ -4386,7 +4386,7 @@ class MachineEdge {
4386
4386
  }
4387
4387
 
4388
4388
  /**
4389
- * A route graph — the semantic model behind machine notation.
4389
+ * A machine graph — the semantic model behind machine notation.
4390
4390
  *
4391
4391
  * The graph is a collection of directed edges where each edge is a capability
4392
4392
  * that transforms source media types into a target media type.
@@ -4406,7 +4406,7 @@ class Machine {
4406
4406
  }
4407
4407
 
4408
4408
  /**
4409
- * Create an empty route graph.
4409
+ * Create an empty machine graph.
4410
4410
  * @returns {Machine}
4411
4411
  */
4412
4412
  static empty() {
@@ -4448,7 +4448,7 @@ class Machine {
4448
4448
  }
4449
4449
 
4450
4450
  /**
4451
- * Check if two route graphs are semantically equivalent.
4451
+ * Check if two machine graphs are semantically equivalent.
4452
4452
  *
4453
4453
  * Two graphs are equivalent if they have the same set of edges
4454
4454
  * (compared using MachineEdge.isEquivalent). Edge ordering
@@ -4536,7 +4536,7 @@ class Machine {
4536
4536
  // =========================================================================
4537
4537
 
4538
4538
  /**
4539
- * Serialize this route graph to canonical one-line machine notation.
4539
+ * Serialize this machine graph to canonical one-line machine notation.
4540
4540
  *
4541
4541
  * The output is deterministic: same graph → same string.
4542
4542
  * Mirrors Rust Machine::to_machine_notation.
@@ -4805,12 +4805,12 @@ class Machine {
4805
4805
  }
4806
4806
 
4807
4807
  // ============================================================================
4808
- // Route Parser — PEG-based parser using Peggy
4808
+ // Machine Parser — PEG-based parser using Peggy
4809
4809
  // Mirrors Rust parser.rs exactly (4-phase pipeline)
4810
4810
  // ============================================================================
4811
4811
 
4812
4812
  // Load the Peggy-generated parser
4813
- const routeParser = require('./machine-parser.js');
4813
+ const machineParser = require('./machine-parser.js');
4814
4814
 
4815
4815
  /**
4816
4816
  * Assign a media URN to a node, or check consistency if already assigned.
@@ -4841,7 +4841,7 @@ function assignOrCheckNode(node, mediaUrn, nodeMedia, position, location) {
4841
4841
  * Internal: run the 4-phase parse pipeline on machine notation input.
4842
4842
  * Returns { machine, statements, aliasMap, nodeMedia } for full introspection.
4843
4843
  *
4844
- * @param {string} input - Route notation string
4844
+ * @param {string} input - Machine notation string
4845
4845
  * @returns {{ machine: Machine, statements: Object[], aliasMap: Map, nodeMedia: Map }}
4846
4846
  * @throws {MachineSyntaxError}
4847
4847
  * @private
@@ -4858,7 +4858,7 @@ function _parseMachineInternal(input) {
4858
4858
  // Phase 1: Parse with Peggy grammar
4859
4859
  let stmts;
4860
4860
  try {
4861
- stmts = routeParser.parse(trimmed);
4861
+ stmts = machineParser.parse(trimmed);
4862
4862
  } catch (e) {
4863
4863
  // Peggy SyntaxError has .location — propagate it
4864
4864
  const loc = e.location || null;
@@ -4934,7 +4934,7 @@ function _parseMachineInternal(input) {
4934
4934
  if (wirings.length === 0 && headers.length > 0) {
4935
4935
  throw new MachineSyntaxError(
4936
4936
  MachineSyntaxErrorCodes.NO_EDGES,
4937
- 'route has headers but no wirings — define at least one edge',
4937
+ 'machine has headers but no wirings — define at least one edge',
4938
4938
  headers[headers.length - 1].location
4939
4939
  );
4940
4940
  }
@@ -5043,7 +5043,7 @@ function _parseMachineInternal(input) {
5043
5043
  *
5044
5044
  * Mirrors Rust parse_machine exactly.
5045
5045
  *
5046
- * @param {string} input - Route notation string
5046
+ * @param {string} input - Machine notation string
5047
5047
  * @returns {Machine}
5048
5048
  * @throws {MachineSyntaxError}
5049
5049
  */
@@ -5057,7 +5057,7 @@ function parseMachine(input) {
5057
5057
  * Use this for LSP tooling — the statements array contains full position information
5058
5058
  * for every element (aliases, cap URNs, sources, targets).
5059
5059
  *
5060
- * @param {string} input - Route notation string
5060
+ * @param {string} input - Machine notation string
5061
5061
  * @returns {{ machine: Machine, statements: Object[], aliasMap: Map, nodeMedia: Map }}
5062
5062
  * @throws {MachineSyntaxError}
5063
5063
  */
@@ -5072,7 +5072,7 @@ function parseMachineWithAST(input) {
5072
5072
  /**
5073
5073
  * Builder for constructing Machines programmatically.
5074
5074
  *
5075
- * Provides a fluent API for building route graphs without writing
5075
+ * Provides a fluent API for building machine graphs without writing
5076
5076
  * machine notation strings. Useful for constructing paths from graph
5077
5077
  * exploration (e.g., selecting paths in the UI).
5078
5078
  */
@@ -5415,7 +5415,7 @@ module.exports = {
5415
5415
  PluginRepoCache,
5416
5416
  PluginRepoClient,
5417
5417
  PluginRepoServer,
5418
- // Route notation
5418
+ // Machine notation
5419
5419
  MachineSyntaxError,
5420
5420
  MachineSyntaxErrorCodes,
5421
5421
  MachineEdge,
package/capdag.test.js CHANGED
@@ -2618,10 +2618,10 @@ function test653_identityRoutingIsolation() {
2618
2618
  }
2619
2619
 
2620
2620
  // ============================================================================
2621
- // Route notation tests — mirrors Rust route module tests exactly
2621
+ // Machine notation tests — mirrors Rust machine module tests exactly
2622
2622
  // ============================================================================
2623
2623
 
2624
- // --- Route parser tests (mirrors parser.rs tests) ---
2624
+ // --- Machine parser tests (mirrors parser.rs tests) ---
2625
2625
 
2626
2626
  function testMachine_emptyInput() {
2627
2627
  assertThrowsWithCode(() => parseMachine(''), MachineSyntaxErrorCodes.EMPTY);
@@ -2793,7 +2793,7 @@ function testMachine_unterminatedBracketFails() {
2793
2793
  );
2794
2794
  }
2795
2795
 
2796
- // --- Route graph tests (mirrors graph.rs tests) ---
2796
+ // --- Machine graph tests (mirrors graph.rs tests) ---
2797
2797
 
2798
2798
  function testMachine_edgeEquivalenceSameUrns() {
2799
2799
  const e1 = new MachineEdge(
@@ -3022,7 +3022,7 @@ function testMachine_displayGraph() {
3022
3022
  assertEqual(Machine.empty().toString(), 'Machine(empty)');
3023
3023
  }
3024
3024
 
3025
- // --- Route serializer tests (mirrors serializer.rs tests) ---
3025
+ // --- Machine serializer tests (mirrors serializer.rs tests) ---
3026
3026
 
3027
3027
  function testMachine_serializeSingleEdge() {
3028
3028
  const g = new Machine([new MachineEdge(
@@ -3195,7 +3195,7 @@ function testMachine_duplicateOpTagsDisambiguated() {
3195
3195
  'Duplicate ops must be disambiguated: ' + notation);
3196
3196
  }
3197
3197
 
3198
- // --- Route builder tests ---
3198
+ // --- Machine builder tests ---
3199
3199
 
3200
3200
  function testMachine_builderSingleEdge() {
3201
3201
  const builder = new MachineBuilder();
@@ -3540,7 +3540,7 @@ function testMachine_capRegistryEntry_defaults() {
3540
3540
  assertEqual(entry.args.length, 0, 'Args should be empty');
3541
3541
  }
3542
3542
 
3543
- // Helper for route error tests
3543
+ // Helper for machine error tests
3544
3544
  function assertThrowsWithCode(fn, expectedCode) {
3545
3545
  try {
3546
3546
  fn();
@@ -3788,98 +3788,98 @@ async function runTests() {
3788
3788
  console.log(' SKIP TEST652: N/A for JS (CAP_IDENTITY constant)');
3789
3789
  runTest('TEST653: identity_routing_isolation', test653_identityRoutingIsolation);
3790
3790
 
3791
- // route module: parser tests (mirrors parser.rs)
3792
- console.log('\n--- route/parser.rs ---');
3793
- runTest('ROUTE: empty_input', testMachine_emptyInput);
3794
- runTest('ROUTE: whitespace_only', testMachine_whitespaceOnly);
3795
- runTest('ROUTE: header_only_no_wirings', testMachine_headerOnlyNoWirings);
3796
- runTest('ROUTE: duplicate_alias', testMachine_duplicateAlias);
3797
- runTest('ROUTE: simple_linear_chain', testMachine_simpleLinearChain);
3798
- runTest('ROUTE: two_step_chain', testMachine_twoStepChain);
3799
- runTest('ROUTE: fan_out', testMachine_fanOut);
3800
- runTest('ROUTE: fan_in_secondary_assigned_by_prior_wiring', testMachine_fanInSecondaryAssignedByPriorWiring);
3801
- runTest('ROUTE: fan_in_secondary_unassigned_gets_wildcard', testMachine_fanInSecondaryUnassignedGetsWildcard);
3802
- runTest('ROUTE: loop_edge', testMachine_loopEdge);
3803
- runTest('ROUTE: undefined_alias_fails', testMachine_undefinedAliasFails);
3804
- runTest('ROUTE: node_alias_collision', testMachine_nodeAliasCollision);
3805
- runTest('ROUTE: conflicting_media_types_fail', testMachine_conflictingMediaTypesFail);
3806
- runTest('ROUTE: multiline_format', testMachine_multilineFormat);
3807
- runTest('ROUTE: different_aliases_same_graph', testMachine_differentAliasesSameGraph);
3808
- runTest('ROUTE: malformed_input_fails', testMachine_malformedInputFails);
3809
- runTest('ROUTE: unterminated_bracket_fails', testMachine_unterminatedBracketFails);
3810
-
3811
- // route module: graph tests (mirrors graph.rs)
3812
- console.log('\n--- route/graph.rs ---');
3813
- runTest('ROUTE: edge_equivalence_same_urns', testMachine_edgeEquivalenceSameUrns);
3814
- runTest('ROUTE: edge_equivalence_different_cap_urns', testMachine_edgeEquivalenceDifferentCapUrns);
3815
- runTest('ROUTE: edge_equivalence_different_targets', testMachine_edgeEquivalenceDifferentTargets);
3816
- runTest('ROUTE: edge_equivalence_different_loop_flag', testMachine_edgeEquivalenceDifferentLoopFlag);
3817
- runTest('ROUTE: edge_equivalence_source_order_independent', testMachine_edgeEquivalenceSourceOrderIndependent);
3818
- runTest('ROUTE: edge_equivalence_different_source_count', testMachine_edgeEquivalenceDifferentSourceCount);
3819
- runTest('ROUTE: graph_equivalence_same_edges', testMachine_graphEquivalenceSameEdges);
3820
- runTest('ROUTE: graph_equivalence_reordered_edges', testMachine_graphEquivalenceReorderedEdges);
3821
- runTest('ROUTE: graph_not_equivalent_different_edge_count', testMachine_graphNotEquivalentDifferentEdgeCount);
3822
- runTest('ROUTE: graph_not_equivalent_different_cap', testMachine_graphNotEquivalentDifferentCap);
3823
- runTest('ROUTE: graph_empty', testMachine_graphEmpty);
3824
- runTest('ROUTE: graph_empty_equivalence', testMachine_graphEmptyEquivalence);
3825
- runTest('ROUTE: root_sources_linear_chain', testMachine_rootSourcesLinearChain);
3826
- runTest('ROUTE: leaf_targets_linear_chain', testMachine_leafTargetsLinearChain);
3827
- runTest('ROUTE: root_sources_fan_in', testMachine_rootSourcesFanIn);
3828
- runTest('ROUTE: display_edge', testMachine_displayEdge);
3829
- runTest('ROUTE: display_graph', testMachine_displayGraph);
3830
-
3831
- // route module: serializer tests (mirrors serializer.rs)
3832
- console.log('\n--- route/serializer.rs ---');
3833
- runTest('ROUTE: serialize_single_edge', testMachine_serializeSingleEdge);
3834
- runTest('ROUTE: serialize_two_edge_chain', testMachine_serializeTwoEdgeChain);
3835
- runTest('ROUTE: serialize_empty_graph', testMachine_serializeEmptyGraph);
3836
- runTest('ROUTE: roundtrip_single_edge', testMachine_roundtripSingleEdge);
3837
- runTest('ROUTE: roundtrip_two_edge_chain', testMachine_roundtripTwoEdgeChain);
3838
- runTest('ROUTE: roundtrip_fan_out', testMachine_roundtripFanOut);
3839
- runTest('ROUTE: roundtrip_loop_edge', testMachine_roundtripLoopEdge);
3840
- runTest('ROUTE: serialization_is_deterministic', testMachine_serializationIsDeterministic);
3841
- runTest('ROUTE: reordered_edges_produce_same_notation', testMachine_reorderedEdgesProduceSameNotation);
3842
- runTest('ROUTE: multiline_serialize_format', testMachine_multilineSerializeFormat);
3843
- runTest('ROUTE: alias_from_op_tag', testMachine_aliasFromOpTag);
3844
- runTest('ROUTE: alias_fallback_without_op_tag', testMachine_aliasFallbackWithoutOpTag);
3845
- runTest('ROUTE: duplicate_op_tags_disambiguated', testMachine_duplicateOpTagsDisambiguated);
3846
-
3847
- // route module: builder tests
3848
- console.log('\n--- route/builder ---');
3849
- runTest('ROUTE: builder_single_edge', testMachine_builderSingleEdge);
3850
- runTest('ROUTE: builder_with_loop', testMachine_builderWithLoop);
3851
- runTest('ROUTE: builder_chaining', testMachine_builderChaining);
3852
- runTest('ROUTE: builder_equivalent_to_parsed', testMachine_builderEquivalentToParsed);
3853
- runTest('ROUTE: builder_round_trip', testMachine_builderRoundTrip);
3854
-
3855
- // route module: CapUrn.isEquivalent/isComparable
3856
- console.log('\n--- route/urn_predicates ---');
3857
- runTest('ROUTE: cap_urn_is_equivalent', testMachine_capUrnIsEquivalent);
3858
- runTest('ROUTE: cap_urn_is_comparable', testMachine_capUrnIsComparable);
3859
- runTest('ROUTE: cap_urn_in_media_urn', testMachine_capUrnInMediaUrn);
3860
- runTest('ROUTE: cap_urn_out_media_urn', testMachine_capUrnOutMediaUrn);
3861
- runTest('ROUTE: media_urn_is_equivalent', testMachine_mediaUrnIsEquivalent);
3862
- runTest('ROUTE: media_urn_is_comparable', testMachine_mediaUrnIsComparable);
3791
+ // machine module: parser tests (mirrors parser.rs)
3792
+ console.log('\n--- machine/parser.rs ---');
3793
+ runTest('MACHINE:empty_input', testMachine_emptyInput);
3794
+ runTest('MACHINE:whitespace_only', testMachine_whitespaceOnly);
3795
+ runTest('MACHINE:header_only_no_wirings', testMachine_headerOnlyNoWirings);
3796
+ runTest('MACHINE:duplicate_alias', testMachine_duplicateAlias);
3797
+ runTest('MACHINE:simple_linear_chain', testMachine_simpleLinearChain);
3798
+ runTest('MACHINE:two_step_chain', testMachine_twoStepChain);
3799
+ runTest('MACHINE:fan_out', testMachine_fanOut);
3800
+ runTest('MACHINE:fan_in_secondary_assigned_by_prior_wiring', testMachine_fanInSecondaryAssignedByPriorWiring);
3801
+ runTest('MACHINE:fan_in_secondary_unassigned_gets_wildcard', testMachine_fanInSecondaryUnassignedGetsWildcard);
3802
+ runTest('MACHINE:loop_edge', testMachine_loopEdge);
3803
+ runTest('MACHINE:undefined_alias_fails', testMachine_undefinedAliasFails);
3804
+ runTest('MACHINE:node_alias_collision', testMachine_nodeAliasCollision);
3805
+ runTest('MACHINE:conflicting_media_types_fail', testMachine_conflictingMediaTypesFail);
3806
+ runTest('MACHINE:multiline_format', testMachine_multilineFormat);
3807
+ runTest('MACHINE:different_aliases_same_graph', testMachine_differentAliasesSameGraph);
3808
+ runTest('MACHINE:malformed_input_fails', testMachine_malformedInputFails);
3809
+ runTest('MACHINE:unterminated_bracket_fails', testMachine_unterminatedBracketFails);
3810
+
3811
+ // machine module: graph tests (mirrors graph.rs)
3812
+ console.log('\n--- machine/graph.rs ---');
3813
+ runTest('MACHINE:edge_equivalence_same_urns', testMachine_edgeEquivalenceSameUrns);
3814
+ runTest('MACHINE:edge_equivalence_different_cap_urns', testMachine_edgeEquivalenceDifferentCapUrns);
3815
+ runTest('MACHINE:edge_equivalence_different_targets', testMachine_edgeEquivalenceDifferentTargets);
3816
+ runTest('MACHINE:edge_equivalence_different_loop_flag', testMachine_edgeEquivalenceDifferentLoopFlag);
3817
+ runTest('MACHINE:edge_equivalence_source_order_independent', testMachine_edgeEquivalenceSourceOrderIndependent);
3818
+ runTest('MACHINE:edge_equivalence_different_source_count', testMachine_edgeEquivalenceDifferentSourceCount);
3819
+ runTest('MACHINE:graph_equivalence_same_edges', testMachine_graphEquivalenceSameEdges);
3820
+ runTest('MACHINE:graph_equivalence_reordered_edges', testMachine_graphEquivalenceReorderedEdges);
3821
+ runTest('MACHINE:graph_not_equivalent_different_edge_count', testMachine_graphNotEquivalentDifferentEdgeCount);
3822
+ runTest('MACHINE:graph_not_equivalent_different_cap', testMachine_graphNotEquivalentDifferentCap);
3823
+ runTest('MACHINE:graph_empty', testMachine_graphEmpty);
3824
+ runTest('MACHINE:graph_empty_equivalence', testMachine_graphEmptyEquivalence);
3825
+ runTest('MACHINE:root_sources_linear_chain', testMachine_rootSourcesLinearChain);
3826
+ runTest('MACHINE:leaf_targets_linear_chain', testMachine_leafTargetsLinearChain);
3827
+ runTest('MACHINE:root_sources_fan_in', testMachine_rootSourcesFanIn);
3828
+ runTest('MACHINE:display_edge', testMachine_displayEdge);
3829
+ runTest('MACHINE:display_graph', testMachine_displayGraph);
3830
+
3831
+ // machine module: serializer tests (mirrors serializer.rs)
3832
+ console.log('\n--- machine/serializer.rs ---');
3833
+ runTest('MACHINE:serialize_single_edge', testMachine_serializeSingleEdge);
3834
+ runTest('MACHINE:serialize_two_edge_chain', testMachine_serializeTwoEdgeChain);
3835
+ runTest('MACHINE:serialize_empty_graph', testMachine_serializeEmptyGraph);
3836
+ runTest('MACHINE:roundtrip_single_edge', testMachine_roundtripSingleEdge);
3837
+ runTest('MACHINE:roundtrip_two_edge_chain', testMachine_roundtripTwoEdgeChain);
3838
+ runTest('MACHINE:roundtrip_fan_out', testMachine_roundtripFanOut);
3839
+ runTest('MACHINE:roundtrip_loop_edge', testMachine_roundtripLoopEdge);
3840
+ runTest('MACHINE:serialization_is_deterministic', testMachine_serializationIsDeterministic);
3841
+ runTest('MACHINE:reordered_edges_produce_same_notation', testMachine_reorderedEdgesProduceSameNotation);
3842
+ runTest('MACHINE:multiline_serialize_format', testMachine_multilineSerializeFormat);
3843
+ runTest('MACHINE:alias_from_op_tag', testMachine_aliasFromOpTag);
3844
+ runTest('MACHINE:alias_fallback_without_op_tag', testMachine_aliasFallbackWithoutOpTag);
3845
+ runTest('MACHINE:duplicate_op_tags_disambiguated', testMachine_duplicateOpTagsDisambiguated);
3846
+
3847
+ // machine module: builder tests
3848
+ console.log('\n--- machine/builder ---');
3849
+ runTest('MACHINE:builder_single_edge', testMachine_builderSingleEdge);
3850
+ runTest('MACHINE:builder_with_loop', testMachine_builderWithLoop);
3851
+ runTest('MACHINE:builder_chaining', testMachine_builderChaining);
3852
+ runTest('MACHINE:builder_equivalent_to_parsed', testMachine_builderEquivalentToParsed);
3853
+ runTest('MACHINE:builder_round_trip', testMachine_builderRoundTrip);
3854
+
3855
+ // machine module: CapUrn.isEquivalent/isComparable
3856
+ console.log('\n--- machine/urn_predicates ---');
3857
+ runTest('MACHINE:cap_urn_is_equivalent', testMachine_capUrnIsEquivalent);
3858
+ runTest('MACHINE:cap_urn_is_comparable', testMachine_capUrnIsComparable);
3859
+ runTest('MACHINE:cap_urn_in_media_urn', testMachine_capUrnInMediaUrn);
3860
+ runTest('MACHINE:cap_urn_out_media_urn', testMachine_capUrnOutMediaUrn);
3861
+ runTest('MACHINE:media_urn_is_equivalent', testMachine_mediaUrnIsEquivalent);
3862
+ runTest('MACHINE:media_urn_is_comparable', testMachine_mediaUrnIsComparable);
3863
3863
 
3864
3864
  // Phase 0A: Position tracking
3865
- console.log('\n--- route/position_tracking ---');
3866
- runTest('ROUTE: parseMachineWithAST_headerLocation', testMachine_parseMachineWithAST_headerLocation);
3867
- runTest('ROUTE: parseMachineWithAST_wiringLocation', testMachine_parseMachineWithAST_wiringLocation);
3868
- runTest('ROUTE: parseMachineWithAST_multilinePositions', testMachine_parseMachineWithAST_multilinePositions);
3869
- runTest('ROUTE: parseMachineWithAST_fanInSourceLocations', testMachine_parseMachineWithAST_fanInSourceLocations);
3870
- runTest('ROUTE: parseMachineWithAST_aliasMap', testMachine_parseMachineWithAST_aliasMap);
3871
- runTest('ROUTE: parseMachineWithAST_nodeMedia', testMachine_parseMachineWithAST_nodeMedia);
3872
- runTest('ROUTE: errorLocation_parseError', testMachine_errorLocation_parseError);
3873
- runTest('ROUTE: errorLocation_duplicateAlias', testMachine_errorLocation_duplicateAlias);
3874
- runTest('ROUTE: errorLocation_undefinedAlias', testMachine_errorLocation_undefinedAlias);
3865
+ console.log('\n--- machine/position_tracking ---');
3866
+ runTest('MACHINE:parseMachineWithAST_headerLocation', testMachine_parseMachineWithAST_headerLocation);
3867
+ runTest('MACHINE:parseMachineWithAST_wiringLocation', testMachine_parseMachineWithAST_wiringLocation);
3868
+ runTest('MACHINE:parseMachineWithAST_multilinePositions', testMachine_parseMachineWithAST_multilinePositions);
3869
+ runTest('MACHINE:parseMachineWithAST_fanInSourceLocations', testMachine_parseMachineWithAST_fanInSourceLocations);
3870
+ runTest('MACHINE:parseMachineWithAST_aliasMap', testMachine_parseMachineWithAST_aliasMap);
3871
+ runTest('MACHINE:parseMachineWithAST_nodeMedia', testMachine_parseMachineWithAST_nodeMedia);
3872
+ runTest('MACHINE:errorLocation_parseError', testMachine_errorLocation_parseError);
3873
+ runTest('MACHINE:errorLocation_duplicateAlias', testMachine_errorLocation_duplicateAlias);
3874
+ runTest('MACHINE:errorLocation_undefinedAlias', testMachine_errorLocation_undefinedAlias);
3875
3875
 
3876
3876
  // Phase 0C: Machine.toMermaid()
3877
- console.log('\n--- route/mermaid ---');
3878
- runTest('ROUTE: toMermaid_linearChain', testMachine_toMermaid_linearChain);
3879
- runTest('ROUTE: toMermaid_loopEdge', testMachine_toMermaid_loopEdge);
3880
- runTest('ROUTE: toMermaid_emptyGraph', testMachine_toMermaid_emptyGraph);
3881
- runTest('ROUTE: toMermaid_fanIn', testMachine_toMermaid_fanIn);
3882
- runTest('ROUTE: toMermaid_fanOut', testMachine_toMermaid_fanOut);
3877
+ console.log('\n--- machine/mermaid ---');
3878
+ runTest('MACHINE:toMermaid_linearChain', testMachine_toMermaid_linearChain);
3879
+ runTest('MACHINE:toMermaid_loopEdge', testMachine_toMermaid_loopEdge);
3880
+ runTest('MACHINE:toMermaid_emptyGraph', testMachine_toMermaid_emptyGraph);
3881
+ runTest('MACHINE:toMermaid_fanIn', testMachine_toMermaid_fanIn);
3882
+ runTest('MACHINE:toMermaid_fanOut', testMachine_toMermaid_fanOut);
3883
3883
 
3884
3884
  // Phase 0B: CapRegistryClient
3885
3885
  console.log('\n--- registry/client ---');
package/package.json CHANGED
@@ -37,5 +37,5 @@
37
37
  "pretest": "npm run build:parser",
38
38
  "test": "node capdag.test.js"
39
39
  },
40
- "version": "0.95.25089"
40
+ "version": "0.96.25093"
41
41
  }