@memoarchitect/tools 0.4.6 → 0.6.0

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 (111) hide show
  1. package/README.md +5 -5
  2. package/package.json +3 -3
  3. package/packages/tools/lib/bin/memo.js +1 -1
  4. package/packages/tools/lib/browser/index.d.ts +2 -0
  5. package/packages/tools/lib/browser/index.d.ts.map +1 -1
  6. package/packages/tools/lib/browser/index.js +2 -0
  7. package/packages/tools/lib/browser/index.js.map +1 -1
  8. package/packages/tools/lib/commands/create-package.js +1 -1
  9. package/packages/tools/lib/commands/dev.d.ts.map +1 -1
  10. package/packages/tools/lib/commands/dev.js +40 -5
  11. package/packages/tools/lib/commands/dev.js.map +1 -1
  12. package/packages/tools/lib/commands/install.js +1 -1
  13. package/packages/tools/lib/commands/ontology.js +1 -1
  14. package/packages/tools/lib/commands/ontology.js.map +1 -1
  15. package/packages/tools/lib/dhf/document-registry.js +5 -5
  16. package/packages/tools/lib/dhf/document-registry.js.map +1 -1
  17. package/packages/tools/lib/dhf/template-engine.js +3 -3
  18. package/packages/tools/lib/dhf/template-engine.js.map +1 -1
  19. package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -1
  20. package/packages/tools/lib/importer/cameo-importer.js +5 -2
  21. package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
  22. package/packages/tools/lib/importer/ea-importer.d.ts +1 -1
  23. package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
  24. package/packages/tools/lib/importer/ea-importer.js +6 -4
  25. package/packages/tools/lib/importer/ea-importer.js.map +1 -1
  26. package/packages/tools/lib/index.d.ts +2 -0
  27. package/packages/tools/lib/index.d.ts.map +1 -1
  28. package/packages/tools/lib/index.js +2 -0
  29. package/packages/tools/lib/index.js.map +1 -1
  30. package/packages/tools/lib/language/generated/ast.d.ts +409 -42
  31. package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
  32. package/packages/tools/lib/language/generated/ast.js +318 -12
  33. package/packages/tools/lib/language/generated/ast.js.map +1 -1
  34. package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
  35. package/packages/tools/lib/language/generated/grammar.js +1732 -513
  36. package/packages/tools/lib/language/generated/grammar.js.map +1 -1
  37. package/packages/tools/lib/model/builder.d.ts.map +1 -1
  38. package/packages/tools/lib/model/builder.js +38 -14
  39. package/packages/tools/lib/model/builder.js.map +1 -1
  40. package/packages/tools/lib/model/config.d.ts +11 -1
  41. package/packages/tools/lib/model/config.d.ts.map +1 -1
  42. package/packages/tools/lib/model/kind-registry.d.ts +9 -0
  43. package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
  44. package/packages/tools/lib/model/kind-registry.js +26 -3
  45. package/packages/tools/lib/model/kind-registry.js.map +1 -1
  46. package/packages/tools/lib/model/layer-resolver.d.ts.map +1 -1
  47. package/packages/tools/lib/model/layer-resolver.js +15 -0
  48. package/packages/tools/lib/model/layer-resolver.js.map +1 -1
  49. package/packages/tools/lib/model/ontology-loader.d.ts +2 -0
  50. package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
  51. package/packages/tools/lib/model/ontology-loader.js +92 -28
  52. package/packages/tools/lib/model/ontology-loader.js.map +1 -1
  53. package/packages/tools/lib/model/parser-utils.d.ts +9 -0
  54. package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
  55. package/packages/tools/lib/model/parser-utils.js +24 -0
  56. package/packages/tools/lib/model/parser-utils.js.map +1 -1
  57. package/packages/tools/lib/model/paths.d.ts +0 -2
  58. package/packages/tools/lib/model/paths.d.ts.map +1 -1
  59. package/packages/tools/lib/model/paths.js +0 -2
  60. package/packages/tools/lib/model/paths.js.map +1 -1
  61. package/packages/tools/lib/model/relationship-legality.d.ts +261 -0
  62. package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -0
  63. package/packages/tools/lib/model/relationship-legality.js +391 -0
  64. package/packages/tools/lib/model/relationship-legality.js.map +1 -0
  65. package/packages/tools/lib/model/relationship-registry.d.ts +38 -4
  66. package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
  67. package/packages/tools/lib/model/relationship-registry.js +109 -1
  68. package/packages/tools/lib/model/relationship-registry.js.map +1 -1
  69. package/packages/tools/lib/model/semantic.d.ts +42 -0
  70. package/packages/tools/lib/model/semantic.d.ts.map +1 -1
  71. package/packages/tools/lib/model/semantic.js +3 -0
  72. package/packages/tools/lib/model/semantic.js.map +1 -1
  73. package/packages/tools/lib/model/short-id.js +1 -1
  74. package/packages/tools/lib/model/short-id.js.map +1 -1
  75. package/packages/tools/lib/model/source-affinity.d.ts +21 -0
  76. package/packages/tools/lib/model/source-affinity.d.ts.map +1 -0
  77. package/packages/tools/lib/model/source-affinity.js +42 -0
  78. package/packages/tools/lib/model/source-affinity.js.map +1 -0
  79. package/packages/tools/lib/model/source-graph.d.ts +30 -0
  80. package/packages/tools/lib/model/source-graph.d.ts.map +1 -0
  81. package/packages/tools/lib/model/source-graph.js +154 -0
  82. package/packages/tools/lib/model/source-graph.js.map +1 -0
  83. package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
  84. package/packages/tools/lib/model/view-kinds.js +1 -0
  85. package/packages/tools/lib/model/view-kinds.js.map +1 -1
  86. package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
  87. package/packages/tools/lib/operations/project-snapshot.js +2 -15
  88. package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
  89. package/packages/tools/lib/protocol/messages.d.ts +92 -8
  90. package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
  91. package/packages/tools/lib/server/dev-server.d.ts +16 -0
  92. package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
  93. package/packages/tools/lib/server/dev-server.js +190 -16
  94. package/packages/tools/lib/server/dev-server.js.map +1 -1
  95. package/packages/tools/lib/server/file-watcher.d.ts +21 -2
  96. package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
  97. package/packages/tools/lib/server/file-watcher.js +55 -23
  98. package/packages/tools/lib/server/file-watcher.js.map +1 -1
  99. package/packages/tools/lib/server/persistor.d.ts +0 -13
  100. package/packages/tools/lib/server/persistor.d.ts.map +1 -1
  101. package/packages/tools/lib/server/persistor.js +3 -31
  102. package/packages/tools/lib/server/persistor.js.map +1 -1
  103. package/packages/tools/lib/server/relationship-writer.d.ts +104 -0
  104. package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -0
  105. package/packages/tools/lib/server/relationship-writer.js +402 -0
  106. package/packages/tools/lib/server/relationship-writer.js.map +1 -0
  107. package/packages/tools/lib/server/view-layout-store.d.ts +14 -1
  108. package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
  109. package/packages/tools/lib/server/view-layout-store.js +63 -11
  110. package/packages/tools/lib/server/view-layout-store.js.map +1 -1
  111. package/packages/tools/src/grammar/memo-sysml.langium +102 -18
@@ -47,6 +47,9 @@ PackageMember:
47
47
  | ImportDeclaration
48
48
  | DefinitionMember
49
49
  | UsageMember
50
+ | ItemUsage
51
+ | AttributeMember
52
+ | UseCaseDeclaration
50
53
  | ConnectionUsage
51
54
  | AllocateUsage
52
55
  | MetadataApplication
@@ -56,7 +59,10 @@ PackageMember:
56
59
  // owns a unique package for reliable SysIDE indexing; aliases reconstruct the
57
60
  // user-facing hierarchy without reopening packages across documents.
58
61
  AliasDeclaration:
59
- 'alias' name=ID 'for' target=QualifiedName ';';
62
+ 'alias' name=AliasName 'for' target=QualifiedName ';';
63
+
64
+ AliasName returns string:
65
+ ID | 'verification';
60
66
 
61
67
  // ─── Import ──────────────────────────────────────────────────────────────────
62
68
 
@@ -73,6 +79,8 @@ ImportPath returns string:
73
79
  DefinitionMember:
74
80
  PartDefinition
75
81
  | RequirementDefinition
82
+ | VerificationDefinition
83
+ | StateDefinition
76
84
  | ActionDefinition
77
85
  | ItemDefinition
78
86
  | PortDefinition
@@ -104,6 +112,18 @@ RequirementDefinition:
104
112
  isAbstract?='abstract'? 'requirement' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
105
113
  ('{' body+=DefinitionBodyMember* '}' | ';');
106
114
 
115
+ // SysML v2 verification case definition (VerificationCases::VerificationCase).
116
+ // A behaviour, so it may not specialize a part-based MEMO base.
117
+ VerificationDefinition:
118
+ isAbstract?='abstract'? 'verification' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
119
+ ('{' body+=DefinitionBodyMember* '}' | ';');
120
+
121
+ // SysML v2 state definition (States::StateAction) — a behaviour. MEMO uses it
122
+ // for state machines and their mode states; transitions stay part-based.
123
+ StateDefinition:
124
+ isAbstract?='abstract'? 'state' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
125
+ ('{' body+=DefinitionBodyMember* '}' | ';');
126
+
107
127
  ActionDefinition:
108
128
  isAbstract?='abstract'? behaviorKind=('action' | 'operator' | 'function') 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
109
129
  ('{' body+=ActionDefBodyMember* '}' | ';');
@@ -116,9 +136,11 @@ PortDefinition:
116
136
  isAbstract?='abstract'? 'port' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
117
137
  ('{' body+=DefinitionBodyMember* '}' | ';');
118
138
 
139
+ // Interface defs, like connection defs, may declare `end` features naming the
140
+ // two sides of the interface (e.g. end providerPort / end consumerPort).
119
141
  InterfaceDefinition:
120
142
  isAbstract?='abstract'? 'interface' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
121
- ('{' body+=DefinitionBodyMember* '}' | ';');
143
+ ('{' body+=ConnectionBodyMember* '}' | ';');
122
144
 
123
145
  ConnectionDefinition:
124
146
  isAbstract?='abstract'? 'connection' 'def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
@@ -151,7 +173,7 @@ ConnectionBodyMember:
151
173
  EndDeclaration | DefinitionBodyMember;
152
174
 
153
175
  EndDeclaration:
154
- 'end' name=FeatureName (':' type=QualifiedName)? multiplicity=Multiplicity? ';';
176
+ 'end' name=FeatureName (':' isConjugated?='~'? type=QualifiedName)? multiplicity=Multiplicity? ';';
155
177
 
156
178
  Multiplicity:
157
179
  '[' lower=INT '..' (upper=INT | unbounded?='*') ']'
@@ -164,27 +186,66 @@ EnumLiteral:
164
186
  'enum' name=EnumLiteralName ';';
165
187
 
166
188
  EnumLiteralName returns string:
167
- ID | 'in' | 'out' | 'inout' | 'part' | 'requirement' | 'action' | 'item' | 'port'
189
+ ID | UNRESTRICTED_NAME
190
+ | 'in' | 'out' | 'inout' | 'part' | 'requirement' | 'action' | 'item' | 'port'
168
191
  | 'interface' | 'connection' | 'attribute' | 'constraint' | 'enum' | 'view' | 'viewpoint'
169
- | 'ref' | 'import' | 'package' | 'flow' | 'first' | 'allocate' | 'library' | 'private' | 'public';
192
+ | 'ref' | 'import' | 'package' | 'flow' | 'first' | 'allocate' | 'library' | 'private' | 'public' | 'state' | 'verification'
193
+ | 'use' | 'fork' | 'join';
170
194
 
171
195
  // ─── Usages (instances) ─────────────────────────────────────────────────────
172
196
 
173
197
  UsageMember:
174
198
  PartUsage
175
199
  | RequirementUsage
200
+ | VerificationUsage
201
+ | StateUsage
202
+ | InterfaceUsage
176
203
  | ActionUsage
177
204
  | PortUsage
178
205
  | ViewUsage;
179
206
 
180
207
  PartUsage:
181
- 'part' name=ID ':' type=QualifiedName
208
+ 'part' name=ID (':' type=QualifiedName)?
209
+ ('{' body+=UsageBodyMember* '}' | ';');
210
+
211
+ // SysML v2 `use case def` / `use case` share a single leading `use case` token
212
+ // pair. Branching inside one rule keeps the def-vs-usage decision local instead
213
+ // of forcing cross-alternative lookahead past the `case` keyword.
214
+ UseCaseDeclaration:
215
+ isAbstract?='abstract'? 'use' 'case'
216
+ ( isDefinition?='def' name=ID specialization=Specialization? (',' additionalSpecializations+=QualifiedName)*
217
+ ('{' body+=DefinitionBodyMember* '}' | ';')
218
+ | name=ID (':' type=QualifiedName)?
219
+ ('{' usageBody+=UsageBodyMember* '}' | ';')
220
+ );
221
+
222
+ // Item usage: standalone (`item x : T { … }`), directioned port payload
223
+ // (`in item reading : T;` / `out item command : T;`), or a bound feature value.
224
+ ItemUsage:
225
+ direction=('in' | 'out' | 'inout')? 'item' name=MemberName
226
+ (':' type=QualifiedName multiplicity=Multiplicity?)?
227
+ ('=' boundRef=QualifiedName)?
182
228
  ('{' body+=UsageBodyMember* '}' | ';');
183
229
 
184
230
  RequirementUsage:
185
231
  'requirement' name=ID ':' type=QualifiedName
186
232
  ('{' body+=UsageBodyMember* '}' | ';');
187
233
 
234
+ // SysML v2 verification case usage: `verification vc : SomeCase { … }`.
235
+ VerificationUsage:
236
+ 'verification' name=ID ':' type=QualifiedName
237
+ ('{' body+=UsageBodyMember* '}' | ';');
238
+
239
+ // SysML v2 state usage: `state modeIdle : ModeState { … }`.
240
+ StateUsage:
241
+ 'state' name=ID ':' type=QualifiedName
242
+ ('{' body+=UsageBodyMember* '}' | ';');
243
+
244
+ // SysML v2 interface usage: `interface siData : Interface { … }`.
245
+ InterfaceUsage:
246
+ 'interface' name=ID ':' type=QualifiedName
247
+ ('{' body+=UsageBodyMember* '}' | ';');
248
+
188
249
  // ActionUsage supports both typed (action name : Type;) and composite
189
250
  // (action name { nested-actions, flows, successions }) forms.
190
251
  ActionUsage:
@@ -211,9 +272,17 @@ ExposePath returns string:
211
272
  // ─── Connection usage (typed relationship instances) ─────────────────────────
212
273
  // Syntax: connection : Type connect end1 ::> ref1 to end2 ::> ref2 ;
213
274
 
275
+ // A connection usage may carry a name. Named connections get a stable
276
+ // relationship ID that survives rebuilds, which authoring needs for
277
+ // inspection, deletion, and deep links.
214
278
  ConnectionUsage:
215
- 'connection' (':' type=QualifiedName)?
216
- 'connect' source=ConnectionEnd 'to' target=ConnectionEnd ';';
279
+ 'connection' name=ID? (':' type=QualifiedName)?
280
+ ( 'connect' source=ConnectionEnd 'to' target=ConnectionEnd
281
+ ('{' body+=UsageBodyMember* '}' | ';')
282
+ | '{' body+=UsageBodyMember*
283
+ 'connect' source=ConnectionEnd 'to' target=ConnectionEnd ';'
284
+ '}'
285
+ );
217
286
 
218
287
  ConnectionEnd:
219
288
  endName=FeatureName '::>' ref=ReferenceName;
@@ -230,8 +299,10 @@ ActionParameterMember:
230
299
  // ─── Behavior: Action usage body ────────────────────────────────────────────
231
300
  // Composite actions contain nested actions, flow connections, successions
232
301
 
302
+ // FlowConnectionUsage / SuccessionUsage / ConnectionUsage are contributed by
303
+ // UsageBodyMember; listing them again here would make the alternatives ambiguous.
233
304
  ActionUsageBodyMember:
234
- ActionUsage | ControlNodeUsage | FlowConnectionUsage | SuccessionUsage | UsageBodyMember;
305
+ ActionUsage | ControlNodeUsage | UsageBodyMember;
235
306
 
236
307
  // ─── Behavior: Control nodes (fork / join) ──────────────────────────────────
237
308
  // SysML v2 activity control nodes. A `fork` splits one incoming control flow
@@ -285,7 +356,7 @@ ReferenceName returns string:
285
356
  // ─── Body members ────────────────────────────────────────────────────────────
286
357
 
287
358
  DefinitionBodyMember:
288
- AttributeMember | PartMember | PortUsage | ViewUsage | RefMember | RequireConstraintMember | MetadataApplication | DocComment;
359
+ AttributeMember | PartMember | PortUsage | ItemUsage | ViewUsage | RefMember | RequireConstraintMember | MetadataApplication | DocComment;
289
360
 
290
361
  // ─── Constraint expression (KerML boolean subset — ADR-1-18) ─────────────────
291
362
  // Authored inside constraint def / requirement def bodies as:
@@ -329,7 +400,7 @@ PrimaryExpr infers ConstraintExpr:
329
400
  // value — the bare `name = value;` shorthand is non-standard and is not accepted.
330
401
  // Use `attribute redefines name = value;` (the form the serializer emits).
331
402
  UsageBodyMember:
332
- AttributeMember | PartMember | PortUsage | ViewUsage | MetadataApplication | DocComment;
403
+ AttributeMember | PartMember | PortUsage | ItemUsage | RefMember | ViewUsage | FlowConnectionUsage | SuccessionUsage | ConnectionUsage | MetadataApplication | DocComment;
333
404
 
334
405
  // ─── Attribute member ────────────────────────────────────────────────────────
335
406
  // Two forms:
@@ -337,8 +408,9 @@ UsageBodyMember:
337
408
  // attribute redefines name = value ; (value assignment / redefinition)
338
409
 
339
410
  AttributeMember:
340
- 'attribute' redefines?=('redefines' | ':>>')? name=ID
341
- (':' type=QualifiedName multiplicity=Multiplicity? ';' | '=' value=AttributeValue ';');
411
+ 'attribute' redefines?=('redefines' | ':>>')? name=MemberName
412
+ (':' type=QualifiedName multiplicity=Multiplicity? ('{' body+=UsageBodyMember* '}' | ';')
413
+ | '=' value=AttributeValue ';');
342
414
 
343
415
  AttributeValue:
344
416
  StringValue | RealValue | IntValue | BooleanValue | SetLiteral | EnumValue;
@@ -385,10 +457,17 @@ PartMember:
385
457
  ('{' body+=UsageBodyMember* '}' | ';');
386
458
 
387
459
  // ─── Reference member ───────────────────────────────────────────────────────
388
- // e.g. ref subject : TraceableElement[*];
460
+ // Forms:
461
+ // ref subject : TraceableElement[*]; (typed reference feature)
462
+ // ref function : SystemFunction[0..1]; (keyword-named reference)
463
+ // ref item exchangedItem : ExchangeItem; (item-typed reference payload)
464
+ // ref :>> definition = syringeDef; (redefining a reference to a value)
389
465
 
390
466
  RefMember:
391
- 'ref' name=ID ':' type=QualifiedName multiplicity=Multiplicity? ';';
467
+ 'ref' (isItem?='item')? (redefines?=':>>')? name=FeatureName
468
+ (':' isConjugated?='~'? type=QualifiedName multiplicity=Multiplicity?)?
469
+ ('=' value=AttributeValue)?
470
+ ';';
392
471
 
393
472
  // ─── Doc comment ─────────────────────────────────────────────────────────────
394
473
  // Captured as a single terminal to prevent hidden ML_COMMENT from consuming it
@@ -415,19 +494,21 @@ QualifiedNameSegment returns string:
415
494
  // avoid ambiguity with usage prefixes at statement start.
416
495
  QualifiedNameTailSegment returns string:
417
496
  QualifiedNameSegment
497
+ | UNRESTRICTED_NAME
418
498
  | 'in' | 'out' | 'inout' | 'part' | 'requirement' | 'action' | 'item' | 'port'
419
499
  | 'interface' | 'connection' | 'attribute' | 'constraint' | 'enum' | 'view' | 'viewpoint'
420
- | 'ref' | 'import' | 'package' | 'flow' | 'first' | 'allocate' | 'private' | 'public';
500
+ | 'ref' | 'import' | 'package' | 'flow' | 'first' | 'allocate' | 'private' | 'public' | 'state' | 'verification'
501
+ | 'use' | 'fork' | 'join';
421
502
 
422
503
  // Allow keywords as identifiers in member/feature contexts
423
504
  MemberName returns string:
424
505
  ID | 'requirement' | 'action' | 'item' | 'port' | 'interface' | 'connection'
425
- | 'attribute' | 'constraint' | 'view' | 'viewpoint' | 'ref' | 'part';
506
+ | 'attribute' | 'constraint' | 'view' | 'viewpoint' | 'ref' | 'part' | 'state' | 'verification';
426
507
 
427
508
  FeatureName returns string:
428
509
  ID | 'part' | 'requirement' | 'action' | 'item' | 'port' | 'interface'
429
510
  | 'connection' | 'flow' | 'view' | 'viewpoint' | 'attribute' | 'constraint'
430
- | 'ref' | 'allocate' | 'end' | 'enum' | 'function' | 'operator';
511
+ | 'ref' | 'allocate' | 'end' | 'enum' | 'function' | 'operator' | 'state' | 'verification';
431
512
 
432
513
  // ─── Hidden terminals (skipped by lexer) ─────────────────────────────────────
433
514
 
@@ -443,6 +524,9 @@ hidden terminal ML_COMMENT: /\/\*[\s\S]*?\*\//;
443
524
  terminal DOC_COMMENT: /doc\s+\/\*[\s\S]*?\*\//;
444
525
 
445
526
  terminal ID: /[a-zA-Z_][a-zA-Z0-9_]*/;
527
+ // SysML v2 unrestricted name: any text in single quotes, used when a name would
528
+ // otherwise collide with a reserved word (e.g. enum 'verification';).
529
+ terminal UNRESTRICTED_NAME: /'(?:[^'\\]|\\.)*'/;
446
530
  terminal STRING: /"(?:[^"\\]|\\.)*"/;
447
531
  // REAL must be declared before INT so the longest-match lexer emits a single
448
532
  // REAL token for `20.0` rather than INT `.` INT.