@memoarchitect/tools 0.6.7 → 0.8.7
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 +36 -11
- package/corpus/README.md +63 -0
- package/corpus/sysml-v2-release/bnf/SysML-graphical-bnf.kgbnf +2264 -0
- package/package.json +20 -7
- package/packages/tools/lib/analysis/dsm.d.ts +1 -1
- package/packages/tools/lib/analysis/dsm.d.ts.map +1 -1
- package/packages/tools/lib/analysis/dsm.js +1 -1
- package/packages/tools/lib/analysis/dsm.js.map +1 -1
- package/packages/tools/lib/bin/memo.js +186 -10
- package/packages/tools/lib/bin/memo.js.map +1 -1
- package/packages/tools/lib/browser/index.d.ts +3 -1
- package/packages/tools/lib/browser/index.d.ts.map +1 -1
- package/packages/tools/lib/browser/index.js +2 -1
- package/packages/tools/lib/browser/index.js.map +1 -1
- package/packages/tools/lib/commands/ask.js +1 -1
- package/packages/tools/lib/commands/ask.js.map +1 -1
- package/packages/tools/lib/commands/check.d.ts.map +1 -1
- package/packages/tools/lib/commands/check.js +3 -9
- package/packages/tools/lib/commands/check.js.map +1 -1
- package/packages/tools/lib/commands/conformance.d.ts +36 -0
- package/packages/tools/lib/commands/conformance.d.ts.map +1 -0
- package/packages/tools/lib/commands/conformance.js +212 -0
- package/packages/tools/lib/commands/conformance.js.map +1 -0
- package/packages/tools/lib/commands/convert.d.ts +12 -0
- package/packages/tools/lib/commands/convert.d.ts.map +1 -0
- package/packages/tools/lib/commands/convert.js +103 -0
- package/packages/tools/lib/commands/convert.js.map +1 -0
- package/packages/tools/lib/commands/create-package.d.ts +1 -2
- package/packages/tools/lib/commands/create-package.d.ts.map +1 -1
- package/packages/tools/lib/commands/create-package.js.map +1 -1
- package/packages/tools/lib/commands/dev.d.ts +13 -0
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +245 -89
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/commands/dhf-draft.js +1 -1
- package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
- package/packages/tools/lib/commands/dhf-lint.d.ts +10 -0
- package/packages/tools/lib/commands/dhf-lint.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf-lint.js +72 -0
- package/packages/tools/lib/commands/dhf-lint.js.map +1 -0
- package/packages/tools/lib/commands/dhf-preview.js +1 -1
- package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
- package/packages/tools/lib/commands/dhf.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf.js +8 -2
- package/packages/tools/lib/commands/dhf.js.map +1 -1
- package/packages/tools/lib/commands/element.d.ts +34 -0
- package/packages/tools/lib/commands/element.d.ts.map +1 -0
- package/packages/tools/lib/commands/element.js +174 -0
- package/packages/tools/lib/commands/element.js.map +1 -0
- package/packages/tools/lib/commands/export.d.ts.map +1 -1
- package/packages/tools/lib/commands/export.js +39 -40
- package/packages/tools/lib/commands/export.js.map +1 -1
- package/packages/tools/lib/commands/generate.d.ts.map +1 -1
- package/packages/tools/lib/commands/generate.js +10 -7
- package/packages/tools/lib/commands/generate.js.map +1 -1
- package/packages/tools/lib/commands/import.d.ts.map +1 -1
- package/packages/tools/lib/commands/import.js +25 -12
- package/packages/tools/lib/commands/import.js.map +1 -1
- package/packages/tools/lib/commands/init.d.ts.map +1 -1
- package/packages/tools/lib/commands/init.js +34 -14
- package/packages/tools/lib/commands/init.js.map +1 -1
- package/packages/tools/lib/commands/inspect.d.ts +5 -0
- package/packages/tools/lib/commands/inspect.d.ts.map +1 -0
- package/packages/tools/lib/commands/inspect.js +56 -0
- package/packages/tools/lib/commands/inspect.js.map +1 -0
- package/packages/tools/lib/commands/lock.d.ts.map +1 -1
- package/packages/tools/lib/commands/lock.js +7 -2
- package/packages/tools/lib/commands/lock.js.map +1 -1
- package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
- package/packages/tools/lib/commands/ontology.js +69 -116
- package/packages/tools/lib/commands/ontology.js.map +1 -1
- package/packages/tools/lib/commands/pack.d.ts +1 -1
- package/packages/tools/lib/commands/pack.d.ts.map +1 -1
- package/packages/tools/lib/commands/pack.js +20 -78
- package/packages/tools/lib/commands/pack.js.map +1 -1
- package/packages/tools/lib/commands/package.d.ts +10 -0
- package/packages/tools/lib/commands/package.d.ts.map +1 -0
- package/packages/tools/lib/commands/package.js +113 -0
- package/packages/tools/lib/commands/package.js.map +1 -0
- package/packages/tools/lib/commands/plugin.js +1 -1
- package/packages/tools/lib/commands/plugin.js.map +1 -1
- package/packages/tools/lib/commands/rules.d.ts.map +1 -1
- package/packages/tools/lib/commands/rules.js +120 -30
- package/packages/tools/lib/commands/rules.js.map +1 -1
- package/packages/tools/lib/commands/standards.d.ts +28 -0
- package/packages/tools/lib/commands/standards.d.ts.map +1 -0
- package/packages/tools/lib/commands/standards.js +203 -0
- package/packages/tools/lib/commands/standards.js.map +1 -0
- package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
- package/packages/tools/lib/commands/sysand-publish.js +14 -16
- package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
- package/packages/tools/lib/commands/toolchain.d.ts +8 -0
- package/packages/tools/lib/commands/toolchain.d.ts.map +1 -0
- package/packages/tools/lib/commands/toolchain.js +64 -0
- package/packages/tools/lib/commands/toolchain.js.map +1 -0
- package/packages/tools/lib/commands/validate.d.ts +1 -1
- package/packages/tools/lib/commands/validate.d.ts.map +1 -1
- package/packages/tools/lib/commands/validate.js +194 -56
- package/packages/tools/lib/commands/validate.js.map +1 -1
- package/packages/tools/lib/completeness/tracker.d.ts +10 -2
- package/packages/tools/lib/completeness/tracker.d.ts.map +1 -1
- package/packages/tools/lib/completeness/tracker.js +16 -21
- package/packages/tools/lib/completeness/tracker.js.map +1 -1
- package/packages/tools/lib/conformance/baseline.d.ts +26 -0
- package/packages/tools/lib/conformance/baseline.d.ts.map +1 -0
- package/packages/tools/lib/conformance/baseline.js +170 -0
- package/packages/tools/lib/conformance/baseline.js.map +1 -0
- package/packages/tools/lib/conformance/bnf.d.ts +84 -0
- package/packages/tools/lib/conformance/bnf.d.ts.map +1 -0
- package/packages/tools/lib/conformance/bnf.js +166 -0
- package/packages/tools/lib/conformance/bnf.js.map +1 -0
- package/packages/tools/lib/conformance/corpus.d.ts +125 -0
- package/packages/tools/lib/conformance/corpus.d.ts.map +1 -0
- package/packages/tools/lib/conformance/corpus.js +190 -0
- package/packages/tools/lib/conformance/corpus.js.map +1 -0
- package/packages/tools/lib/conformance/diff-xmi.d.ts +118 -0
- package/packages/tools/lib/conformance/diff-xmi.d.ts.map +1 -0
- package/packages/tools/lib/conformance/diff-xmi.js +276 -0
- package/packages/tools/lib/conformance/diff-xmi.js.map +1 -0
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts +10 -0
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +1 -0
- package/packages/tools/lib/conformance/generated/syside-rules.js +1142 -0
- package/packages/tools/lib/conformance/generated/syside-rules.js.map +1 -0
- package/packages/tools/lib/conformance/index.d.ts +7 -0
- package/packages/tools/lib/conformance/index.d.ts.map +1 -0
- package/packages/tools/lib/conformance/index.js +19 -0
- package/packages/tools/lib/conformance/index.js.map +1 -0
- package/packages/tools/lib/conformance/run.d.ts +117 -0
- package/packages/tools/lib/conformance/run.d.ts.map +1 -0
- package/packages/tools/lib/conformance/run.js +0 -0
- package/packages/tools/lib/conformance/run.js.map +1 -0
- package/packages/tools/lib/conformance/xmi.d.ts +45 -0
- package/packages/tools/lib/conformance/xmi.d.ts.map +1 -0
- package/packages/tools/lib/conformance/xmi.js +148 -0
- package/packages/tools/lib/conformance/xmi.js.map +1 -0
- package/packages/tools/lib/dhf/document-compiler.d.ts.map +1 -1
- package/packages/tools/lib/dhf/document-compiler.js +13 -8
- package/packages/tools/lib/dhf/document-compiler.js.map +1 -1
- package/packages/tools/lib/dhf/document-registry.d.ts +16 -2
- package/packages/tools/lib/dhf/document-registry.d.ts.map +1 -1
- package/packages/tools/lib/dhf/document-registry.js +74 -23
- package/packages/tools/lib/dhf/document-registry.js.map +1 -1
- package/packages/tools/lib/dhf/index.d.ts +3 -0
- package/packages/tools/lib/dhf/index.d.ts.map +1 -1
- package/packages/tools/lib/dhf/index.js +4 -0
- package/packages/tools/lib/dhf/index.js.map +1 -1
- package/packages/tools/lib/dhf/query-engine.d.ts +12 -1
- package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-engine.js +2 -1
- package/packages/tools/lib/dhf/query-engine.js.map +1 -1
- package/packages/tools/lib/dhf/query-executor.d.ts +72 -5
- package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-executor.js +471 -81
- package/packages/tools/lib/dhf/query-executor.js.map +1 -1
- package/packages/tools/lib/dhf/script-runner.js +6 -6
- package/packages/tools/lib/dhf/script-runner.js.map +1 -1
- package/packages/tools/lib/dhf/standards-block.d.ts +40 -0
- package/packages/tools/lib/dhf/standards-block.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-block.js +223 -0
- package/packages/tools/lib/dhf/standards-block.js.map +1 -0
- package/packages/tools/lib/dhf/standards-library.d.ts +123 -0
- package/packages/tools/lib/dhf/standards-library.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-library.js +295 -0
- package/packages/tools/lib/dhf/standards-library.js.map +1 -0
- package/packages/tools/lib/dhf/standards-report.d.ts +189 -0
- package/packages/tools/lib/dhf/standards-report.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-report.js +384 -0
- package/packages/tools/lib/dhf/standards-report.js.map +1 -0
- package/packages/tools/lib/dhf/template-lint.d.ts +42 -0
- package/packages/tools/lib/dhf/template-lint.d.ts.map +1 -0
- package/packages/tools/lib/dhf/template-lint.js +421 -0
- package/packages/tools/lib/dhf/template-lint.js.map +1 -0
- package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -1
- package/packages/tools/lib/dhf/template-resolver.js +18 -6
- package/packages/tools/lib/dhf/template-resolver.js.map +1 -1
- package/packages/tools/lib/import/column-mapper.d.ts +2 -2
- package/packages/tools/lib/import/column-mapper.d.ts.map +1 -1
- package/packages/tools/lib/import/column-mapper.js +3 -3
- package/packages/tools/lib/import/column-mapper.js.map +1 -1
- package/packages/tools/lib/importer/cameo-importer.js +2 -2
- package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
- package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/ea-importer.js +4 -3
- package/packages/tools/lib/importer/ea-importer.js.map +1 -1
- package/packages/tools/lib/importer/owl-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/owl-importer.js +2 -3
- package/packages/tools/lib/importer/owl-importer.js.map +1 -1
- package/packages/tools/lib/index.d.ts +20 -3
- package/packages/tools/lib/index.d.ts.map +1 -1
- package/packages/tools/lib/index.js +19 -2
- package/packages/tools/lib/index.js.map +1 -1
- package/packages/tools/lib/language/generated/ast.d.ts +1344 -99
- package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/ast.js +1066 -32
- package/packages/tools/lib/language/generated/ast.js.map +1 -1
- package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/grammar.js +5242 -1454
- package/packages/tools/lib/language/generated/grammar.js.map +1 -1
- package/packages/tools/lib/llm/chat-engine.d.ts +4 -3
- package/packages/tools/lib/llm/chat-engine.d.ts.map +1 -1
- package/packages/tools/lib/llm/chat-engine.js +15 -12
- package/packages/tools/lib/llm/chat-engine.js.map +1 -1
- package/packages/tools/lib/llm/generate-engine.d.ts +7 -2
- package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -1
- package/packages/tools/lib/llm/generate-engine.js +22 -4
- package/packages/tools/lib/llm/generate-engine.js.map +1 -1
- package/packages/tools/lib/llm/index.d.ts +1 -0
- package/packages/tools/lib/llm/index.d.ts.map +1 -1
- package/packages/tools/lib/llm/index.js +1 -0
- package/packages/tools/lib/llm/index.js.map +1 -1
- package/packages/tools/lib/llm/model-context.d.ts +2 -2
- package/packages/tools/lib/llm/model-context.d.ts.map +1 -1
- package/packages/tools/lib/llm/model-context.js +7 -13
- package/packages/tools/lib/llm/model-context.js.map +1 -1
- package/packages/tools/lib/llm/sysml-guidance.d.ts +8 -0
- package/packages/tools/lib/llm/sysml-guidance.d.ts.map +1 -0
- package/packages/tools/lib/llm/sysml-guidance.js +28 -0
- package/packages/tools/lib/llm/sysml-guidance.js.map +1 -0
- package/packages/tools/lib/lock.d.ts +14 -8
- package/packages/tools/lib/lock.d.ts.map +1 -1
- package/packages/tools/lib/lock.js +97 -108
- package/packages/tools/lib/lock.js.map +1 -1
- package/packages/tools/lib/mcp/model-loader.d.ts +3 -0
- package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
- package/packages/tools/lib/mcp/model-loader.js +9 -5
- package/packages/tools/lib/mcp/model-loader.js.map +1 -1
- package/packages/tools/lib/mcp/tools.d.ts +3 -0
- package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
- package/packages/tools/lib/mcp/tools.js +8 -9
- package/packages/tools/lib/mcp/tools.js.map +1 -1
- package/packages/tools/lib/model/activity-notation.d.ts +54 -0
- package/packages/tools/lib/model/activity-notation.d.ts.map +1 -0
- package/packages/tools/lib/model/activity-notation.js +208 -0
- package/packages/tools/lib/model/activity-notation.js.map +1 -0
- package/packages/tools/lib/model/builder.d.ts +3 -0
- package/packages/tools/lib/model/builder.d.ts.map +1 -1
- package/packages/tools/lib/model/builder.js +956 -62
- package/packages/tools/lib/model/builder.js.map +1 -1
- package/packages/tools/lib/model/config-loader.d.ts +19 -25
- package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/config-loader.js +51 -233
- package/packages/tools/lib/model/config-loader.js.map +1 -1
- package/packages/tools/lib/model/config.d.ts +42 -213
- package/packages/tools/lib/model/config.d.ts.map +1 -1
- package/packages/tools/lib/model/config.js +11 -9
- package/packages/tools/lib/model/config.js.map +1 -1
- package/packages/tools/lib/model/effective-scope.d.ts +74 -0
- package/packages/tools/lib/model/effective-scope.d.ts.map +1 -0
- package/packages/tools/lib/model/effective-scope.js +133 -0
- package/packages/tools/lib/model/effective-scope.js.map +1 -0
- package/packages/tools/lib/model/ir-identity.d.ts +94 -0
- package/packages/tools/lib/model/ir-identity.d.ts.map +1 -0
- package/packages/tools/lib/model/ir-identity.js +178 -0
- package/packages/tools/lib/model/ir-identity.js.map +1 -0
- package/packages/tools/lib/model/kind-registry.d.ts +134 -1
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.js +186 -4
- package/packages/tools/lib/model/kind-registry.js.map +1 -1
- package/packages/tools/lib/model/layer-resolver.js +1 -1
- package/packages/tools/lib/model/layer-resolver.js.map +1 -1
- package/packages/tools/lib/model/manifest.d.ts +8 -0
- package/packages/tools/lib/model/manifest.d.ts.map +1 -1
- package/packages/tools/lib/model/manifest.js +3 -0
- package/packages/tools/lib/model/manifest.js.map +1 -1
- package/packages/tools/lib/model/methodology-loader.d.ts +19 -24
- package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/methodology-loader.js +179 -176
- package/packages/tools/lib/model/methodology-loader.js.map +1 -1
- package/packages/tools/lib/model/methodology-resolver.d.ts +115 -0
- package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -0
- package/packages/tools/lib/model/methodology-resolver.js +317 -0
- package/packages/tools/lib/model/methodology-resolver.js.map +1 -0
- package/packages/tools/lib/model/naming.d.ts +57 -0
- package/packages/tools/lib/model/naming.d.ts.map +1 -0
- package/packages/tools/lib/model/naming.js +69 -0
- package/packages/tools/lib/model/naming.js.map +1 -0
- package/packages/tools/lib/model/native-project.d.ts +130 -0
- package/packages/tools/lib/model/native-project.d.ts.map +1 -0
- package/packages/tools/lib/model/native-project.js +580 -0
- package/packages/tools/lib/model/native-project.js.map +1 -0
- package/packages/tools/lib/model/ontology-loader.d.ts +34 -21
- package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/ontology-loader.js +343 -614
- package/packages/tools/lib/model/ontology-loader.js.map +1 -1
- package/packages/tools/lib/model/package-manifest.d.ts +37 -0
- package/packages/tools/lib/model/package-manifest.d.ts.map +1 -0
- package/packages/tools/lib/model/package-manifest.js +96 -0
- package/packages/tools/lib/model/package-manifest.js.map +1 -0
- package/packages/tools/lib/model/parser-utils.d.ts +31 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
- package/packages/tools/lib/model/parser-utils.js +89 -1
- package/packages/tools/lib/model/parser-utils.js.map +1 -1
- package/packages/tools/lib/model/paths.d.ts +10 -4
- package/packages/tools/lib/model/paths.d.ts.map +1 -1
- package/packages/tools/lib/model/paths.js +10 -4
- package/packages/tools/lib/model/paths.js.map +1 -1
- package/packages/tools/lib/model/project-conversion.d.ts +226 -0
- package/packages/tools/lib/model/project-conversion.d.ts.map +1 -0
- package/packages/tools/lib/model/project-conversion.js +946 -0
- package/packages/tools/lib/model/project-conversion.js.map +1 -0
- package/packages/tools/lib/model/relationship-legality.d.ts +27 -0
- package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-legality.js.map +1 -1
- package/packages/tools/lib/model/relationship-registry.d.ts +93 -1
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-registry.js +217 -2
- package/packages/tools/lib/model/relationship-registry.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +73 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +6 -0
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/model/settings-boundary.d.ts +19 -0
- package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -0
- package/packages/tools/lib/model/settings-boundary.js +118 -0
- package/packages/tools/lib/model/settings-boundary.js.map +1 -0
- package/packages/tools/lib/model/short-id.js +3 -3
- package/packages/tools/lib/model/short-id.js.map +1 -1
- package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
- package/packages/tools/lib/model/source-graph.js +5 -1
- package/packages/tools/lib/model/source-graph.js.map +1 -1
- package/packages/tools/lib/model/source-provenance.d.ts +112 -0
- package/packages/tools/lib/model/source-provenance.d.ts.map +1 -0
- package/packages/tools/lib/model/source-provenance.js +169 -0
- package/packages/tools/lib/model/source-provenance.js.map +1 -0
- package/packages/tools/lib/model/sysml-ir.d.ts +9 -0
- package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -0
- package/packages/tools/lib/model/sysml-ir.js +105 -0
- package/packages/tools/lib/model/sysml-ir.js.map +1 -0
- package/packages/tools/lib/model/view-deriver.d.ts +10 -1
- package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +139 -11
- package/packages/tools/lib/model/view-deriver.js.map +1 -1
- package/packages/tools/lib/model/view-kinds.d.ts +2 -0
- package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
- package/packages/tools/lib/model/view-kinds.js +11 -0
- package/packages/tools/lib/model/view-kinds.js.map +1 -1
- package/packages/tools/lib/ontology/owl-exporter.d.ts +2 -2
- package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
- package/packages/tools/lib/ontology/owl-exporter.js +12 -12
- package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
- package/packages/tools/lib/operations/ai-authoring.d.ts +24 -0
- package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -0
- package/packages/tools/lib/operations/ai-authoring.js +77 -0
- package/packages/tools/lib/operations/ai-authoring.js.map +1 -0
- package/packages/tools/lib/operations/authoring.d.ts +40 -0
- package/packages/tools/lib/operations/authoring.d.ts.map +1 -0
- package/packages/tools/lib/operations/authoring.js +56 -0
- package/packages/tools/lib/operations/authoring.js.map +1 -0
- package/packages/tools/lib/operations/index.d.ts +2 -0
- package/packages/tools/lib/operations/index.d.ts.map +1 -1
- package/packages/tools/lib/operations/index.js +2 -0
- package/packages/tools/lib/operations/index.js.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.d.ts +28 -3
- package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.js +79 -30
- package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
- package/packages/tools/lib/protocol/messages.d.ts +381 -12
- package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.d.ts +7 -7
- package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.js +11 -11
- package/packages/tools/lib/serializer/csv-io.js.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.js +34 -2
- package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
- package/packages/tools/lib/server/config-resolver.d.ts +8 -4
- package/packages/tools/lib/server/config-resolver.d.ts.map +1 -1
- package/packages/tools/lib/server/config-resolver.js +25 -44
- package/packages/tools/lib/server/config-resolver.js.map +1 -1
- package/packages/tools/lib/server/conflict-policy.d.ts +44 -0
- package/packages/tools/lib/server/conflict-policy.d.ts.map +1 -0
- package/packages/tools/lib/server/conflict-policy.js +94 -0
- package/packages/tools/lib/server/conflict-policy.js.map +1 -0
- package/packages/tools/lib/server/dev-server.d.ts +32 -2
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +875 -54
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/element-writer.d.ts +11 -0
- package/packages/tools/lib/server/element-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/element-writer.js +123 -0
- package/packages/tools/lib/server/element-writer.js.map +1 -0
- package/packages/tools/lib/server/file-watcher.d.ts +4 -1
- package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
- package/packages/tools/lib/server/file-watcher.js +17 -7
- package/packages/tools/lib/server/file-watcher.js.map +1 -1
- package/packages/tools/lib/server/mutation-domain.d.ts +22 -0
- package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -0
- package/packages/tools/lib/server/mutation-domain.js +87 -0
- package/packages/tools/lib/server/mutation-domain.js.map +1 -0
- package/packages/tools/lib/server/package-source.d.ts +26 -0
- package/packages/tools/lib/server/package-source.d.ts.map +1 -0
- package/packages/tools/lib/server/package-source.js +81 -0
- package/packages/tools/lib/server/package-source.js.map +1 -0
- package/packages/tools/lib/server/package-writer.d.ts +94 -0
- package/packages/tools/lib/server/package-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/package-writer.js +317 -0
- package/packages/tools/lib/server/package-writer.js.map +1 -0
- package/packages/tools/lib/server/persistor.d.ts +81 -6
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +173 -44
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/relationship-writer.d.ts +41 -5
- package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/relationship-writer.js +157 -13
- package/packages/tools/lib/server/relationship-writer.js.map +1 -1
- package/packages/tools/lib/server/rule-policy-writer.d.ts +40 -0
- package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/rule-policy-writer.js +124 -0
- package/packages/tools/lib/server/rule-policy-writer.js.map +1 -0
- package/packages/tools/lib/server/runtime-budget.d.ts +14 -0
- package/packages/tools/lib/server/runtime-budget.d.ts.map +1 -0
- package/packages/tools/lib/server/runtime-budget.js +15 -0
- package/packages/tools/lib/server/runtime-budget.js.map +1 -0
- package/packages/tools/lib/server/sysml-notation.d.ts +36 -0
- package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -0
- package/packages/tools/lib/server/sysml-notation.js +104 -0
- package/packages/tools/lib/server/sysml-notation.js.map +1 -0
- package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
- package/packages/tools/lib/server/view-layout-store.js +1 -0
- package/packages/tools/lib/server/view-layout-store.js.map +1 -1
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts +9 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js +315 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts +5206 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js +1933 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js.map +1 -0
- package/packages/tools/lib/sysml-ir/index.d.ts +3 -0
- package/packages/tools/lib/sysml-ir/index.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/index.js +3 -0
- package/packages/tools/lib/sysml-ir/index.js.map +1 -0
- package/packages/tools/lib/sysml-ir/ir.d.ts +50 -0
- package/packages/tools/lib/sysml-ir/ir.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/ir.js +2 -0
- package/packages/tools/lib/sysml-ir/ir.js.map +1 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +3 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +97 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +1 -0
- package/packages/tools/lib/sysmlc/index.d.ts +2 -0
- package/packages/tools/lib/sysmlc/index.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/index.js +7 -0
- package/packages/tools/lib/sysmlc/index.js.map +1 -0
- package/packages/tools/lib/sysmlc/server.d.ts +29 -0
- package/packages/tools/lib/sysmlc/server.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/server.js +168 -0
- package/packages/tools/lib/sysmlc/server.js.map +1 -0
- package/packages/tools/lib/toolchain/default-registry.d.ts +12 -0
- package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/default-registry.js +28 -0
- package/packages/tools/lib/toolchain/default-registry.js.map +1 -0
- package/packages/tools/lib/toolchain/diagnostic.d.ts +57 -0
- package/packages/tools/lib/toolchain/diagnostic.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/diagnostic.js +69 -0
- package/packages/tools/lib/toolchain/diagnostic.js.map +1 -0
- package/packages/tools/lib/toolchain/effective.d.ts +36 -0
- package/packages/tools/lib/toolchain/effective.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/effective.js +91 -0
- package/packages/tools/lib/toolchain/effective.js.map +1 -0
- package/packages/tools/lib/toolchain/index.d.ts +11 -0
- package/packages/tools/lib/toolchain/index.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/index.js +21 -0
- package/packages/tools/lib/toolchain/index.js.map +1 -0
- package/packages/tools/lib/toolchain/lowering.d.ts +63 -0
- package/packages/tools/lib/toolchain/lowering.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/lowering.js +100 -0
- package/packages/tools/lib/toolchain/lowering.js.map +1 -0
- package/packages/tools/lib/toolchain/operations.d.ts +87 -0
- package/packages/tools/lib/toolchain/operations.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/operations.js +111 -0
- package/packages/tools/lib/toolchain/operations.js.map +1 -0
- package/packages/tools/lib/toolchain/process.d.ts +45 -0
- package/packages/tools/lib/toolchain/process.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/process.js +125 -0
- package/packages/tools/lib/toolchain/process.js.map +1 -0
- package/packages/tools/lib/toolchain/protocol.d.ts +122 -0
- package/packages/tools/lib/toolchain/protocol.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/protocol.js +74 -0
- package/packages/tools/lib/toolchain/protocol.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts +9 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.js +84 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal.d.ts +33 -0
- package/packages/tools/lib/toolchain/providers/internal.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal.js +286 -0
- package/packages/tools/lib/toolchain/providers/internal.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand.d.ts +12 -0
- package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand.js +110 -0
- package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside.d.ts +24 -0
- package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside.js +208 -0
- package/packages/tools/lib/toolchain/providers/syside.js.map +1 -0
- package/packages/tools/lib/toolchain/registry.d.ts +192 -0
- package/packages/tools/lib/toolchain/registry.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/registry.js +130 -0
- package/packages/tools/lib/toolchain/registry.js.map +1 -0
- package/packages/tools/lib/toolchain/schema.d.ts +30 -0
- package/packages/tools/lib/toolchain/schema.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/schema.js +112 -0
- package/packages/tools/lib/toolchain/schema.js.map +1 -0
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts +77 -0
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
- package/packages/tools/lib/toolchain/sysmlc-client.js.map +1 -0
- package/packages/tools/lib/validator/architecture-validator.d.ts +8 -1
- package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
- package/packages/tools/lib/validator/architecture-validator.js +25 -1
- package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
- package/packages/tools/lib/validator/behavior-validator.d.ts +1 -1
- package/packages/tools/lib/validator/behavior-validator.js +1 -1
- package/packages/tools/lib/validator/builtin-rules.d.ts +16 -0
- package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -0
- package/packages/tools/lib/validator/builtin-rules.js +62 -0
- package/packages/tools/lib/validator/builtin-rules.js.map +1 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts +31 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.js +164 -7
- package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
- package/packages/tools/lib/validator/constraint-loader.d.ts +22 -4
- package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-loader.js +100 -27
- package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
- package/packages/tools/lib/validator/rule-engine.d.ts +2 -1
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-engine.js +56 -5
- package/packages/tools/lib/validator/rule-engine.js.map +1 -1
- package/packages/tools/lib/validator/sysml-constraints.d.ts +64 -0
- package/packages/tools/lib/validator/sysml-constraints.d.ts.map +1 -0
- package/packages/tools/lib/validator/sysml-constraints.js +251 -0
- package/packages/tools/lib/validator/sysml-constraints.js.map +1 -0
- package/packages/tools/lib/validator/types.d.ts +33 -0
- package/packages/tools/lib/validator/types.d.ts.map +1 -1
- package/packages/tools/lib/version.d.ts +2 -0
- package/packages/tools/lib/version.d.ts.map +1 -0
- package/packages/tools/lib/version.js +26 -0
- package/packages/tools/lib/version.js.map +1 -0
- package/packages/tools/src/grammar/memo-sysml.langium +517 -41
- package/packages/tools/lib/model/dimension-filter.d.ts +0 -33
- package/packages/tools/lib/model/dimension-filter.d.ts.map +0 -1
- package/packages/tools/lib/model/dimension-filter.js +0 -57
- package/packages/tools/lib/model/dimension-filter.js.map +0 -1
- package/packages/tools/lib/model/toolchain.d.ts +0 -12
- package/packages/tools/lib/model/toolchain.d.ts.map +0 -1
- package/packages/tools/lib/model/toolchain.js +0 -92
- package/packages/tools/lib/model/toolchain.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-identity.d.ts","sourceRoot":"","sources":["../../src/model/ir-identity.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAO1D;AAED,8EAA8E;AAC9E,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,CAS7E;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,eAAe,CAU1F;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAS1E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,SAAS,GAAG,eAAe,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,EAClB,qBAAqB,CAAC,EAAE,MAAM,GAC/B,eAAe,CAajB;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,MAAM,GACtB,MAAM,GAAG,SAAS,CAEpB;AAID,mFAAmF;AACnF,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAUlF;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7F;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACrB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CACxC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,EAC7B,QAAQ,EAAE,aAAa,GACxB;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAuBlF"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// ─── IR identity: the address every authoring write is made against ──────────
|
|
2
|
+
//
|
|
3
|
+
// Session 3 made the canonical IR the ingestion boundary. Authoring still
|
|
4
|
+
// addressed elements the old way — by authored name, matched with a regular
|
|
5
|
+
// expression over the source text — so two declarations with the same name in
|
|
6
|
+
// different namespaces were the same target as far as a write was concerned,
|
|
7
|
+
// and a rename made the write silently miss.
|
|
8
|
+
//
|
|
9
|
+
// An IR identity is `file-URI + declaration path + metaclass`. It is positional
|
|
10
|
+
// by construction, which is the point: inserting a declaration ahead of another
|
|
11
|
+
// changes the second one's address, so an identity minted against an older
|
|
12
|
+
// revision is *detectably* old rather than quietly pointing at a neighbour.
|
|
13
|
+
// Every write therefore either resolves its identity against the current IR or
|
|
14
|
+
// fails loudly — `StaleIrIdentityError`, naming the identity and what it found.
|
|
15
|
+
//
|
|
16
|
+
// Nothing here reads the filesystem or spawns anything: it is a resolver over
|
|
17
|
+
// an IR that some lowering provider already produced.
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
import { resolve } from 'node:path';
|
|
20
|
+
import { pathToFileURL } from 'node:url';
|
|
21
|
+
/**
|
|
22
|
+
* A write was made against an identity the current IR does not have.
|
|
23
|
+
*
|
|
24
|
+
* Loud on purpose. The alternative — falling back to a name lookup — is how a
|
|
25
|
+
* write ends up editing the wrong element, which is the failure this whole
|
|
26
|
+
* module exists to make impossible.
|
|
27
|
+
*/
|
|
28
|
+
export class StaleIrIdentityError extends Error {
|
|
29
|
+
identityId;
|
|
30
|
+
constructor(identityId, detail) {
|
|
31
|
+
super(`The edit targets "${identityId}", which is not in the current model revision: ${detail}. `
|
|
32
|
+
+ 'Reload the element and repeat the edit; no file was written.');
|
|
33
|
+
this.identityId = identityId;
|
|
34
|
+
this.name = 'StaleIrIdentityError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Index one IR for identity resolution.
|
|
39
|
+
*
|
|
40
|
+
* Both directions are needed and neither is derivable cheaply from the other:
|
|
41
|
+
* the client holds Memo element IDs and has to mint an identity from one, and
|
|
42
|
+
* the server holds an identity and has to find what it names.
|
|
43
|
+
*/
|
|
44
|
+
export function buildIrIdentityIndex(ir) {
|
|
45
|
+
const byMemoElement = {};
|
|
46
|
+
const byIdentity = new Map();
|
|
47
|
+
for (const element of ir?.elements ?? []) {
|
|
48
|
+
const memoElementId = element.kind === 'mapped' ? element.memoElementId : undefined;
|
|
49
|
+
byIdentity.set(element.identity.id, { identity: element.identity, memoElementId });
|
|
50
|
+
if (memoElementId)
|
|
51
|
+
byMemoElement[memoElementId] = element.identity.id;
|
|
52
|
+
}
|
|
53
|
+
return { byMemoElement, byIdentity };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Rebuild an index from the compact table alone.
|
|
57
|
+
*
|
|
58
|
+
* The whole IR is not shipped with a model update — `standardProperties` carry
|
|
59
|
+
* every declared property of every node, and a surface that only needs to
|
|
60
|
+
* *address* an element does not need its contents. The identity ID is a
|
|
61
|
+
* self-describing string, so the table is enough to reconstruct everything the
|
|
62
|
+
* resolver uses.
|
|
63
|
+
*/
|
|
64
|
+
export function indexFromIdentityTable(table) {
|
|
65
|
+
const byMemoElement = {};
|
|
66
|
+
const byIdentity = new Map();
|
|
67
|
+
for (const [memoElementId, identityId] of Object.entries(table ?? {})) {
|
|
68
|
+
const identity = parseSysmlIdentityId(identityId);
|
|
69
|
+
if (!identity)
|
|
70
|
+
continue;
|
|
71
|
+
byMemoElement[memoElementId] = identityId;
|
|
72
|
+
byIdentity.set(identityId, { identity, memoElementId });
|
|
73
|
+
}
|
|
74
|
+
return { byMemoElement, byIdentity };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Read an identity ID back into its parts.
|
|
78
|
+
*
|
|
79
|
+
* `file:///…/model/a.sysml#members[0]/members[2]:PartUsage`. The file URI may
|
|
80
|
+
* itself contain `#` only if percent-encoded, and the metaclass never contains
|
|
81
|
+
* `:`, so splitting at the first `#` and the last `:` is unambiguous.
|
|
82
|
+
*/
|
|
83
|
+
export function parseSysmlIdentityId(id) {
|
|
84
|
+
const hash = id.indexOf('#');
|
|
85
|
+
const colon = id.lastIndexOf(':');
|
|
86
|
+
if (hash < 0 || colon < hash)
|
|
87
|
+
return undefined;
|
|
88
|
+
const fileUri = id.slice(0, hash);
|
|
89
|
+
const declarationPath = id.slice(hash + 1, colon);
|
|
90
|
+
const metaclass = id.slice(colon + 1);
|
|
91
|
+
if (!fileUri || !declarationPath || !metaclass)
|
|
92
|
+
return undefined;
|
|
93
|
+
return { fileUri, declarationPath, metaclass, id };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The compact table shipped with a model update.
|
|
97
|
+
*
|
|
98
|
+
* The whole IR is not sent: its `standardProperties` carry every declared
|
|
99
|
+
* property of every node, and a client that only needs to address an element
|
|
100
|
+
* does not need its contents.
|
|
101
|
+
*/
|
|
102
|
+
export function irIdentityTable(ir) {
|
|
103
|
+
return buildIrIdentityIndex(ir).byMemoElement;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolve an identity ID against the current IR, or fail loudly.
|
|
107
|
+
*
|
|
108
|
+
* `expectedMemoElementId`, when given, is checked too: an identity that still
|
|
109
|
+
* exists but now names a different element is exactly as stale as one that has
|
|
110
|
+
* disappeared, and it is the more dangerous of the two.
|
|
111
|
+
*/
|
|
112
|
+
export function requireIrIdentity(index, identityId, expectedMemoElementId) {
|
|
113
|
+
const found = index.byIdentity.get(identityId);
|
|
114
|
+
if (!found) {
|
|
115
|
+
throw new StaleIrIdentityError(identityId, 'no declaration in the current IR has that identity');
|
|
116
|
+
}
|
|
117
|
+
if (expectedMemoElementId !== undefined && found.memoElementId !== expectedMemoElementId) {
|
|
118
|
+
throw new StaleIrIdentityError(identityId, `it now names ${found.memoElementId ? `element "${found.memoElementId}"` : 'a declaration Memo does not project'}, `
|
|
119
|
+
+ `not "${expectedMemoElementId}"`);
|
|
120
|
+
}
|
|
121
|
+
return found;
|
|
122
|
+
}
|
|
123
|
+
/** The identity a client should quote when it writes to this element. */
|
|
124
|
+
export function identityForMemoElement(index, memoElementId) {
|
|
125
|
+
return index.byMemoElement[memoElementId];
|
|
126
|
+
}
|
|
127
|
+
// ─── Locating the declaration an identity names ─────────────────────────────
|
|
128
|
+
/** `members[3]/members[1]` → `[3, 1]`. Any other shape is not a path we minted. */
|
|
129
|
+
export function parseDeclarationPath(declarationPath) {
|
|
130
|
+
const segments = declarationPath.split('/').filter(Boolean);
|
|
131
|
+
if (segments.length === 0)
|
|
132
|
+
return undefined;
|
|
133
|
+
const indexes = [];
|
|
134
|
+
for (const segment of segments) {
|
|
135
|
+
const match = /^members\[(\d+)\]$/.exec(segment);
|
|
136
|
+
if (!match)
|
|
137
|
+
return undefined;
|
|
138
|
+
indexes.push(Number(match[1]));
|
|
139
|
+
}
|
|
140
|
+
return indexes;
|
|
141
|
+
}
|
|
142
|
+
/** The project-relative file an identity's URI names, given the project root. */
|
|
143
|
+
export function identityFile(identity, projectRoot) {
|
|
144
|
+
const roots = pathToFileURL(resolve(projectRoot)).href.replace(/\/$/, '');
|
|
145
|
+
if (!identity.fileUri.startsWith(`${roots}/`))
|
|
146
|
+
return undefined;
|
|
147
|
+
return decodeURIComponent(identity.fileUri.slice(roots.length + 1));
|
|
148
|
+
}
|
|
149
|
+
/** True when this identity was minted for that project-relative file. */
|
|
150
|
+
export function identityNamesFile(identity, projectRoot, relativePath) {
|
|
151
|
+
return identityFile(identity, projectRoot) === relativePath.replaceAll('\\', '/');
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Walk a parsed document to the declaration an identity addresses.
|
|
155
|
+
*
|
|
156
|
+
* The metaclass is verified, not assumed: a path that still resolves but to a
|
|
157
|
+
* different kind of declaration means the file was edited underneath this
|
|
158
|
+
* identity, and continuing would rewrite the wrong lines.
|
|
159
|
+
*/
|
|
160
|
+
export function resolveDeclarationByIdentity(root, identity) {
|
|
161
|
+
const path = parseDeclarationPath(identity.declarationPath);
|
|
162
|
+
if (!path) {
|
|
163
|
+
throw new StaleIrIdentityError(identity.id, `"${identity.declarationPath}" is not a declaration path`);
|
|
164
|
+
}
|
|
165
|
+
let node = root;
|
|
166
|
+
for (const [depth, index] of path.entries()) {
|
|
167
|
+
const members = node?.members;
|
|
168
|
+
if (!Array.isArray(members) || index >= members.length) {
|
|
169
|
+
throw new StaleIrIdentityError(identity.id, `the source no longer has a declaration at ${path.slice(0, depth + 1).map(i => `members[${i}]`).join('/')}`);
|
|
170
|
+
}
|
|
171
|
+
node = members[index];
|
|
172
|
+
}
|
|
173
|
+
if (node?.$type !== identity.metaclass) {
|
|
174
|
+
throw new StaleIrIdentityError(identity.id, `that position now holds a ${node?.$type ?? 'nothing'}, not a ${identity.metaclass}`);
|
|
175
|
+
}
|
|
176
|
+
return node;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=ir-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ir-identity.js","sourceRoot":"","sources":["../../src/model/ir-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,25 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SysMLConstruct } from './config.js';
|
|
2
|
+
/**
|
|
3
|
+
* A kind as the registry reports it.
|
|
4
|
+
*
|
|
5
|
+
* This shape used to live in `config.ts`, where a YAML `kinds:` block could
|
|
6
|
+
* declare one. Kinds come from the ontology's own `part def` / `item def`
|
|
7
|
+
* declarations now, so the shape belongs to the registry that derives it.
|
|
8
|
+
*/
|
|
9
|
+
export interface KindDefinition {
|
|
10
|
+
/** Human-readable label */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Architecture layer this kind belongs to */
|
|
13
|
+
layer?: string;
|
|
14
|
+
/** SysML v2 construct this kind maps to */
|
|
15
|
+
sysmlConstruct: SysMLConstruct;
|
|
16
|
+
/** Icon identifier for the palette/diagram */
|
|
17
|
+
icon?: string;
|
|
18
|
+
/** Template file for new instances */
|
|
19
|
+
template?: string;
|
|
20
|
+
/** Default attributes for new instances */
|
|
21
|
+
defaultAttributes?: Record<string, string>;
|
|
22
|
+
}
|
|
2
23
|
import type { ParsedDocument } from './parser-utils.js';
|
|
3
24
|
import type { KindDefinitionDTO } from './relationship-legality.js';
|
|
4
25
|
/** Entry in the KindRegistry, matching KindDefinition shape */
|
|
@@ -25,6 +46,29 @@ export interface KindRegistryEntry {
|
|
|
25
46
|
isAbstract?: boolean;
|
|
26
47
|
/** Namespace segments mirrored by the ontology source folders. */
|
|
27
48
|
namespace?: string[];
|
|
49
|
+
/**
|
|
50
|
+
* Fully qualified name, e.g. `memo::ontology::assurance::safety_risk::Hazard`.
|
|
51
|
+
*
|
|
52
|
+
* This is the registry's real identity. `name` is a short index into it,
|
|
53
|
+
* which resolves only while it is unambiguous — see `getCollisions`.
|
|
54
|
+
*/
|
|
55
|
+
qualifiedName?: string;
|
|
56
|
+
/** Source file this definition was declared in. */
|
|
57
|
+
sourceFile?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Two definitions sharing a short name.
|
|
61
|
+
*
|
|
62
|
+
* Previously the second silently replaced the first in a `Map` keyed by short
|
|
63
|
+
* name, so which one survived depended on file iteration order and the loss was
|
|
64
|
+
* invisible. Collisions are now recorded and surfaced as load diagnostics.
|
|
65
|
+
*/
|
|
66
|
+
export interface KindNameCollision {
|
|
67
|
+
shortName: string;
|
|
68
|
+
/** Qualified names competing for the short name, in discovery order. */
|
|
69
|
+
qualifiedNames: string[];
|
|
70
|
+
/** Files declaring them, aligned with `qualifiedNames`. */
|
|
71
|
+
sourceFiles: string[];
|
|
28
72
|
}
|
|
29
73
|
/**
|
|
30
74
|
* Registry that discovers kinds from SysML AST Definition nodes.
|
|
@@ -32,6 +76,27 @@ export interface KindRegistryEntry {
|
|
|
32
76
|
*/
|
|
33
77
|
export declare class KindRegistry {
|
|
34
78
|
private readonly kinds;
|
|
79
|
+
/**
|
|
80
|
+
* Attribute values bound by a `view def`, keyed by definition name, with the
|
|
81
|
+
* definition's own supertype chain already merged in.
|
|
82
|
+
*
|
|
83
|
+
* A view usage inherits these — `view mainScreenLayout : MemoScreenLayoutView`
|
|
84
|
+
* gets that definition's `viewKind` without restating it, and SysIDE in fact
|
|
85
|
+
* REJECTS restating it ("Cannot override a binding feature value"). So the
|
|
86
|
+
* definition is the only place the value can live, and consumers resolve a
|
|
87
|
+
* usage's presentation by falling back here.
|
|
88
|
+
*
|
|
89
|
+
* View definitions are not registered as kinds: they classify views, not
|
|
90
|
+
* model elements, and adding them to the kind extent would put them in the
|
|
91
|
+
* Explorer and in kind counts where they do not belong.
|
|
92
|
+
*/
|
|
93
|
+
private readonly viewDefaults;
|
|
94
|
+
private readonly viewSuperTypes;
|
|
95
|
+
/** short name → the qualified name it currently resolves to. */
|
|
96
|
+
private readonly byQualifiedName;
|
|
97
|
+
/** qualified name → declaring file, for collision diagnostics. */
|
|
98
|
+
private readonly sourceFiles;
|
|
99
|
+
private readonly collisions;
|
|
35
100
|
/** Number of registered kinds */
|
|
36
101
|
get size(): number;
|
|
37
102
|
/**
|
|
@@ -39,6 +104,11 @@ export declare class KindRegistry {
|
|
|
39
104
|
* Returns undefined if the kind is not registered.
|
|
40
105
|
*/
|
|
41
106
|
getKind(name: string): KindRegistryEntry | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Attribute values a view usage inherits from its `view def`, resolved up
|
|
109
|
+
* the definition's specialization chain (nearest declaration wins).
|
|
110
|
+
*/
|
|
111
|
+
getViewDefaults(viewDefName: string | undefined): Record<string, string> | undefined;
|
|
42
112
|
/**
|
|
43
113
|
* Convert a registry entry to a KindDefinition (for backward compat with builder).
|
|
44
114
|
*/
|
|
@@ -81,6 +151,44 @@ export declare class KindRegistry {
|
|
|
81
151
|
}[];
|
|
82
152
|
/** Register a kind manually (for testing or config fallback) */
|
|
83
153
|
register(entry: KindRegistryEntry): void;
|
|
154
|
+
/**
|
|
155
|
+
* Track qualified identity alongside the short-name map.
|
|
156
|
+
*
|
|
157
|
+
* Short-name lookup is kept as-is so every existing caller keeps working;
|
|
158
|
+
* what changes is that a shadowed definition is no longer lost silently.
|
|
159
|
+
* A re-registration of the SAME qualified name is not a collision — that
|
|
160
|
+
* happens legitimately when a registry is copied in `withProjectExtensions`.
|
|
161
|
+
*/
|
|
162
|
+
private recordIdentity;
|
|
163
|
+
/**
|
|
164
|
+
* Short names claimed by more than one qualified definition.
|
|
165
|
+
*
|
|
166
|
+
* Callers surface these as load diagnostics: a reference to an ambiguous
|
|
167
|
+
* short name cannot be resolved by load order and needs qualifying.
|
|
168
|
+
*/
|
|
169
|
+
getCollisions(): KindNameCollision[];
|
|
170
|
+
/** Qualified name a short name currently resolves to. */
|
|
171
|
+
getQualifiedName(shortName: string): string | undefined;
|
|
172
|
+
/**
|
|
173
|
+
* Give a kind the placement of the kind it specializes, wherever its own
|
|
174
|
+
* declaring path could not supply one.
|
|
175
|
+
*
|
|
176
|
+
* Layer, namespace and standard are derived from the declaring file's path
|
|
177
|
+
* under `src/<layer>/`. An EXTENSION declares its types in
|
|
178
|
+
* `extensions/<name>/src/`, which matches no layer — so `RosNode`,
|
|
179
|
+
* `CloudService` and `AadlThread` all landed in `unknown` and a project
|
|
180
|
+
* that included one showed most of its model as unplaced.
|
|
181
|
+
*
|
|
182
|
+
* The placement is read from the specialization, not from any list of
|
|
183
|
+
* names: `RosNode : SoftwareComponent` is implementation because
|
|
184
|
+
* `SoftwareComponent` is. Resolution repeats so a chain works regardless
|
|
185
|
+
* of source-file order (`RosContainerImage -> ContainerImage ->
|
|
186
|
+
* DeploymentUnit`), and a kind that specializes nothing placed stays
|
|
187
|
+
* `unknown`, which is the honest answer.
|
|
188
|
+
*
|
|
189
|
+
* Must be called after populateFromDocuments() is complete.
|
|
190
|
+
*/
|
|
191
|
+
inheritPlacementFromSuperTypes(): void;
|
|
84
192
|
/**
|
|
85
193
|
* Compute the derivedBy reverse-lookup for all kinds.
|
|
86
194
|
* Must be called after populateFromDocuments() is complete.
|
|
@@ -94,4 +202,29 @@ export declare class KindRegistry {
|
|
|
94
202
|
/** Walk a package declaration and register all Definition nodes */
|
|
95
203
|
private walkPackage;
|
|
96
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* The ontology facts a formatter or importer needs, derived from the registries.
|
|
207
|
+
*
|
|
208
|
+
* Consumers used to take a `MEMOConfig` and read `config.kinds` and
|
|
209
|
+
* `config.relationshipTypes` off it, which meant a settings file could declare
|
|
210
|
+
* a kind the ontology never defined. They take this instead: it can only be
|
|
211
|
+
* built from what the resolved SysML declares.
|
|
212
|
+
*/
|
|
213
|
+
export interface OntologyView {
|
|
214
|
+
kinds: Record<string, KindDefinition>;
|
|
215
|
+
relationshipTypes: Array<{
|
|
216
|
+
name: string;
|
|
217
|
+
label: string;
|
|
218
|
+
layer: string;
|
|
219
|
+
color: string;
|
|
220
|
+
}>;
|
|
221
|
+
}
|
|
222
|
+
/** An empty view — what a caller has before any ontology is resolved. */
|
|
223
|
+
export declare const EMPTY_ONTOLOGY_VIEW: OntologyView;
|
|
224
|
+
/** Build a view from populated registries. */
|
|
225
|
+
export declare function ontologyViewFrom(kindRegistry?: {
|
|
226
|
+
toKindsRecord(): Record<string, KindDefinition>;
|
|
227
|
+
}, relationshipRegistry?: {
|
|
228
|
+
toRelationshipTypesArray(): OntologyView['relationshipTypes'];
|
|
229
|
+
}): OntologyView;
|
|
97
230
|
//# sourceMappingURL=kind-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kind-registry.d.ts","sourceRoot":"","sources":["../../src/model/kind-registry.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"kind-registry.d.ts","sourceRoot":"","sources":["../../src/model/kind-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,36 @@
|
|
|
14
14
|
import { isPartDefinition, isRequirementDefinition, isVerificationDefinition, isStateDefinition, isUseCaseDeclaration, isActionDefinition, isItemDefinition, isPortDefinition, isInterfaceDefinition, isAttributeDefinition, isEnumDefinition, isPackageDeclaration, } from '../language/generated/ast.js';
|
|
15
15
|
import { resolveLayerFromPath, resolveNamespaceFromPath, resolveStandardFromPath } from './layer-resolver.js';
|
|
16
16
|
/** AST $type → SysMLConstruct mapping */
|
|
17
|
+
/**
|
|
18
|
+
* Literal attribute values declared in a definition body. Only literals are
|
|
19
|
+
* read: an inherited presentation hint is always a literal, and anything else
|
|
20
|
+
* belongs to the usage.
|
|
21
|
+
*/
|
|
22
|
+
function extractBoundAttributes(body) {
|
|
23
|
+
const out = {};
|
|
24
|
+
for (const member of body ?? []) {
|
|
25
|
+
if (member?.$type !== 'AttributeMember' || !member.value || !member.name)
|
|
26
|
+
continue;
|
|
27
|
+
const v = member.value;
|
|
28
|
+
switch (v.$type) {
|
|
29
|
+
case 'StringValue':
|
|
30
|
+
out[member.name] = String(v.value).replace(/^"|"$/g, '');
|
|
31
|
+
break;
|
|
32
|
+
case 'IntValue':
|
|
33
|
+
case 'RealValue':
|
|
34
|
+
out[member.name] = String(v.value);
|
|
35
|
+
break;
|
|
36
|
+
case 'BooleanValue':
|
|
37
|
+
out[member.name] = String(v.value);
|
|
38
|
+
break;
|
|
39
|
+
case 'EnumValue':
|
|
40
|
+
out[member.name] = String(v.enumRef ?? '');
|
|
41
|
+
break;
|
|
42
|
+
default: break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
17
47
|
const AST_TYPE_TO_CONSTRUCT = {
|
|
18
48
|
PartDefinition: 'part def',
|
|
19
49
|
RequirementDefinition: 'requirement def',
|
|
@@ -33,6 +63,27 @@ const AST_TYPE_TO_CONSTRUCT = {
|
|
|
33
63
|
*/
|
|
34
64
|
export class KindRegistry {
|
|
35
65
|
kinds = new Map();
|
|
66
|
+
/**
|
|
67
|
+
* Attribute values bound by a `view def`, keyed by definition name, with the
|
|
68
|
+
* definition's own supertype chain already merged in.
|
|
69
|
+
*
|
|
70
|
+
* A view usage inherits these — `view mainScreenLayout : MemoScreenLayoutView`
|
|
71
|
+
* gets that definition's `viewKind` without restating it, and SysIDE in fact
|
|
72
|
+
* REJECTS restating it ("Cannot override a binding feature value"). So the
|
|
73
|
+
* definition is the only place the value can live, and consumers resolve a
|
|
74
|
+
* usage's presentation by falling back here.
|
|
75
|
+
*
|
|
76
|
+
* View definitions are not registered as kinds: they classify views, not
|
|
77
|
+
* model elements, and adding them to the kind extent would put them in the
|
|
78
|
+
* Explorer and in kind counts where they do not belong.
|
|
79
|
+
*/
|
|
80
|
+
viewDefaults = new Map();
|
|
81
|
+
viewSuperTypes = new Map();
|
|
82
|
+
/** short name → the qualified name it currently resolves to. */
|
|
83
|
+
byQualifiedName = new Map();
|
|
84
|
+
/** qualified name → declaring file, for collision diagnostics. */
|
|
85
|
+
sourceFiles = new Map();
|
|
86
|
+
collisions = new Map();
|
|
36
87
|
/** Number of registered kinds */
|
|
37
88
|
get size() {
|
|
38
89
|
return this.kinds.size;
|
|
@@ -44,6 +95,26 @@ export class KindRegistry {
|
|
|
44
95
|
getKind(name) {
|
|
45
96
|
return this.kinds.get(name);
|
|
46
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Attribute values a view usage inherits from its `view def`, resolved up
|
|
100
|
+
* the definition's specialization chain (nearest declaration wins).
|
|
101
|
+
*/
|
|
102
|
+
getViewDefaults(viewDefName) {
|
|
103
|
+
if (!viewDefName)
|
|
104
|
+
return undefined;
|
|
105
|
+
const merged = {};
|
|
106
|
+
const seen = new Set();
|
|
107
|
+
let name = viewDefName;
|
|
108
|
+
while (name && !seen.has(name)) {
|
|
109
|
+
seen.add(name);
|
|
110
|
+
for (const [k, v] of Object.entries(this.viewDefaults.get(name) ?? {})) {
|
|
111
|
+
if (!(k in merged))
|
|
112
|
+
merged[k] = v; // nearest declaration wins
|
|
113
|
+
}
|
|
114
|
+
name = this.viewSuperTypes.get(name);
|
|
115
|
+
}
|
|
116
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
117
|
+
}
|
|
47
118
|
/**
|
|
48
119
|
* Convert a registry entry to a KindDefinition (for backward compat with builder).
|
|
49
120
|
*/
|
|
@@ -106,6 +177,12 @@ export class KindRegistry {
|
|
|
106
177
|
derivedBy: entry.derivedBy ? [...entry.derivedBy] : undefined,
|
|
107
178
|
});
|
|
108
179
|
}
|
|
180
|
+
for (const [name, defaults] of this.viewDefaults) {
|
|
181
|
+
result.viewDefaults.set(name, { ...defaults });
|
|
182
|
+
}
|
|
183
|
+
for (const [name, superType] of this.viewSuperTypes) {
|
|
184
|
+
result.viewSuperTypes.set(name, superType);
|
|
185
|
+
}
|
|
109
186
|
const discovered = new KindRegistry();
|
|
110
187
|
discovered.populateFromDocuments(documents);
|
|
111
188
|
let pending = discovered.entries().filter(entry => !result.has(entry.name));
|
|
@@ -185,8 +262,88 @@ export class KindRegistry {
|
|
|
185
262
|
}
|
|
186
263
|
/** Register a kind manually (for testing or config fallback) */
|
|
187
264
|
register(entry) {
|
|
265
|
+
this.recordIdentity(entry);
|
|
188
266
|
this.kinds.set(entry.name, entry);
|
|
189
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Track qualified identity alongside the short-name map.
|
|
270
|
+
*
|
|
271
|
+
* Short-name lookup is kept as-is so every existing caller keeps working;
|
|
272
|
+
* what changes is that a shadowed definition is no longer lost silently.
|
|
273
|
+
* A re-registration of the SAME qualified name is not a collision — that
|
|
274
|
+
* happens legitimately when a registry is copied in `withProjectExtensions`.
|
|
275
|
+
*/
|
|
276
|
+
recordIdentity(entry) {
|
|
277
|
+
const qualified = entry.qualifiedName ?? entry.name;
|
|
278
|
+
const existing = this.byQualifiedName.get(entry.name);
|
|
279
|
+
if (existing && existing !== qualified) {
|
|
280
|
+
const collision = this.collisions.get(entry.name) ?? {
|
|
281
|
+
shortName: entry.name,
|
|
282
|
+
qualifiedNames: [existing],
|
|
283
|
+
sourceFiles: [this.sourceFiles.get(existing) ?? '(unknown)'],
|
|
284
|
+
};
|
|
285
|
+
if (!collision.qualifiedNames.includes(qualified)) {
|
|
286
|
+
collision.qualifiedNames.push(qualified);
|
|
287
|
+
collision.sourceFiles.push(entry.sourceFile ?? '(unknown)');
|
|
288
|
+
}
|
|
289
|
+
this.collisions.set(entry.name, collision);
|
|
290
|
+
}
|
|
291
|
+
this.byQualifiedName.set(entry.name, qualified);
|
|
292
|
+
if (entry.sourceFile)
|
|
293
|
+
this.sourceFiles.set(qualified, entry.sourceFile);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Short names claimed by more than one qualified definition.
|
|
297
|
+
*
|
|
298
|
+
* Callers surface these as load diagnostics: a reference to an ambiguous
|
|
299
|
+
* short name cannot be resolved by load order and needs qualifying.
|
|
300
|
+
*/
|
|
301
|
+
getCollisions() {
|
|
302
|
+
return [...this.collisions.values()]
|
|
303
|
+
.sort((a, b) => a.shortName.localeCompare(b.shortName));
|
|
304
|
+
}
|
|
305
|
+
/** Qualified name a short name currently resolves to. */
|
|
306
|
+
getQualifiedName(shortName) {
|
|
307
|
+
return this.byQualifiedName.get(shortName);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Give a kind the placement of the kind it specializes, wherever its own
|
|
311
|
+
* declaring path could not supply one.
|
|
312
|
+
*
|
|
313
|
+
* Layer, namespace and standard are derived from the declaring file's path
|
|
314
|
+
* under `src/<layer>/`. An EXTENSION declares its types in
|
|
315
|
+
* `extensions/<name>/src/`, which matches no layer — so `RosNode`,
|
|
316
|
+
* `CloudService` and `AadlThread` all landed in `unknown` and a project
|
|
317
|
+
* that included one showed most of its model as unplaced.
|
|
318
|
+
*
|
|
319
|
+
* The placement is read from the specialization, not from any list of
|
|
320
|
+
* names: `RosNode : SoftwareComponent` is implementation because
|
|
321
|
+
* `SoftwareComponent` is. Resolution repeats so a chain works regardless
|
|
322
|
+
* of source-file order (`RosContainerImage -> ContainerImage ->
|
|
323
|
+
* DeploymentUnit`), and a kind that specializes nothing placed stays
|
|
324
|
+
* `unknown`, which is the honest answer.
|
|
325
|
+
*
|
|
326
|
+
* Must be called after populateFromDocuments() is complete.
|
|
327
|
+
*/
|
|
328
|
+
inheritPlacementFromSuperTypes() {
|
|
329
|
+
let progressed = true;
|
|
330
|
+
while (progressed) {
|
|
331
|
+
progressed = false;
|
|
332
|
+
for (const entry of this.kinds.values()) {
|
|
333
|
+
if (entry.layer !== 'unknown' || !entry.superType)
|
|
334
|
+
continue;
|
|
335
|
+
const parent = this.kinds.get(entry.superType.split('::').pop() ?? '');
|
|
336
|
+
if (!parent || parent === entry || parent.layer === 'unknown')
|
|
337
|
+
continue;
|
|
338
|
+
entry.layer = parent.layer;
|
|
339
|
+
if (!entry.namespace?.length && parent.namespace)
|
|
340
|
+
entry.namespace = [...parent.namespace];
|
|
341
|
+
if (!entry.standard && parent.standard)
|
|
342
|
+
entry.standard = parent.standard;
|
|
343
|
+
progressed = true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
190
347
|
/**
|
|
191
348
|
* Compute the derivedBy reverse-lookup for all kinds.
|
|
192
349
|
* Must be called after populateFromDocuments() is complete.
|
|
@@ -220,16 +377,30 @@ export class KindRegistry {
|
|
|
220
377
|
const namespace = resolveNamespaceFromPath(doc.filePath);
|
|
221
378
|
for (const member of model.members) {
|
|
222
379
|
if (isPackageDeclaration(member)) {
|
|
223
|
-
this.walkPackage(member, layer, standard, namespace);
|
|
380
|
+
this.walkPackage(member, layer, standard, namespace, [], doc.filePath);
|
|
224
381
|
}
|
|
225
382
|
}
|
|
226
383
|
}
|
|
227
384
|
}
|
|
228
385
|
/** Walk a package declaration and register all Definition nodes */
|
|
229
|
-
walkPackage(pkg, layer, standard, namespace) {
|
|
386
|
+
walkPackage(pkg, layer, standard, namespace, packagePath = [], sourceFile) {
|
|
387
|
+
// A declaration's qualified name is the enclosing package chain, which
|
|
388
|
+
// is why nested package declarations are required: a file declaring
|
|
389
|
+
// `package a::b` gives no chain to walk.
|
|
390
|
+
const here = pkg.name ? [...packagePath, pkg.name] : packagePath;
|
|
230
391
|
for (const member of pkg.members) {
|
|
231
392
|
if (isPackageDeclaration(member)) {
|
|
232
|
-
this.walkPackage(member, layer, standard, namespace);
|
|
393
|
+
this.walkPackage(member, layer, standard, namespace, here, sourceFile);
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (member.$type === 'ViewDefinition') {
|
|
397
|
+
const viewName = member.name;
|
|
398
|
+
if (viewName) {
|
|
399
|
+
this.viewDefaults.set(viewName, extractBoundAttributes(member.body));
|
|
400
|
+
const sup = member.specialization?.superType;
|
|
401
|
+
if (sup)
|
|
402
|
+
this.viewSuperTypes.set(viewName, sup);
|
|
403
|
+
}
|
|
233
404
|
continue;
|
|
234
405
|
}
|
|
235
406
|
// Check each definition type
|
|
@@ -253,7 +424,7 @@ export class KindRegistry {
|
|
|
253
424
|
const superType = 'specialization' in member
|
|
254
425
|
? member.specialization?.superType
|
|
255
426
|
: undefined;
|
|
256
|
-
this.
|
|
427
|
+
this.register({
|
|
257
428
|
name,
|
|
258
429
|
label: name,
|
|
259
430
|
layer,
|
|
@@ -262,9 +433,20 @@ export class KindRegistry {
|
|
|
262
433
|
standard,
|
|
263
434
|
isAbstract: ('isAbstract' in member && member.isAbstract) || undefined,
|
|
264
435
|
namespace,
|
|
436
|
+
qualifiedName: [...here, name].join('::'),
|
|
437
|
+
sourceFile,
|
|
265
438
|
});
|
|
266
439
|
}
|
|
267
440
|
}
|
|
268
441
|
}
|
|
269
442
|
}
|
|
443
|
+
/** An empty view — what a caller has before any ontology is resolved. */
|
|
444
|
+
export const EMPTY_ONTOLOGY_VIEW = { kinds: {}, relationshipTypes: [] };
|
|
445
|
+
/** Build a view from populated registries. */
|
|
446
|
+
export function ontologyViewFrom(kindRegistry, relationshipRegistry) {
|
|
447
|
+
return {
|
|
448
|
+
kinds: kindRegistry?.toKindsRecord() ?? {},
|
|
449
|
+
relationshipTypes: relationshipRegistry?.toRelationshipTypesArray() ?? [],
|
|
450
|
+
};
|
|
451
|
+
}
|
|
270
452
|
//# sourceMappingURL=kind-registry.js.map
|