@memoarchitect/tools 0.10.8 → 0.11.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 +1 -1
- package/package.json +2 -2
- package/packages/tools/lib/analysis/dsm.d.ts.map +1 -1
- package/packages/tools/lib/analysis/dsm.js +9 -4
- package/packages/tools/lib/analysis/dsm.js.map +1 -1
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +23 -1
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/completeness/tracker.d.ts.map +1 -1
- package/packages/tools/lib/completeness/tracker.js +11 -4
- package/packages/tools/lib/completeness/tracker.js.map +1 -1
- package/packages/tools/lib/dhf/query-executor.d.ts +1 -1
- package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-executor.js +4 -4
- package/packages/tools/lib/dhf/query-executor.js.map +1 -1
- package/packages/tools/lib/dhf/template-lint.js +1 -1
- package/packages/tools/lib/dhf/template-lint.js.map +1 -1
- package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
- package/packages/tools/lib/mcp/tools.js +2 -1
- package/packages/tools/lib/mcp/tools.js.map +1 -1
- package/packages/tools/lib/model/builder.d.ts.map +1 -1
- package/packages/tools/lib/model/builder.js +223 -9
- package/packages/tools/lib/model/builder.js.map +1 -1
- package/packages/tools/lib/model/parser-utils.d.ts +2 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
- package/packages/tools/lib/model/parser-utils.js +30 -4
- package/packages/tools/lib/model/parser-utils.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +61 -2
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +38 -0
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +66 -20
- package/packages/tools/lib/model/view-deriver.js.map +1 -1
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +40 -4
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/package-source.d.ts +20 -1
- package/packages/tools/lib/server/package-source.d.ts.map +1 -1
- package/packages/tools/lib/server/package-source.js +23 -4
- package/packages/tools/lib/server/package-source.js.map +1 -1
- package/packages/tools/lib/server/package-writer.d.ts +18 -0
- package/packages/tools/lib/server/package-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/package-writer.js +58 -5
- package/packages/tools/lib/server/package-writer.js.map +1 -1
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +4 -1
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/validator/behavior-validator.d.ts +3 -5
- package/packages/tools/lib/validator/behavior-validator.d.ts.map +1 -1
- package/packages/tools/lib/validator/behavior-validator.js +28 -54
- package/packages/tools/lib/validator/behavior-validator.js.map +1 -1
- package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -1
- package/packages/tools/lib/validator/builtin-rules.js +14 -9
- package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.js +4 -0
- package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-engine.js +9 -2
- package/packages/tools/lib/validator/rule-engine.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,oCAAoC;AACpC,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/model/builder.ts"],"names":[],"mappings":"AAgGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/model/builder.ts"],"names":[],"mappings":"AAgGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAIR,SAAS,EAET,UAAU,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,KAAK,EAAE,eAAe,EAA6B,MAAM,wBAAwB,CAAC;AAGzF;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,uDAAuD;IACvD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC;AAsGD;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,SAAS,EAAE,cAAc,EAAE,EAC3B,MAAM,EAAE,UAAU,EAClB,WAAW,GAAE,UAAU,EAAO,EAC9B,UAAU,CAAC,EAAE,iBAAiB,GAC/B,SAAS,CAwRX;AAi5BD,qFAAqF;AACrF,eAAO,MAAM,oBAAoB,mBAAmB,CAAC"}
|
|
@@ -291,11 +291,78 @@ export function buildMemoModel(documents, config, parseErrors = [], registries)
|
|
|
291
291
|
incoming.set(rel.targetId, []);
|
|
292
292
|
incoming.get(rel.targetId).push(rel);
|
|
293
293
|
}
|
|
294
|
+
// A local definition has already resolved its own ontology kind; usages
|
|
295
|
+
// typed by it inherit that kind, including through a local definition chain.
|
|
296
|
+
if (registries?.kindRegistry) {
|
|
297
|
+
const byName = new Map();
|
|
298
|
+
for (const [id, el] of elements) {
|
|
299
|
+
if (!byName.has(id))
|
|
300
|
+
byName.set(id, el);
|
|
301
|
+
if (el.name && !byName.has(el.name))
|
|
302
|
+
byName.set(el.name, el);
|
|
303
|
+
}
|
|
304
|
+
const known = (kind) => Boolean(registries.kindRegistry?.getKind(kind));
|
|
305
|
+
for (let pass = 0; pass < 16; pass++) {
|
|
306
|
+
let progressed = false;
|
|
307
|
+
for (const el of elements.values()) {
|
|
308
|
+
if (!el.kind || known(el.kind))
|
|
309
|
+
continue;
|
|
310
|
+
const def = byName.get(el.kind.split('::').pop());
|
|
311
|
+
if (def && def !== el && def.kind && def.kind !== el.kind) {
|
|
312
|
+
el.kind = def.kind;
|
|
313
|
+
if (def.layer && (!el.layer || el.layer === 'unknown'))
|
|
314
|
+
el.layer = def.layer;
|
|
315
|
+
progressed = true;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (!progressed)
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const unresolvedReferences = [];
|
|
323
|
+
const reachableCache = new Map();
|
|
324
|
+
const reachableNames = (packageName, seen = new Set()) => {
|
|
325
|
+
if (seen.has(packageName))
|
|
326
|
+
return new Set();
|
|
327
|
+
seen.add(packageName);
|
|
328
|
+
const pkg = registry.getPackage(packageName);
|
|
329
|
+
if (!pkg)
|
|
330
|
+
return new Set();
|
|
331
|
+
const names = new Set(pkg.elementIds);
|
|
332
|
+
for (const imported of pkg.imports) {
|
|
333
|
+
if (imported.isWildcard) {
|
|
334
|
+
for (const name of reachableNames(imported.packageName, seen))
|
|
335
|
+
names.add(name);
|
|
336
|
+
}
|
|
337
|
+
else if (imported.namedImport)
|
|
338
|
+
names.add(imported.namedImport);
|
|
339
|
+
}
|
|
340
|
+
return names;
|
|
341
|
+
};
|
|
342
|
+
for (const [elementId, el] of elements) {
|
|
343
|
+
for (const [key, value] of Object.entries(el.attributes)) {
|
|
344
|
+
if (!key.endsWith('Type') || !value.includes('::'))
|
|
345
|
+
continue;
|
|
346
|
+
const parts = value.split('::');
|
|
347
|
+
const leaf = parts.pop().split('.')[0];
|
|
348
|
+
const packageName = parts.join('::');
|
|
349
|
+
if (!registry.getPackage(packageName))
|
|
350
|
+
continue;
|
|
351
|
+
const names = reachableCache.get(packageName) ?? reachableNames(packageName);
|
|
352
|
+
reachableCache.set(packageName, names);
|
|
353
|
+
if (!names.has(leaf)) {
|
|
354
|
+
unresolvedReferences.push({ elementId, elementName: el.name ?? elementId,
|
|
355
|
+
elementKind: el.kind ?? 'Element', reference: value, packageName,
|
|
356
|
+
missingName: leaf, file: el.file ?? '' });
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
294
360
|
return {
|
|
295
361
|
elements,
|
|
296
362
|
relationships,
|
|
297
363
|
errors,
|
|
298
364
|
packages: collectPackages(registry),
|
|
365
|
+
unresolvedReferences,
|
|
299
366
|
elementsByKind,
|
|
300
367
|
elementsByLayer,
|
|
301
368
|
relationshipsByType,
|
|
@@ -407,7 +474,10 @@ function extractFromPackage(pkg, filePath, parentPackage, config, elements, defe
|
|
|
407
474
|
break;
|
|
408
475
|
case 'UseCaseDeclaration': {
|
|
409
476
|
const useCase = member;
|
|
410
|
-
if (
|
|
477
|
+
if (useCase.isDefinition) {
|
|
478
|
+
extractDefinitionElement({ name: useCase.name, specialization: useCase.specialization, body: useCase.body ?? useCase.usageBody }, 'use case', filePath, packageName, config, elements, registry, registries);
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
411
481
|
extractUsage({ name: useCase.name, type: useCase.type, body: useCase.usageBody }, 'use case', filePath, packageName, config, elements, registry, registries);
|
|
412
482
|
}
|
|
413
483
|
break;
|
|
@@ -430,6 +500,9 @@ function extractFromPackage(pkg, filePath, parentPackage, config, elements, defe
|
|
|
430
500
|
case 'ViewUsage':
|
|
431
501
|
extractUsage(member, 'view', filePath, packageName, config, elements, registry, registries);
|
|
432
502
|
break;
|
|
503
|
+
case 'ViewpointUsage':
|
|
504
|
+
extractViewpointUsage(member, filePath, packageName, config, elements, registry, registries);
|
|
505
|
+
break;
|
|
433
506
|
case 'ConnectionUsage':
|
|
434
507
|
// Defer connection resolution until all elements are extracted
|
|
435
508
|
deferredConnections.push({
|
|
@@ -514,10 +587,24 @@ function extractFromPackage(pkg, filePath, parentPackage, config, elements, defe
|
|
|
514
587
|
case 'PortDefinition':
|
|
515
588
|
case 'InterfaceDefinition':
|
|
516
589
|
case 'ConnectionDefinition':
|
|
590
|
+
extractDefinitionElement(member, DEFINITION_CONSTRUCTS[member.$type], filePath, packageName, config, elements, registry, registries);
|
|
517
591
|
extractDefinitionPorts(member, filePath, packageName, config, elements, registry, registries);
|
|
592
|
+
// A definition's body is composition: `part def Pump { part
|
|
593
|
+
// motor : Motor; }` is what a BDD draws and what an IBD looks
|
|
594
|
+
// inside. Nested usages become elements owned by the
|
|
595
|
+
// definition, exactly as they do under a part usage.
|
|
596
|
+
extractNestedParts(member, filePath, packageName, config, elements, registry, registries);
|
|
597
|
+
break;
|
|
598
|
+
case 'RequirementDefinition':
|
|
599
|
+
case 'VerificationDefinition':
|
|
600
|
+
case 'StateDefinition':
|
|
601
|
+
case 'AttributeDefinition':
|
|
602
|
+
case 'EnumDefinition':
|
|
603
|
+
extractDefinitionElement(member, DEFINITION_CONSTRUCTS[member.$type], filePath, packageName, config, elements, registry, registries);
|
|
518
604
|
break;
|
|
519
|
-
//
|
|
520
|
-
//
|
|
605
|
+
// A `view def` / `viewpoint def` stays out: those are presentation
|
|
606
|
+
// apparatus, read through the viewpoint tree rather than as model
|
|
607
|
+
// content.
|
|
521
608
|
}
|
|
522
609
|
}
|
|
523
610
|
}
|
|
@@ -529,6 +616,8 @@ function extractUsage(usage, construct, filePath, packageName, config, elements,
|
|
|
529
616
|
? resolveKindDef(typeName, config, registries)
|
|
530
617
|
: { kindDef: undefined, resolvedKind: 'Unknown' };
|
|
531
618
|
const attributes = extractAttributes(usage.body);
|
|
619
|
+
if (typeName)
|
|
620
|
+
attributes.usageType = typeName;
|
|
532
621
|
const doc = extractDocComment(usage.body);
|
|
533
622
|
// A view's `expose <path>;` members declare its element membership
|
|
534
623
|
// natively — SysML v2's own visibility mechanism, in place of the MEMO
|
|
@@ -728,13 +817,30 @@ function extractActionDefinition(actionDef, filePath, packageName, config, eleme
|
|
|
728
817
|
const attributes = extractAttributes(bodyMembers);
|
|
729
818
|
const doc = extractDocComment(bodyMembers);
|
|
730
819
|
const behaviorKind = actionDef.behaviorKind ?? 'action';
|
|
820
|
+
// `action def AcquireSensorData :> FunctionalAction` defines a
|
|
821
|
+
// FunctionalAction. Stamping it `ActionDefinition` named the SysML
|
|
822
|
+
// METACLASS as though it were a MEMO kind — the ontology declares no such
|
|
823
|
+
// kind, so every project action def landed in the explorer's "not in
|
|
824
|
+
// ontology" bucket, and a validator had to look it up by that literal.
|
|
825
|
+
// The metaclass is what `construct` and `isDefinition` say; the kind is
|
|
826
|
+
// what the definition specializes.
|
|
827
|
+
const superType = actionDef.specialization?.superType;
|
|
828
|
+
const resolved = superType ? resolveKindDef(superType, config, registries) : undefined;
|
|
829
|
+
const ontologyKind = resolved?.kindDef && resolved.kindDef.layer && resolved.kindDef.layer !== 'unknown'
|
|
830
|
+
? resolved
|
|
831
|
+
: undefined;
|
|
731
832
|
const element = {
|
|
732
833
|
id,
|
|
733
834
|
name: id,
|
|
734
|
-
|
|
735
|
-
|
|
835
|
+
// Only where nothing resolves does the metaclass stand in, and there it
|
|
836
|
+
// is the truthful answer: this is a SysML ActionDefinition and nothing
|
|
837
|
+
// more is known about it.
|
|
838
|
+
kind: ontologyKind?.resolvedKind
|
|
839
|
+
?? (behaviorKind === 'operator' ? 'OperatorDefinition'
|
|
840
|
+
: behaviorKind === 'function' ? 'FunctionDefinition' : 'ActionDefinition'),
|
|
736
841
|
construct: 'action',
|
|
737
|
-
|
|
842
|
+
isDefinition: true,
|
|
843
|
+
layer: ontologyKind?.kindDef?.layer ?? 'behavior',
|
|
738
844
|
file: filePath,
|
|
739
845
|
package: packageName || undefined,
|
|
740
846
|
attributes: { ...attributes, behaviorKind },
|
|
@@ -820,6 +926,7 @@ function extractItemDefinition(itemDef, filePath, packageName, config, elements,
|
|
|
820
926
|
name: id,
|
|
821
927
|
kind: kindDef?.layer && kindDef.layer !== 'unknown' ? resolvedKind : 'ItemDefinition',
|
|
822
928
|
construct: 'item',
|
|
929
|
+
isDefinition: true,
|
|
823
930
|
layer: kindDef?.layer && kindDef.layer !== 'unknown' ? kindDef.layer : 'behavior',
|
|
824
931
|
file: filePath,
|
|
825
932
|
package: packageName || undefined,
|
|
@@ -844,6 +951,72 @@ function extractItemDefinition(itemDef, filePath, packageName, config, elements,
|
|
|
844
951
|
* or a state. So the native form was the only correct one, and it was the one
|
|
845
952
|
* that did not work.
|
|
846
953
|
*/
|
|
954
|
+
/**
|
|
955
|
+
* The SysML construct each definition declares, in the spelling its usages
|
|
956
|
+
* carry — a `part def` and a `part` are the same construct, one defining and
|
|
957
|
+
* one using.
|
|
958
|
+
*/
|
|
959
|
+
const DEFINITION_CONSTRUCTS = {
|
|
960
|
+
PartDefinition: 'part',
|
|
961
|
+
PortDefinition: 'port',
|
|
962
|
+
InterfaceDefinition: 'interface',
|
|
963
|
+
ConnectionDefinition: 'connection',
|
|
964
|
+
RequirementDefinition: 'requirement',
|
|
965
|
+
VerificationDefinition: 'verification',
|
|
966
|
+
StateDefinition: 'state',
|
|
967
|
+
AttributeDefinition: 'attribute',
|
|
968
|
+
EnumDefinition: 'enumeration',
|
|
969
|
+
};
|
|
970
|
+
/**
|
|
971
|
+
* A definition the PROJECT declares, as a model element.
|
|
972
|
+
*
|
|
973
|
+
* `part def Pump :> LogicalComponent` defines a Pump. It was registered as a
|
|
974
|
+
* kind and nothing else, so no view could select it and no BDD or IBD could
|
|
975
|
+
* draw it — which is most of what a definition is for. It is an element now,
|
|
976
|
+
* and its usages read beneath it: a usage's `kind` is the definition's name,
|
|
977
|
+
* which is the link every explorer already follows.
|
|
978
|
+
*
|
|
979
|
+
* The kind it carries is the ONTOLOGY kind it specializes, so a view, a
|
|
980
|
+
* viewpoint filter and a palette that admit `LogicalComponent` admit the
|
|
981
|
+
* definition of one without being edited. `isDefinition` is what tells the two
|
|
982
|
+
* apart afterwards — a definition is a type, not an instance of one, and
|
|
983
|
+
* anything counting instances must say so.
|
|
984
|
+
*
|
|
985
|
+
* This is only ever project content: the ontology's own definitions are read
|
|
986
|
+
* by the kind registry and are never parsed into the model.
|
|
987
|
+
*/
|
|
988
|
+
function extractDefinitionElement(definition, construct, filePath, packageName, config, elements, registry, registries) {
|
|
989
|
+
const id = definition.name;
|
|
990
|
+
if (!id || elements.has(id))
|
|
991
|
+
return;
|
|
992
|
+
// A `library package` is how a project writes ontology-style content: its
|
|
993
|
+
// definitions are types for other models to use, not this model's content.
|
|
994
|
+
// The user's distinction exactly — model definitions become elements,
|
|
995
|
+
// library ones stay kinds, which is what they already were.
|
|
996
|
+
if (registry.isLibraryPackage(packageName))
|
|
997
|
+
return;
|
|
998
|
+
const superType = definition.specialization?.superType;
|
|
999
|
+
const { kindDef, resolvedKind } = superType
|
|
1000
|
+
? resolveKindDef(superType, config, registries)
|
|
1001
|
+
: { kindDef: undefined, resolvedKind: undefined };
|
|
1002
|
+
const attributes = extractAttributes(definition.body ?? []);
|
|
1003
|
+
const doc = extractDocComment(definition.body ?? []);
|
|
1004
|
+
elements.set(id, {
|
|
1005
|
+
id,
|
|
1006
|
+
name: attributes['name'] || attributes['title'] || id,
|
|
1007
|
+
// A definition that specializes nothing the ontology knows is still a
|
|
1008
|
+
// definition; it says so rather than borrowing a kind it has not got.
|
|
1009
|
+
kind: resolvedKind ?? `${construct.charAt(0).toUpperCase()}${construct.slice(1)}Definition`,
|
|
1010
|
+
construct,
|
|
1011
|
+
layer: kindDef?.layer || 'unknown',
|
|
1012
|
+
file: filePath,
|
|
1013
|
+
package: packageName || undefined,
|
|
1014
|
+
attributes,
|
|
1015
|
+
doc,
|
|
1016
|
+
isDefinition: true,
|
|
1017
|
+
});
|
|
1018
|
+
registry.registerElement(id, packageName);
|
|
1019
|
+
}
|
|
847
1020
|
function extractDefinitionPorts(def, filePath, packageName, config, elements, registry, registries) {
|
|
848
1021
|
const ownerId = def.name;
|
|
849
1022
|
const body = def.body || [];
|
|
@@ -943,7 +1116,12 @@ function extractNestedPackages(owner, filePath, packageName, config, elements, r
|
|
|
943
1116
|
});
|
|
944
1117
|
for (const grouped of pm.members ?? []) {
|
|
945
1118
|
const gm = grouped;
|
|
946
|
-
|
|
1119
|
+
// `part btnBack : UIElement;` parses as a PartMember and
|
|
1120
|
+
// `part btnBack : UIElement { … }` as a PartUsage — the same
|
|
1121
|
+
// declaration with and without a body. Accepting only the first
|
|
1122
|
+
// dropped every grouped element that declares anything, which is
|
|
1123
|
+
// most of them.
|
|
1124
|
+
const isPart = gm.$type === 'PartMember' || gm.$type === 'PartUsage';
|
|
947
1125
|
const isItem = gm.$type === 'ItemUsage' && !gm.direction;
|
|
948
1126
|
if (!isPart && !isItem)
|
|
949
1127
|
continue;
|
|
@@ -961,6 +1139,34 @@ function extractNestedPackages(owner, filePath, packageName, config, elements, r
|
|
|
961
1139
|
}
|
|
962
1140
|
/** The kind a nested grouping package becomes, distinct from a namespace package. */
|
|
963
1141
|
export const ELEMENT_PACKAGE_KIND = 'ElementPackage';
|
|
1142
|
+
/**
|
|
1143
|
+
* A `viewpoint` usage, and any viewpoint declared inside it.
|
|
1144
|
+
*
|
|
1145
|
+
* A viewpoint nests for system-of-systems modelling: the viewpoint that frames
|
|
1146
|
+
* the whole system of systems declares one viewpoint per constituent system,
|
|
1147
|
+
* which is how ISO 42010 composes a description of a description. Native SysML
|
|
1148
|
+
* already permits it (`ViewpointUsage` is a `UsageBodyMember`) and the grammar
|
|
1149
|
+
* already parsed it — nothing extracted it, so a nested viewpoint became no
|
|
1150
|
+
* element at all and every consumer saw one flat list.
|
|
1151
|
+
*
|
|
1152
|
+
* The nested viewpoint carries its parent in `owner`, the same way a nested
|
|
1153
|
+
* part does. Unlike a part, no `composes` edge is synthesized: a viewpoint is
|
|
1154
|
+
* not a `part` construct, and framing is not containment of hardware.
|
|
1155
|
+
*/
|
|
1156
|
+
function extractViewpointUsage(usage, filePath, packageName, config, elements, registry, registries, ownerId) {
|
|
1157
|
+
if (!usage.name)
|
|
1158
|
+
return;
|
|
1159
|
+
extractUsage({ name: usage.name, type: usage.type, body: usage.body }, 'viewpoint', filePath, packageName, config, elements, registry, registries);
|
|
1160
|
+
const element = elements.get(usage.name);
|
|
1161
|
+
if (element && ownerId)
|
|
1162
|
+
element.owner = ownerId;
|
|
1163
|
+
for (const member of usage.body || []) {
|
|
1164
|
+
const nested = member;
|
|
1165
|
+
if (nested.$type !== 'ViewpointUsage')
|
|
1166
|
+
continue;
|
|
1167
|
+
extractViewpointUsage(nested, filePath, packageName, config, elements, registry, registries, usage.name);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
964
1170
|
/**
|
|
965
1171
|
* Extract an ActionUsage, including nested actions, flows, and successions.
|
|
966
1172
|
* Supports both typed (action name : Type;) and composite (action name { ... }) forms.
|
|
@@ -1132,7 +1338,15 @@ function resolveConnection(conn, filePath, packageName, config, elements, relati
|
|
|
1132
1338
|
* mismatch on whichever edge happened to carry a different item from its
|
|
1133
1339
|
* parent's.
|
|
1134
1340
|
*
|
|
1135
|
-
* Walk the path through
|
|
1341
|
+
* Walk the path through the parent link and take the deepest real element.
|
|
1342
|
+
*
|
|
1343
|
+
* A nested part or port records its parent in `owner`; a nested ACTION records
|
|
1344
|
+
* it in `parentAction`, because the two are set by separate extraction paths.
|
|
1345
|
+
* Reading only `owner` broke the walk at the first hop of every function path:
|
|
1346
|
+
* `flow from fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to …` became a
|
|
1347
|
+
* self-loop on `fnDeliverTherapy`, which is a plausible-looking edge pointing
|
|
1348
|
+
* at the wrong function — the exact failure the comment above describes, one
|
|
1349
|
+
* field away from where it was fixed for ports.
|
|
1136
1350
|
*/
|
|
1137
1351
|
function resolveEndpoint(ref, elements) {
|
|
1138
1352
|
const parts = ref.split('.');
|
|
@@ -1140,7 +1354,7 @@ function resolveEndpoint(ref, elements) {
|
|
|
1140
1354
|
let i = 1;
|
|
1141
1355
|
while (i < parts.length) {
|
|
1142
1356
|
const child = elements.get(parts[i]);
|
|
1143
|
-
if (!child || child.owner !== id)
|
|
1357
|
+
if (!child || (child.owner !== id && child.parentAction !== id))
|
|
1144
1358
|
break;
|
|
1145
1359
|
id = parts[i];
|
|
1146
1360
|
i++;
|