@memoarchitect/tools 0.6.6 → 0.7.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 +54 -11
- package/package.json +19 -7
- package/packages/tools/lib/analysis-starters.d.ts +4 -0
- package/packages/tools/lib/analysis-starters.d.ts.map +1 -0
- package/packages/tools/lib/analysis-starters.js +425 -0
- package/packages/tools/lib/analysis-starters.js.map +1 -0
- package/packages/tools/lib/bin/memo.js +161 -10
- package/packages/tools/lib/bin/memo.js.map +1 -1
- package/packages/tools/lib/browser/index.d.ts +1 -1
- package/packages/tools/lib/browser/index.d.ts.map +1 -1
- package/packages/tools/lib/browser/index.js +1 -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 +208 -74
- 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-preview.js +1 -1
- package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
- package/packages/tools/lib/commands/dhf.js +1 -1
- 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 +37 -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 -75
- 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/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 +183 -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/template-resolver.js +1 -1
- 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/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 +196 -51
- package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/ast.js +136 -15
- 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 +867 -295
- 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 +5 -1
- package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
- package/packages/tools/lib/mcp/model-loader.js +16 -27
- 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 +264 -26
- 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 +114 -1
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.js +148 -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/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/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 +570 -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 +340 -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 +12 -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 +16 -1
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-registry.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +38 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +3 -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.d.ts +8 -7
- package/packages/tools/lib/model/short-id.d.ts.map +1 -1
- package/packages/tools/lib/model/short-id.js +26 -17
- 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-files.d.ts +9 -0
- package/packages/tools/lib/model/sysml-files.d.ts.map +1 -1
- package/packages/tools/lib/model/sysml-files.js +20 -1
- package/packages/tools/lib/model/sysml-files.js.map +1 -1
- 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.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +60 -6
- 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 +311 -11
- 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 +721 -53
- 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/persistor.d.ts +63 -8
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +152 -44
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/relationship-writer.d.ts +28 -4
- package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/relationship-writer.js +98 -9
- 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 +87 -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 +2 -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 +17 -0
- package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -0
- package/packages/tools/lib/validator/architecture-validator.js +101 -0
- package/packages/tools/lib/validator/architecture-validator.js.map +1 -0
- 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 +15 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.js +62 -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 +57 -4
- 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 +104 -18
- 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
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
// ─── MEMO
|
|
1
|
+
// ─── MEMO Application Settings ────────────────────────────────────────────────
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
// Projects inherit from domain configs via the `extends` field.
|
|
5
|
-
// The CLI merges the inheritance chain at startup.
|
|
3
|
+
// How the tools operate on a project — never what the project's model contains.
|
|
6
4
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
5
|
+
// `MEMOConfig` used to be the project's semantic description: it selected the
|
|
6
|
+
// methodology, the ontologies, the modules, the viewpoints, the layers, the
|
|
7
|
+
// kinds, and the relationship types. None of that is here now. Those facts are
|
|
8
|
+
// SysML, resolved by `native-project.ts` and `methodology-resolver.ts`, and a
|
|
9
|
+
// settings file that still declares them is rejected by `settings-boundary.ts`.
|
|
10
|
+
//
|
|
11
|
+
// What remains is the section 5.3 list: which external compiler and packager to
|
|
12
|
+
// run, and where their executables and config files are. Changing any of it
|
|
13
|
+
// changes how a command behaves, not what the model means.
|
|
12
14
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
15
|
export {};
|
|
14
16
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/model/config.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/model/config.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,EAAE;AACF,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,2DAA2D;AAC3D,gFAAgF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { EffectiveMethodology, RuleCandidate } from './methodology-resolver.js';
|
|
2
|
+
import type { CompiledConstraint } from '../validator/constraint-eval.js';
|
|
3
|
+
/**
|
|
4
|
+
* The part of a kind this module needs.
|
|
5
|
+
*
|
|
6
|
+
* `layer` is optional here even though the registry always fills it: a caller
|
|
7
|
+
* may be asking about a kind that did not resolve, and "unplaced" has to be a
|
|
8
|
+
* representable answer rather than a cast.
|
|
9
|
+
*/
|
|
10
|
+
export interface ScopedKind {
|
|
11
|
+
layer?: string;
|
|
12
|
+
}
|
|
13
|
+
export type ScopeDimension = 'layer' | 'module' | 'standard' | 'artifactKind' | 'viewpoint';
|
|
14
|
+
/** The resolved answer to "what is in scope", ready to be asked questions. */
|
|
15
|
+
export interface EffectiveScope {
|
|
16
|
+
mode: 'allAvailable' | 'explicit';
|
|
17
|
+
layers: ReadonlySet<string>;
|
|
18
|
+
modules: ReadonlySet<string>;
|
|
19
|
+
standards: ReadonlySet<string>;
|
|
20
|
+
artifactKinds: ReadonlySet<string>;
|
|
21
|
+
viewpoints: ReadonlySet<string>;
|
|
22
|
+
}
|
|
23
|
+
export declare function buildEffectiveScope(methodology: EffectiveMethodology): EffectiveScope;
|
|
24
|
+
/** A scope that selects everything — the shape callers get before a binding resolves. */
|
|
25
|
+
export declare const UNRESTRICTED_SCOPE: EffectiveScope;
|
|
26
|
+
/**
|
|
27
|
+
* Is one value in scope for a dimension?
|
|
28
|
+
*
|
|
29
|
+
* Under `allAvailable` everything the project resolved is in scope, and the
|
|
30
|
+
* lists are required to be empty. Under `explicit` only what is listed is in
|
|
31
|
+
* scope — including when the list is empty, which selects nothing.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isInScope(scope: EffectiveScope, dimension: ScopeDimension, value: string | undefined): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Is a kind in scope?
|
|
36
|
+
*
|
|
37
|
+
* A kind belongs to exactly one axis position, so it is in scope when its layer
|
|
38
|
+
* is selected. A kind with no layer is only in scope under `allAvailable`: an
|
|
39
|
+
* unplaced kind cannot be shown to satisfy an explicit selection.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isKindInScope(scope: EffectiveScope, kind: ScopedKind): boolean;
|
|
42
|
+
/** Filter kinds to those in scope. Used by palettes and creation dialogs alike. */
|
|
43
|
+
export declare function filterKindsInScope<T extends ScopedKind>(kinds: readonly T[], scope: EffectiveScope): T[];
|
|
44
|
+
/**
|
|
45
|
+
* Is a package in scope?
|
|
46
|
+
*
|
|
47
|
+
* `includedLayer` and `includedModule` both name packages; a methodology splits
|
|
48
|
+
* them for readability, not because the resolver treats them differently.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isPackageInScope(scope: EffectiveScope, packageName: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Is a rule active under this scope?
|
|
53
|
+
*
|
|
54
|
+
* A rule is scoped by the package that declares it. Disposition is a separate
|
|
55
|
+
* question answered by `resolveEffectiveRules`: a rule can be in scope and
|
|
56
|
+
* disabled, and the audit needs to show both facts rather than one.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isRulePackageInScope(scope: EffectiveScope, declaringPackage: string | undefined): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* The rules a project's methodology actually activates.
|
|
61
|
+
*
|
|
62
|
+
* A rule is active when BOTH its declaring package and its subject kind are in
|
|
63
|
+
* scope. A rule whose subject the methodology never selected can only report on
|
|
64
|
+
* content the project did not agree to model — which is how the GPCA prototype
|
|
65
|
+
* used to accumulate cybersecurity violations for a discipline it had excluded.
|
|
66
|
+
*
|
|
67
|
+
* This lives here, shared, because `memo validate` and `memo rules list` are
|
|
68
|
+
* two views of one answer. They computed it separately, and inevitably
|
|
69
|
+
* disagreed: `validate` scope-filtered and `rules list` did not, so the same
|
|
70
|
+
* project reported 20 rules and 38 rules depending on which command you asked.
|
|
71
|
+
* A number that changes with the question is not an audit.
|
|
72
|
+
*/
|
|
73
|
+
export declare function activeRuleCandidates(constraints: readonly CompiledConstraint[], scope: EffectiveScope, filePackages: ReadonlyMap<string, string>, kindSourceFile: (kindName: string) => string | undefined): RuleCandidate[];
|
|
74
|
+
//# sourceMappingURL=effective-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-scope.d.ts","sourceRoot":"","sources":["../../src/model/effective-scope.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,WAAW,CAAC;AAE5F,8EAA8E;AAC9E,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,cAAc,GAAG,UAAU,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,oBAAoB,GAAG,cAAc,CASrF;AAED,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,EAAE,cAOhC,CAAC;AAYF;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI9G;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAE9E;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,EACnD,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,cAAc,GACtB,CAAC,EAAE,CAGL;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAIzG;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,SAAS,kBAAkB,EAAE,EAC1C,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GACzD,aAAa,EAAE,CAoBjB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// ─── Effective Scope ──────────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// What the project's methodology actually selects, and the single place that
|
|
4
|
+
// answers "is this in scope?" for model visibility, rule activation,
|
|
5
|
+
// completeness, palettes, and allowed creation kinds.
|
|
6
|
+
//
|
|
7
|
+
// The behaviour this replaces is the reason the module exists. `dimension-filter`
|
|
8
|
+
// treated an empty inclusion list as "the methodology does not restrict", so a
|
|
9
|
+
// methodology that selected nothing and a methodology that selected everything
|
|
10
|
+
// produced identical results, and nobody could tell which one had been authored.
|
|
11
|
+
// Scope is now explicit: `scopeMode` says which it is, and under `explicit` an
|
|
12
|
+
// empty list selects nothing.
|
|
13
|
+
//
|
|
14
|
+
// Design reference: sections 9.2 and 18.3 deliverable 3.
|
|
15
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
import { ruleCandidatesFromConstraints } from './methodology-resolver.js';
|
|
17
|
+
export function buildEffectiveScope(methodology) {
|
|
18
|
+
return {
|
|
19
|
+
mode: methodology.scopeMode,
|
|
20
|
+
layers: new Set(methodology.includedLayers),
|
|
21
|
+
modules: new Set(methodology.includedModules),
|
|
22
|
+
standards: new Set(methodology.includedStandards),
|
|
23
|
+
artifactKinds: new Set(methodology.includedArtifactKinds),
|
|
24
|
+
viewpoints: new Set(methodology.includedViewpoints),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** A scope that selects everything — the shape callers get before a binding resolves. */
|
|
28
|
+
export const UNRESTRICTED_SCOPE = {
|
|
29
|
+
mode: 'allAvailable',
|
|
30
|
+
layers: new Set(),
|
|
31
|
+
modules: new Set(),
|
|
32
|
+
standards: new Set(),
|
|
33
|
+
artifactKinds: new Set(),
|
|
34
|
+
viewpoints: new Set(),
|
|
35
|
+
};
|
|
36
|
+
function setFor(scope, dimension) {
|
|
37
|
+
switch (dimension) {
|
|
38
|
+
case 'layer': return scope.layers;
|
|
39
|
+
case 'module': return scope.modules;
|
|
40
|
+
case 'standard': return scope.standards;
|
|
41
|
+
case 'artifactKind': return scope.artifactKinds;
|
|
42
|
+
case 'viewpoint': return scope.viewpoints;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Is one value in scope for a dimension?
|
|
47
|
+
*
|
|
48
|
+
* Under `allAvailable` everything the project resolved is in scope, and the
|
|
49
|
+
* lists are required to be empty. Under `explicit` only what is listed is in
|
|
50
|
+
* scope — including when the list is empty, which selects nothing.
|
|
51
|
+
*/
|
|
52
|
+
export function isInScope(scope, dimension, value) {
|
|
53
|
+
if (scope.mode === 'allAvailable')
|
|
54
|
+
return true;
|
|
55
|
+
if (value === undefined)
|
|
56
|
+
return false;
|
|
57
|
+
return setFor(scope, dimension).has(value);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Is a kind in scope?
|
|
61
|
+
*
|
|
62
|
+
* A kind belongs to exactly one axis position, so it is in scope when its layer
|
|
63
|
+
* is selected. A kind with no layer is only in scope under `allAvailable`: an
|
|
64
|
+
* unplaced kind cannot be shown to satisfy an explicit selection.
|
|
65
|
+
*/
|
|
66
|
+
export function isKindInScope(scope, kind) {
|
|
67
|
+
return isInScope(scope, 'layer', kind.layer);
|
|
68
|
+
}
|
|
69
|
+
/** Filter kinds to those in scope. Used by palettes and creation dialogs alike. */
|
|
70
|
+
export function filterKindsInScope(kinds, scope) {
|
|
71
|
+
if (scope.mode === 'allAvailable')
|
|
72
|
+
return [...kinds];
|
|
73
|
+
return kinds.filter(kind => isKindInScope(scope, kind));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Is a package in scope?
|
|
77
|
+
*
|
|
78
|
+
* `includedLayer` and `includedModule` both name packages; a methodology splits
|
|
79
|
+
* them for readability, not because the resolver treats them differently.
|
|
80
|
+
*/
|
|
81
|
+
export function isPackageInScope(scope, packageName) {
|
|
82
|
+
if (scope.mode === 'allAvailable')
|
|
83
|
+
return true;
|
|
84
|
+
return scope.layers.has(packageName) || scope.modules.has(packageName);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Is a rule active under this scope?
|
|
88
|
+
*
|
|
89
|
+
* A rule is scoped by the package that declares it. Disposition is a separate
|
|
90
|
+
* question answered by `resolveEffectiveRules`: a rule can be in scope and
|
|
91
|
+
* disabled, and the audit needs to show both facts rather than one.
|
|
92
|
+
*/
|
|
93
|
+
export function isRulePackageInScope(scope, declaringPackage) {
|
|
94
|
+
if (scope.mode === 'allAvailable')
|
|
95
|
+
return true;
|
|
96
|
+
if (!declaringPackage)
|
|
97
|
+
return false;
|
|
98
|
+
return isPackageInScope(scope, declaringPackage);
|
|
99
|
+
}
|
|
100
|
+
// ─── Rule activation ─────────────────────────────────────────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* The rules a project's methodology actually activates.
|
|
103
|
+
*
|
|
104
|
+
* A rule is active when BOTH its declaring package and its subject kind are in
|
|
105
|
+
* scope. A rule whose subject the methodology never selected can only report on
|
|
106
|
+
* content the project did not agree to model — which is how the GPCA prototype
|
|
107
|
+
* used to accumulate cybersecurity violations for a discipline it had excluded.
|
|
108
|
+
*
|
|
109
|
+
* This lives here, shared, because `memo validate` and `memo rules list` are
|
|
110
|
+
* two views of one answer. They computed it separately, and inevitably
|
|
111
|
+
* disagreed: `validate` scope-filtered and `rules list` did not, so the same
|
|
112
|
+
* project reported 20 rules and 38 rules depending on which command you asked.
|
|
113
|
+
* A number that changes with the question is not an audit.
|
|
114
|
+
*/
|
|
115
|
+
export function activeRuleCandidates(constraints, scope, filePackages, kindSourceFile) {
|
|
116
|
+
const packageOf = (file) => file ? filePackages.get(file) : undefined;
|
|
117
|
+
const subjectInScope = (appliesTo) => {
|
|
118
|
+
if (scope.mode === 'allAvailable')
|
|
119
|
+
return true;
|
|
120
|
+
// A model-level rule has no single subject kind to place.
|
|
121
|
+
if (!appliesTo || appliesTo === 'Model')
|
|
122
|
+
return true;
|
|
123
|
+
const kindName = appliesTo.split('[')[0];
|
|
124
|
+
// A methodology's inclusion lists name packages, so a kind is placed by
|
|
125
|
+
// the package that declares it — not by the `layer` string, which is a
|
|
126
|
+
// display grouping in a different namespace.
|
|
127
|
+
return isRulePackageInScope(scope, packageOf(kindSourceFile(kindName)));
|
|
128
|
+
};
|
|
129
|
+
return ruleCandidatesFromConstraints(constraints
|
|
130
|
+
.filter(c => isRulePackageInScope(scope, packageOf(c.sourceFile)))
|
|
131
|
+
.filter(c => subjectInScope(c.appliesToKind)));
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=effective-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-scope.js","sourceRoot":"","sources":["../../src/model/effective-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { SysmlIdentity, SysmlIR } from '../sysml-ir/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* A write was made against an identity the current IR does not have.
|
|
4
|
+
*
|
|
5
|
+
* Loud on purpose. The alternative — falling back to a name lookup — is how a
|
|
6
|
+
* write ends up editing the wrong element, which is the failure this whole
|
|
7
|
+
* module exists to make impossible.
|
|
8
|
+
*/
|
|
9
|
+
export declare class StaleIrIdentityError extends Error {
|
|
10
|
+
readonly identityId: string;
|
|
11
|
+
constructor(identityId: string, detail: string);
|
|
12
|
+
}
|
|
13
|
+
/** The wire form: what a client needs to name an element in a later write. */
|
|
14
|
+
export type IrIdentityTable = Record<string, string>;
|
|
15
|
+
/** What an index knows about one addressable declaration. */
|
|
16
|
+
export interface IrIdentityEntry {
|
|
17
|
+
identity: SysmlIdentity;
|
|
18
|
+
/** The Memo element it projects to, when the projection mapped it. */
|
|
19
|
+
memoElementId?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface IrIdentityIndex {
|
|
22
|
+
/** Memo element ID → IR identity ID, for elements the projection mapped. */
|
|
23
|
+
readonly byMemoElement: IrIdentityTable;
|
|
24
|
+
/** IR identity ID → the declaration it names. */
|
|
25
|
+
readonly byIdentity: ReadonlyMap<string, IrIdentityEntry>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Index one IR for identity resolution.
|
|
29
|
+
*
|
|
30
|
+
* Both directions are needed and neither is derivable cheaply from the other:
|
|
31
|
+
* the client holds Memo element IDs and has to mint an identity from one, and
|
|
32
|
+
* the server holds an identity and has to find what it names.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildIrIdentityIndex(ir: SysmlIR | undefined): IrIdentityIndex;
|
|
35
|
+
/**
|
|
36
|
+
* Rebuild an index from the compact table alone.
|
|
37
|
+
*
|
|
38
|
+
* The whole IR is not shipped with a model update — `standardProperties` carry
|
|
39
|
+
* every declared property of every node, and a surface that only needs to
|
|
40
|
+
* *address* an element does not need its contents. The identity ID is a
|
|
41
|
+
* self-describing string, so the table is enough to reconstruct everything the
|
|
42
|
+
* resolver uses.
|
|
43
|
+
*/
|
|
44
|
+
export declare function indexFromIdentityTable(table: IrIdentityTable | undefined): IrIdentityIndex;
|
|
45
|
+
/**
|
|
46
|
+
* Read an identity ID back into its parts.
|
|
47
|
+
*
|
|
48
|
+
* `file:///…/model/a.sysml#members[0]/members[2]:PartUsage`. The file URI may
|
|
49
|
+
* itself contain `#` only if percent-encoded, and the metaclass never contains
|
|
50
|
+
* `:`, so splitting at the first `#` and the last `:` is unambiguous.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseSysmlIdentityId(id: string): SysmlIdentity | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* The compact table shipped with a model update.
|
|
55
|
+
*
|
|
56
|
+
* The whole IR is not sent: its `standardProperties` carry every declared
|
|
57
|
+
* property of every node, and a client that only needs to address an element
|
|
58
|
+
* does not need its contents.
|
|
59
|
+
*/
|
|
60
|
+
export declare function irIdentityTable(ir: SysmlIR | undefined): IrIdentityTable;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve an identity ID against the current IR, or fail loudly.
|
|
63
|
+
*
|
|
64
|
+
* `expectedMemoElementId`, when given, is checked too: an identity that still
|
|
65
|
+
* exists but now names a different element is exactly as stale as one that has
|
|
66
|
+
* disappeared, and it is the more dangerous of the two.
|
|
67
|
+
*/
|
|
68
|
+
export declare function requireIrIdentity(index: IrIdentityIndex, identityId: string, expectedMemoElementId?: string): IrIdentityEntry;
|
|
69
|
+
/** The identity a client should quote when it writes to this element. */
|
|
70
|
+
export declare function identityForMemoElement(index: IrIdentityIndex, memoElementId: string): string | undefined;
|
|
71
|
+
/** `members[3]/members[1]` → `[3, 1]`. Any other shape is not a path we minted. */
|
|
72
|
+
export declare function parseDeclarationPath(declarationPath: string): number[] | undefined;
|
|
73
|
+
/** The project-relative file an identity's URI names, given the project root. */
|
|
74
|
+
export declare function identityFile(identity: SysmlIdentity, projectRoot: string): string | undefined;
|
|
75
|
+
/** True when this identity was minted for that project-relative file. */
|
|
76
|
+
export declare function identityNamesFile(identity: SysmlIdentity, projectRoot: string, relativePath: string): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Walk a parsed document to the declaration an identity addresses.
|
|
79
|
+
*
|
|
80
|
+
* The metaclass is verified, not assumed: a path that still resolves but to a
|
|
81
|
+
* different kind of declaration means the file was edited underneath this
|
|
82
|
+
* identity, and continuing would rewrite the wrong lines.
|
|
83
|
+
*/
|
|
84
|
+
export declare function resolveDeclarationByIdentity(root: {
|
|
85
|
+
members?: unknown[];
|
|
86
|
+
}, identity: SysmlIdentity): {
|
|
87
|
+
$type?: string;
|
|
88
|
+
name?: string;
|
|
89
|
+
$cstNode?: {
|
|
90
|
+
offset: number;
|
|
91
|
+
length: number;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=ir-identity.d.ts.map
|
|
@@ -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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"}
|