capdag 0.95.25089 → 0.98.25321
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/capdag.js +15 -15
- package/capdag.test.js +94 -94
- package/package.json +2 -2
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
|
-
//
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
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
|
|
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 -
|
|
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 =
|
|
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
|
-
'
|
|
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 -
|
|
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 -
|
|
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
|
|
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
|
-
//
|
|
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
|
-
//
|
|
2621
|
+
// Machine notation tests — mirrors Rust machine module tests exactly
|
|
2622
2622
|
// ============================================================================
|
|
2623
2623
|
|
|
2624
|
-
// ---
|
|
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
|
-
// ---
|
|
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
|
-
// ---
|
|
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
|
-
// ---
|
|
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
|
|
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
|
-
//
|
|
3792
|
-
console.log('\n---
|
|
3793
|
-
runTest('
|
|
3794
|
-
runTest('
|
|
3795
|
-
runTest('
|
|
3796
|
-
runTest('
|
|
3797
|
-
runTest('
|
|
3798
|
-
runTest('
|
|
3799
|
-
runTest('
|
|
3800
|
-
runTest('
|
|
3801
|
-
runTest('
|
|
3802
|
-
runTest('
|
|
3803
|
-
runTest('
|
|
3804
|
-
runTest('
|
|
3805
|
-
runTest('
|
|
3806
|
-
runTest('
|
|
3807
|
-
runTest('
|
|
3808
|
-
runTest('
|
|
3809
|
-
runTest('
|
|
3810
|
-
|
|
3811
|
-
//
|
|
3812
|
-
console.log('\n---
|
|
3813
|
-
runTest('
|
|
3814
|
-
runTest('
|
|
3815
|
-
runTest('
|
|
3816
|
-
runTest('
|
|
3817
|
-
runTest('
|
|
3818
|
-
runTest('
|
|
3819
|
-
runTest('
|
|
3820
|
-
runTest('
|
|
3821
|
-
runTest('
|
|
3822
|
-
runTest('
|
|
3823
|
-
runTest('
|
|
3824
|
-
runTest('
|
|
3825
|
-
runTest('
|
|
3826
|
-
runTest('
|
|
3827
|
-
runTest('
|
|
3828
|
-
runTest('
|
|
3829
|
-
runTest('
|
|
3830
|
-
|
|
3831
|
-
//
|
|
3832
|
-
console.log('\n---
|
|
3833
|
-
runTest('
|
|
3834
|
-
runTest('
|
|
3835
|
-
runTest('
|
|
3836
|
-
runTest('
|
|
3837
|
-
runTest('
|
|
3838
|
-
runTest('
|
|
3839
|
-
runTest('
|
|
3840
|
-
runTest('
|
|
3841
|
-
runTest('
|
|
3842
|
-
runTest('
|
|
3843
|
-
runTest('
|
|
3844
|
-
runTest('
|
|
3845
|
-
runTest('
|
|
3846
|
-
|
|
3847
|
-
//
|
|
3848
|
-
console.log('\n---
|
|
3849
|
-
runTest('
|
|
3850
|
-
runTest('
|
|
3851
|
-
runTest('
|
|
3852
|
-
runTest('
|
|
3853
|
-
runTest('
|
|
3854
|
-
|
|
3855
|
-
//
|
|
3856
|
-
console.log('\n---
|
|
3857
|
-
runTest('
|
|
3858
|
-
runTest('
|
|
3859
|
-
runTest('
|
|
3860
|
-
runTest('
|
|
3861
|
-
runTest('
|
|
3862
|
-
runTest('
|
|
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---
|
|
3866
|
-
runTest('
|
|
3867
|
-
runTest('
|
|
3868
|
-
runTest('
|
|
3869
|
-
runTest('
|
|
3870
|
-
runTest('
|
|
3871
|
-
runTest('
|
|
3872
|
-
runTest('
|
|
3873
|
-
runTest('
|
|
3874
|
-
runTest('
|
|
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---
|
|
3878
|
-
runTest('
|
|
3879
|
-
runTest('
|
|
3880
|
-
runTest('
|
|
3881
|
-
runTest('
|
|
3882
|
-
runTest('
|
|
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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"author": "Bahram Joharshamshiri",
|
|
3
3
|
"dependencies": {
|
|
4
4
|
"peggy": "^5.1.0",
|
|
5
|
-
"tagged-urn": "^0.
|
|
5
|
+
"tagged-urn": "^0.32.4960"
|
|
6
6
|
},
|
|
7
7
|
"description": "JavaScript implementation of Cap URN (Capability Uniform Resource Names) with strict validation and matching",
|
|
8
8
|
"engines": {
|
|
@@ -37,5 +37,5 @@
|
|
|
37
37
|
"pretest": "npm run build:parser",
|
|
38
38
|
"test": "node capdag.test.js"
|
|
39
39
|
},
|
|
40
|
-
"version": "0.
|
|
40
|
+
"version": "0.98.25321"
|
|
41
41
|
}
|