@memoarchitect/tools 0.6.7 → 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 +36 -11
- package/package.json +19 -7
- 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 +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/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 +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 +231 -19
- 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 +10 -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 +27 -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.map +1 -1
- package/packages/tools/lib/model/short-id.js +2 -0
- 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.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +36 -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 +298 -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 -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 +87 -0
- package/packages/tools/lib/server/sysml-notation.js.map +1 -0
- 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/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 +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 +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
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type BuilderRegistries } from '../model/builder.js';
|
|
2
|
+
import { type ParseError } from '../model/semantic.js';
|
|
3
|
+
import type { MEMOConfig } from '../model/config.js';
|
|
4
|
+
import { type MemoIr } from './protocol.js';
|
|
5
|
+
/**
|
|
6
|
+
* The project's effective settings.
|
|
7
|
+
*
|
|
8
|
+
* Settings are optional — a project with none is complete, because a MEMO
|
|
9
|
+
* project declares its identity in SysML, not in YAML.
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadProjectConfig(projectDir: string): MEMOConfig;
|
|
12
|
+
/**
|
|
13
|
+
* The ontology registries the builder resolves kinds against.
|
|
14
|
+
*
|
|
15
|
+
* A project that cannot load them still lowers, with reduced kind resolution —
|
|
16
|
+
* §1.1 again: the compiler reports what is wrong, it does not refuse to work.
|
|
17
|
+
*/
|
|
18
|
+
export declare function loadBuilderRegistries(projectDir: string): Promise<BuilderRegistries | undefined>;
|
|
19
|
+
export interface LoweringOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Ontology registries the caller has already loaded. See `ProviderContext`.
|
|
22
|
+
*/
|
|
23
|
+
registries?: BuilderRegistries;
|
|
24
|
+
/**
|
|
25
|
+
* The exact sources to read, instead of the directory's own discovery.
|
|
26
|
+
*
|
|
27
|
+
* Absolute paths, and never a project's normal input: a project is defined
|
|
28
|
+
* by what is in it. It exists for callers whose subject is a *file set*
|
|
29
|
+
* rather than a project — conformance runs a corpus unit whose Kernel
|
|
30
|
+
* libraries are `.kerml`, which the project walker does not collect, and a
|
|
31
|
+
* run that silently analysed none of them would report a clean pass on
|
|
32
|
+
* files it never opened.
|
|
33
|
+
*/
|
|
34
|
+
files?: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The sources a run reads: the caller's explicit list, or the project's own.
|
|
38
|
+
*
|
|
39
|
+
* Sorted either way, because "both transports are byte-identical" only holds
|
|
40
|
+
* against an input order that does not depend on who built the list.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveSources(root: string, files?: readonly string[]): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Lower a project to IR.
|
|
45
|
+
*
|
|
46
|
+
* Everything here is deterministic given the file contents: file discovery is
|
|
47
|
+
* sorted, element identity is content-hashed, and the payload is plain JSON. It
|
|
48
|
+
* has to be — "both transports are byte-identical" is only a meaningful test
|
|
49
|
+
* against a function whose output does not depend on which process ran it.
|
|
50
|
+
*/
|
|
51
|
+
export declare function lowerProject(projectDir: string, options?: LoweringOptions): Promise<MemoIr>;
|
|
52
|
+
/**
|
|
53
|
+
* Parse without building — what `check` needs and nothing more.
|
|
54
|
+
*
|
|
55
|
+
* The validator role asks a narrower question than lowering does, and paying
|
|
56
|
+
* for a full model build to answer it would make `memo validate` slower for no
|
|
57
|
+
* reason.
|
|
58
|
+
*/
|
|
59
|
+
export declare function checkProject(projectDir: string, files?: readonly string[]): Promise<{
|
|
60
|
+
accepted: boolean;
|
|
61
|
+
parseErrors: ParseError[];
|
|
62
|
+
}>;
|
|
63
|
+
//# sourceMappingURL=lowering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../src/toolchain/lowering.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAGhE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAOtG;AAED,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEhF;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,CAI3D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// ─── Lowering: the one implementation, reached two ways ──────────────────────
|
|
2
|
+
//
|
|
3
|
+
// "What can MEMO ingest from this revision?" is answered here and nowhere else.
|
|
4
|
+
// The in-process transport calls `lowerProject` directly; the process transport
|
|
5
|
+
// calls it inside `memo-sysmlc`, over the protocol. That is the whole reason both
|
|
6
|
+
// transports can be byte-identical: there is one function, not two that are
|
|
7
|
+
// meant to agree.
|
|
8
|
+
//
|
|
9
|
+
// Note what it takes: a project directory, and nothing else. The compiler loads
|
|
10
|
+
// the project's own settings itself, the way a compiler run in that directory
|
|
11
|
+
// would. Passing a caller-supplied config in-process and letting the child load
|
|
12
|
+
// its own would be the classic way for two transports to drift — same code,
|
|
13
|
+
// different inputs — so the input is derived the same way on both sides.
|
|
14
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
import { resolve } from 'node:path';
|
|
16
|
+
import { buildMemoModel } from '../model/builder.js';
|
|
17
|
+
import { findConfigFile, loadProjectSettings } from '../model/config-loader.js';
|
|
18
|
+
import { loadOntologyRegistries } from '../model/ontology-loader.js';
|
|
19
|
+
import { parseFiles } from '../model/parser-utils.js';
|
|
20
|
+
import { modelToDTO } from '../model/semantic.js';
|
|
21
|
+
import { lowerAstToSysmlIr, projectSysmlIrToMemo } from '../model/sysml-ir.js';
|
|
22
|
+
import { findSysmlFiles } from '../model/sysml-files.js';
|
|
23
|
+
import { loadAndResolveConfig } from '../server/config-resolver.js';
|
|
24
|
+
import { SYSMLC_IR_VERSION } from './protocol.js';
|
|
25
|
+
/**
|
|
26
|
+
* The project's effective settings.
|
|
27
|
+
*
|
|
28
|
+
* Settings are optional — a project with none is complete, because a MEMO
|
|
29
|
+
* project declares its identity in SysML, not in YAML.
|
|
30
|
+
*/
|
|
31
|
+
export function loadProjectConfig(projectDir) {
|
|
32
|
+
const configPath = findConfigFile(projectDir);
|
|
33
|
+
return configPath ? loadAndResolveConfig(configPath) : loadProjectSettings(projectDir);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The ontology registries the builder resolves kinds against.
|
|
37
|
+
*
|
|
38
|
+
* A project that cannot load them still lowers, with reduced kind resolution —
|
|
39
|
+
* §1.1 again: the compiler reports what is wrong, it does not refuse to work.
|
|
40
|
+
*/
|
|
41
|
+
export async function loadBuilderRegistries(projectDir) {
|
|
42
|
+
try {
|
|
43
|
+
const result = await loadOntologyRegistries(projectDir);
|
|
44
|
+
return result.fileCount > 0 ? result.registries : undefined;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The sources a run reads: the caller's explicit list, or the project's own.
|
|
52
|
+
*
|
|
53
|
+
* Sorted either way, because "both transports are byte-identical" only holds
|
|
54
|
+
* against an input order that does not depend on who built the list.
|
|
55
|
+
*/
|
|
56
|
+
export function resolveSources(root, files) {
|
|
57
|
+
return (files ? files.map(file => resolve(root, file)) : findSysmlFiles(root)).slice().sort();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Lower a project to IR.
|
|
61
|
+
*
|
|
62
|
+
* Everything here is deterministic given the file contents: file discovery is
|
|
63
|
+
* sorted, element identity is content-hashed, and the payload is plain JSON. It
|
|
64
|
+
* has to be — "both transports are byte-identical" is only a meaningful test
|
|
65
|
+
* against a function whose output does not depend on which process ran it.
|
|
66
|
+
*/
|
|
67
|
+
export async function lowerProject(projectDir, options = {}) {
|
|
68
|
+
const root = resolve(projectDir);
|
|
69
|
+
const config = loadProjectConfig(root);
|
|
70
|
+
// Loading the ontology closure is the expensive part, and a caller that has
|
|
71
|
+
// already done it — the snapshot builder needs the same registries to
|
|
72
|
+
// validate against — may hand them over rather than pay twice. It is the
|
|
73
|
+
// same value either way: a process transport loads its own, and the two
|
|
74
|
+
// agree because they resolve the same project.
|
|
75
|
+
const registries = options.registries ?? await loadBuilderRegistries(root);
|
|
76
|
+
const { documents, errors } = await parseFiles(resolveSources(root, options.files), `${root}/`);
|
|
77
|
+
const built = buildMemoModel(documents, config, errors, registries);
|
|
78
|
+
const sysml = lowerAstToSysmlIr(documents, modelToDTO(built), root);
|
|
79
|
+
const model = projectSysmlIrToMemo(sysml, modelToDTO(built));
|
|
80
|
+
return {
|
|
81
|
+
irVersion: SYSMLC_IR_VERSION,
|
|
82
|
+
model,
|
|
83
|
+
parseErrors: errors,
|
|
84
|
+
accepted: errors.length === 0,
|
|
85
|
+
sysml,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse without building — what `check` needs and nothing more.
|
|
90
|
+
*
|
|
91
|
+
* The validator role asks a narrower question than lowering does, and paying
|
|
92
|
+
* for a full model build to answer it would make `memo validate` slower for no
|
|
93
|
+
* reason.
|
|
94
|
+
*/
|
|
95
|
+
export async function checkProject(projectDir, files) {
|
|
96
|
+
const root = resolve(projectDir);
|
|
97
|
+
const { errors } = await parseFiles(resolveSources(root, files), `${root}/`);
|
|
98
|
+
return { accepted: errors.length === 0, parseErrors: errors };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=lowering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lowering.js","sourceRoot":"","sources":["../../src/toolchain/lowering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { BuilderRegistries } from '../model/builder.js';
|
|
2
|
+
import type { MEMOConfig } from '../model/config.js';
|
|
3
|
+
import type { Diagnostic } from './diagnostic.js';
|
|
4
|
+
import { type EffectiveToolchain } from './effective.js';
|
|
5
|
+
import { type Availability, type LoweringRunResult, type ProviderRegistry, type ProviderRole, type ProviderRunResult } from './registry.js';
|
|
6
|
+
export interface ToolchainRunOptions {
|
|
7
|
+
config: MEMOConfig;
|
|
8
|
+
projectDir: string;
|
|
9
|
+
registry?: ProviderRegistry;
|
|
10
|
+
/** Overrides the include paths derived from the project's library roots. */
|
|
11
|
+
includeDirs?: string[];
|
|
12
|
+
/**
|
|
13
|
+
* The exact sources to analyse, instead of the directory's own discovery.
|
|
14
|
+
* See `ProviderContext.files` — a conformance corpus is a file set, not a
|
|
15
|
+
* project, and every role has to be told the same set or the counts are not
|
|
16
|
+
* comparable.
|
|
17
|
+
*/
|
|
18
|
+
files?: readonly string[];
|
|
19
|
+
outputPath?: string;
|
|
20
|
+
/** Ontology registries the caller already loaded. See `ProviderContext`. */
|
|
21
|
+
registries?: BuilderRegistries;
|
|
22
|
+
}
|
|
23
|
+
/** Run the selected validator. Diagnostics come back in the `sysml` domain. */
|
|
24
|
+
export declare function runValidator(options: ToolchainRunOptions): Promise<ProviderRunResult>;
|
|
25
|
+
/** Run the selected lowering provider. Diagnostics are `memo-ingest`. */
|
|
26
|
+
export declare function runLowering(options: ToolchainRunOptions): Promise<LoweringRunResult>;
|
|
27
|
+
/** Run the selected packager against `outputPath`. */
|
|
28
|
+
export declare function runPackager(options: ToolchainRunOptions): Promise<ProviderRunResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Collapse an ingest failure that the validator already reported.
|
|
31
|
+
*
|
|
32
|
+
* When one provider fills both roles it sees the same defect twice, once per
|
|
33
|
+
* role. Reporting it twice, in two domains, would make the domain split look
|
|
34
|
+
* like noise. A failure is reported once, in the domain with the most
|
|
35
|
+
* authority — `sysml` outranks `memo-ingest`, because a source the validator
|
|
36
|
+
* rejected is not a story about MEMO's ingest.
|
|
37
|
+
*/
|
|
38
|
+
export declare function mergeDiagnostics(validatorDiagnostics: readonly Diagnostic[], ingestDiagnostics: readonly Diagnostic[]): Diagnostic[];
|
|
39
|
+
export interface RoleProbe {
|
|
40
|
+
role: ProviderRole;
|
|
41
|
+
/** The settings key that selects this role, e.g. `validator`. */
|
|
42
|
+
setting: string;
|
|
43
|
+
provider: string;
|
|
44
|
+
source: 'settings' | 'deprecated-alias' | 'default';
|
|
45
|
+
availability: Availability;
|
|
46
|
+
}
|
|
47
|
+
export interface ToolchainProbe {
|
|
48
|
+
projectDir: string;
|
|
49
|
+
effective: EffectiveToolchain;
|
|
50
|
+
roles: RoleProbe[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve every role and ask each selected provider whether it can run here,
|
|
54
|
+
* without running it.
|
|
55
|
+
*
|
|
56
|
+
* This is what answers "which `syside` am I actually using?" — a question that
|
|
57
|
+
* costs an afternoon when the only way to ask it is to run a build and read
|
|
58
|
+
* the errors.
|
|
59
|
+
*/
|
|
60
|
+
export declare function probeToolchain(options: {
|
|
61
|
+
config: MEMOConfig;
|
|
62
|
+
projectDir: string;
|
|
63
|
+
registry?: ProviderRegistry;
|
|
64
|
+
}): ToolchainProbe;
|
|
65
|
+
/** One `role provider path version` line per role, for `memo toolchain probe`. */
|
|
66
|
+
export declare function formatProbeLine(probe: RoleProbe): string;
|
|
67
|
+
/** The full resolved picture, for `memo config effective`. */
|
|
68
|
+
export interface EffectiveConfigReport {
|
|
69
|
+
projectName: string;
|
|
70
|
+
projectRoot: string;
|
|
71
|
+
settingsFile?: string;
|
|
72
|
+
toolchain: {
|
|
73
|
+
validator: string;
|
|
74
|
+
lowering: string;
|
|
75
|
+
packager: string;
|
|
76
|
+
selections: EffectiveToolchain['selections'];
|
|
77
|
+
providers: Record<string, unknown>;
|
|
78
|
+
};
|
|
79
|
+
deprecations: string[];
|
|
80
|
+
}
|
|
81
|
+
export declare function effectiveConfigReport(options: {
|
|
82
|
+
config: MEMOConfig;
|
|
83
|
+
projectDir: string;
|
|
84
|
+
settingsFile?: string;
|
|
85
|
+
registry?: ProviderRegistry;
|
|
86
|
+
}): EffectiveConfigReport;
|
|
87
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/toolchain/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// ─── Toolchain operations ────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// The single implementation behind both `memo <command>` and Architect's
|
|
4
|
+
// server protocol. Callers pass settings and a project directory and get
|
|
5
|
+
// normalized `Diagnostic`s back. Nothing here branches on a provider name.
|
|
6
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
+
import { discoverLibraryRoots } from '../model/native-project.js';
|
|
8
|
+
import { resolveToolchain } from './effective.js';
|
|
9
|
+
import { PROVIDER_ROLES, ROLE_SETTING, } from './registry.js';
|
|
10
|
+
import { defaultRegistry } from './default-registry.js';
|
|
11
|
+
function context(options) {
|
|
12
|
+
return {
|
|
13
|
+
config: options.config,
|
|
14
|
+
projectDir: options.projectDir,
|
|
15
|
+
includeDirs: options.includeDirs ?? discoverLibraryRoots(options.projectDir).map(r => r.sysmlDir),
|
|
16
|
+
files: options.files,
|
|
17
|
+
outputPath: options.outputPath,
|
|
18
|
+
registries: options.registries,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Run the selected validator. Diagnostics come back in the `sysml` domain. */
|
|
22
|
+
export async function runValidator(options) {
|
|
23
|
+
const registry = options.registry ?? defaultRegistry;
|
|
24
|
+
const effective = resolveToolchain(options.config, registry);
|
|
25
|
+
return registry.resolveValidator(effective.validator, context(options)).run();
|
|
26
|
+
}
|
|
27
|
+
/** Run the selected lowering provider. Diagnostics are `memo-ingest`. */
|
|
28
|
+
export async function runLowering(options) {
|
|
29
|
+
const registry = options.registry ?? defaultRegistry;
|
|
30
|
+
const effective = resolveToolchain(options.config, registry);
|
|
31
|
+
return registry.resolveLowering(effective.lowering, context(options)).run();
|
|
32
|
+
}
|
|
33
|
+
/** Run the selected packager against `outputPath`. */
|
|
34
|
+
export async function runPackager(options) {
|
|
35
|
+
const registry = options.registry ?? defaultRegistry;
|
|
36
|
+
const effective = resolveToolchain(options.config, registry);
|
|
37
|
+
return registry.resolvePackager(effective.packager, context(options)).run();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Collapse an ingest failure that the validator already reported.
|
|
41
|
+
*
|
|
42
|
+
* When one provider fills both roles it sees the same defect twice, once per
|
|
43
|
+
* role. Reporting it twice, in two domains, would make the domain split look
|
|
44
|
+
* like noise. A failure is reported once, in the domain with the most
|
|
45
|
+
* authority — `sysml` outranks `memo-ingest`, because a source the validator
|
|
46
|
+
* rejected is not a story about MEMO's ingest.
|
|
47
|
+
*/
|
|
48
|
+
export function mergeDiagnostics(validatorDiagnostics, ingestDiagnostics) {
|
|
49
|
+
const seen = new Set(validatorDiagnostics.map(fingerprint));
|
|
50
|
+
return [...validatorDiagnostics, ...ingestDiagnostics.filter(d => !seen.has(fingerprint(d)))];
|
|
51
|
+
}
|
|
52
|
+
function fingerprint(diagnostic) {
|
|
53
|
+
const { line = 0, column = 0 } = diagnostic.range?.start ?? {};
|
|
54
|
+
return `${diagnostic.file ?? ''}:${line}:${column}:${diagnostic.message}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolve every role and ask each selected provider whether it can run here,
|
|
58
|
+
* without running it.
|
|
59
|
+
*
|
|
60
|
+
* This is what answers "which `syside` am I actually using?" — a question that
|
|
61
|
+
* costs an afternoon when the only way to ask it is to run a build and read
|
|
62
|
+
* the errors.
|
|
63
|
+
*/
|
|
64
|
+
export function probeToolchain(options) {
|
|
65
|
+
const registry = options.registry ?? defaultRegistry;
|
|
66
|
+
const effective = resolveToolchain(options.config, registry);
|
|
67
|
+
const providerContext = { config: options.config, projectDir: options.projectDir };
|
|
68
|
+
const roles = PROVIDER_ROLES.map(role => {
|
|
69
|
+
const selection = effective.selections.find(s => s.role === role);
|
|
70
|
+
return {
|
|
71
|
+
role,
|
|
72
|
+
setting: ROLE_SETTING[role],
|
|
73
|
+
provider: selection.provider,
|
|
74
|
+
source: selection.source,
|
|
75
|
+
availability: registry.descriptor(role, selection.provider).probe(providerContext),
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
return { projectDir: options.projectDir, effective, roles };
|
|
79
|
+
}
|
|
80
|
+
/** One `role provider path version` line per role, for `memo toolchain probe`. */
|
|
81
|
+
export function formatProbeLine(probe) {
|
|
82
|
+
const { availability } = probe;
|
|
83
|
+
const where = availability.executable ?? `(${availability.transport})`;
|
|
84
|
+
const version = availability.version ? ` ${availability.version}` : '';
|
|
85
|
+
const status = availability.available ? `${where}${version}` : `unavailable — ${availability.detail}`;
|
|
86
|
+
return `${probe.role.padEnd(10)} ${probe.provider.padEnd(12)} ${status}`;
|
|
87
|
+
}
|
|
88
|
+
export function effectiveConfigReport(options) {
|
|
89
|
+
const registry = options.registry ?? defaultRegistry;
|
|
90
|
+
const effective = resolveToolchain(options.config, registry);
|
|
91
|
+
const providers = {};
|
|
92
|
+
for (const id of registry.allIds()) {
|
|
93
|
+
const settings = options.config.toolchain?.[id];
|
|
94
|
+
if (settings !== undefined)
|
|
95
|
+
providers[id] = settings;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
projectName: options.config.projectName,
|
|
99
|
+
projectRoot: options.projectDir,
|
|
100
|
+
settingsFile: options.settingsFile,
|
|
101
|
+
toolchain: {
|
|
102
|
+
validator: effective.validator,
|
|
103
|
+
lowering: effective.lowering,
|
|
104
|
+
packager: effective.packager,
|
|
105
|
+
selections: effective.selections,
|
|
106
|
+
providers,
|
|
107
|
+
},
|
|
108
|
+
deprecations: effective.deprecations,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/toolchain/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ToolInvocation } from './registry.js';
|
|
2
|
+
/** Expand `~`, then resolve relative paths against the project directory. */
|
|
3
|
+
export declare function resolveProjectPath(value: string, projectDir: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* A configured executable is a path when it looks like one, and a PATH lookup
|
|
6
|
+
* otherwise. `syside` means "whatever is on PATH"; `./bin/syside` means that
|
|
7
|
+
* file.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveExecutable(value: string | undefined, fallback: string, projectDir: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Absolute path of a command, resolved the way the shell would.
|
|
12
|
+
*
|
|
13
|
+
* `memo toolchain probe` prints this: knowing *which* `syside` ran matters as
|
|
14
|
+
* much as knowing that one did.
|
|
15
|
+
*/
|
|
16
|
+
export declare function whichExecutable(command: string, env?: NodeJS.ProcessEnv): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* A binary shipped in the same install, found without the user doing anything.
|
|
19
|
+
*
|
|
20
|
+
* "The user is responsible for PATH" is a rule about *third-party* tools. It
|
|
21
|
+
* has never applied to MEMO's own: a default install must work with nothing
|
|
22
|
+
* installed and nothing configured. So a bundled binary is looked up the way
|
|
23
|
+
* Node looks up a module — walk up from a starting directory checking each
|
|
24
|
+
* `node_modules/.bin` — which finds it whether the caller is a project, a
|
|
25
|
+
* global install, or a workspace checkout.
|
|
26
|
+
*/
|
|
27
|
+
export declare function findBundledExecutable(name: string, fromDirs: readonly string[]): string | undefined;
|
|
28
|
+
export interface CaptureResult {
|
|
29
|
+
status: number | null;
|
|
30
|
+
stdout: string;
|
|
31
|
+
stderr: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run a tool and capture its output.
|
|
35
|
+
*
|
|
36
|
+
* A non-zero status is not an exception: a validator rejecting the source is
|
|
37
|
+
* the normal case, and its complaints are diagnostics. Only a binary that could
|
|
38
|
+
* not be run at all is an error, because that means the user asked for a tool
|
|
39
|
+
* MEMO cannot honour — and rule 2 says never downgrade to a different provider
|
|
40
|
+
* in silence.
|
|
41
|
+
*/
|
|
42
|
+
export declare function captureToolInvocation(invocation: ToolInvocation, cwd: string): CaptureResult;
|
|
43
|
+
/** First line of `<command> --version`, or undefined when it will not say. */
|
|
44
|
+
export declare function probeVersion(command: string, args?: readonly string[]): string | undefined;
|
|
45
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/toolchain/process.ts"],"names":[],"mappings":"AAWA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACnB,MAAM,CAKR;AAYD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAczG;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC5B,MAAM,GAAG,SAAS,CAepB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAc5F;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,MAAM,EAAkB,GACxC,MAAM,GAAG,SAAS,CAKpB"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// ─── Executable resolution and spawning, shared by every process adapter ─────
|
|
2
|
+
//
|
|
3
|
+
// Adapters build argument lists and parse output. Finding the binary, running
|
|
4
|
+
// it, and turning ENOENT into a clear missing-tool error is the same work for
|
|
5
|
+
// all of them, so it lives here — with no provider name in sight.
|
|
6
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
+
import { accessSync, constants, existsSync, statSync } from 'node:fs';
|
|
8
|
+
import { homedir, platform } from 'node:os';
|
|
9
|
+
import { delimiter, isAbsolute, resolve } from 'node:path';
|
|
10
|
+
import { spawnSync } from 'node:child_process';
|
|
11
|
+
import { MissingToolError } from './registry.js';
|
|
12
|
+
/** Expand `~`, then resolve relative paths against the project directory. */
|
|
13
|
+
export function resolveProjectPath(value, projectDir) {
|
|
14
|
+
if (value === '~')
|
|
15
|
+
return homedir();
|
|
16
|
+
if (value.startsWith('~/'))
|
|
17
|
+
return resolve(homedir(), value.slice(2));
|
|
18
|
+
return isAbsolute(value) ? value : resolve(projectDir, value);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A configured executable is a path when it looks like one, and a PATH lookup
|
|
22
|
+
* otherwise. `syside` means "whatever is on PATH"; `./bin/syside` means that
|
|
23
|
+
* file.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveExecutable(value, fallback, projectDir) {
|
|
26
|
+
if (!value)
|
|
27
|
+
return fallback;
|
|
28
|
+
return value.includes('/') || value.includes('\\') || value.startsWith('~')
|
|
29
|
+
? resolveProjectPath(value, projectDir)
|
|
30
|
+
: value;
|
|
31
|
+
}
|
|
32
|
+
function isExecutableFile(candidate) {
|
|
33
|
+
try {
|
|
34
|
+
if (!statSync(candidate).isFile())
|
|
35
|
+
return false;
|
|
36
|
+
accessSync(candidate, constants.X_OK);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Absolute path of a command, resolved the way the shell would.
|
|
45
|
+
*
|
|
46
|
+
* `memo toolchain probe` prints this: knowing *which* `syside` ran matters as
|
|
47
|
+
* much as knowing that one did.
|
|
48
|
+
*/
|
|
49
|
+
export function whichExecutable(command, env = process.env) {
|
|
50
|
+
if (command.includes('/') || command.includes('\\')) {
|
|
51
|
+
return existsSync(command) ? resolve(command) : undefined;
|
|
52
|
+
}
|
|
53
|
+
const extensions = platform() === 'win32'
|
|
54
|
+
? (env.PATHEXT ?? '.COM;.EXE;.BAT;.CMD').split(';').filter(Boolean)
|
|
55
|
+
: [''];
|
|
56
|
+
for (const dir of (env.PATH ?? '').split(delimiter).filter(Boolean)) {
|
|
57
|
+
for (const ext of extensions) {
|
|
58
|
+
const candidate = resolve(dir, command + ext);
|
|
59
|
+
if (isExecutableFile(candidate))
|
|
60
|
+
return candidate;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A binary shipped in the same install, found without the user doing anything.
|
|
67
|
+
*
|
|
68
|
+
* "The user is responsible for PATH" is a rule about *third-party* tools. It
|
|
69
|
+
* has never applied to MEMO's own: a default install must work with nothing
|
|
70
|
+
* installed and nothing configured. So a bundled binary is looked up the way
|
|
71
|
+
* Node looks up a module — walk up from a starting directory checking each
|
|
72
|
+
* `node_modules/.bin` — which finds it whether the caller is a project, a
|
|
73
|
+
* global install, or a workspace checkout.
|
|
74
|
+
*/
|
|
75
|
+
export function findBundledExecutable(name, fromDirs) {
|
|
76
|
+
const suffixes = platform() === 'win32' ? ['.cmd', '.exe', ''] : [''];
|
|
77
|
+
for (const from of fromDirs) {
|
|
78
|
+
let dir = resolve(from);
|
|
79
|
+
for (;;) {
|
|
80
|
+
for (const suffix of suffixes) {
|
|
81
|
+
const candidate = resolve(dir, 'node_modules', '.bin', name + suffix);
|
|
82
|
+
if (isExecutableFile(candidate))
|
|
83
|
+
return candidate;
|
|
84
|
+
}
|
|
85
|
+
const parent = resolve(dir, '..');
|
|
86
|
+
if (parent === dir)
|
|
87
|
+
break;
|
|
88
|
+
dir = parent;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Run a tool and capture its output.
|
|
95
|
+
*
|
|
96
|
+
* A non-zero status is not an exception: a validator rejecting the source is
|
|
97
|
+
* the normal case, and its complaints are diagnostics. Only a binary that could
|
|
98
|
+
* not be run at all is an error, because that means the user asked for a tool
|
|
99
|
+
* MEMO cannot honour — and rule 2 says never downgrade to a different provider
|
|
100
|
+
* in silence.
|
|
101
|
+
*/
|
|
102
|
+
export function captureToolInvocation(invocation, cwd) {
|
|
103
|
+
const result = spawnSync(invocation.command, invocation.args, {
|
|
104
|
+
cwd,
|
|
105
|
+
encoding: 'utf8',
|
|
106
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
107
|
+
});
|
|
108
|
+
if (result.error) {
|
|
109
|
+
throw new MissingToolError(invocation.provider, invocation.command, result.error.message);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
status: result.status,
|
|
113
|
+
stdout: result.stdout ?? '',
|
|
114
|
+
stderr: result.stderr ?? '',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/** First line of `<command> --version`, or undefined when it will not say. */
|
|
118
|
+
export function probeVersion(command, args = ['--version']) {
|
|
119
|
+
const result = spawnSync(command, [...args], { encoding: 'utf8', timeout: 5000 });
|
|
120
|
+
if (result.error || result.status !== 0)
|
|
121
|
+
return undefined;
|
|
122
|
+
const line = `${result.stdout ?? ''}${result.stderr ?? ''}`.split('\n')[0]?.trim();
|
|
123
|
+
return line && line.length > 0 ? line : undefined;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/toolchain/process.ts"],"names":[],"mappings":"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"}
|