@memoarchitect/tools 0.4.4
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/LICENSE +21 -0
- package/README.md +171 -0
- package/package.json +86 -0
- package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/archetype-parsing.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/archetype-parsing.test.js +42 -0
- package/packages/tools/lib/__tests__/archetype-parsing.test.js.map +1 -0
- package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/architecture-discovery.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/architecture-discovery.test.js +82 -0
- package/packages/tools/lib/__tests__/architecture-discovery.test.js.map +1 -0
- package/packages/tools/lib/__tests__/behavior.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/behavior.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/behavior.test.js +766 -0
- package/packages/tools/lib/__tests__/behavior.test.js.map +1 -0
- package/packages/tools/lib/__tests__/builder.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/builder.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/builder.test.js +728 -0
- package/packages/tools/lib/__tests__/builder.test.js.map +1 -0
- package/packages/tools/lib/__tests__/config-loader.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/config-loader.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/config-loader.test.js +196 -0
- package/packages/tools/lib/__tests__/config-loader.test.js.map +1 -0
- package/packages/tools/lib/__tests__/conformance.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/conformance.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/conformance.test.js +467 -0
- package/packages/tools/lib/__tests__/conformance.test.js.map +1 -0
- package/packages/tools/lib/__tests__/constraint-eval.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/constraint-eval.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/constraint-eval.test.js +195 -0
- package/packages/tools/lib/__tests__/constraint-eval.test.js.map +1 -0
- package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/constraint-grammar.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/constraint-grammar.test.js +163 -0
- package/packages/tools/lib/__tests__/constraint-grammar.test.js.map +1 -0
- package/packages/tools/lib/__tests__/constraint-loader.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/constraint-loader.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/constraint-loader.test.js +150 -0
- package/packages/tools/lib/__tests__/constraint-loader.test.js.map +1 -0
- package/packages/tools/lib/__tests__/csv-io.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/csv-io.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/csv-io.test.js +317 -0
- package/packages/tools/lib/__tests__/csv-io.test.js.map +1 -0
- package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/dhf-doc-store.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/dhf-doc-store.test.js +94 -0
- package/packages/tools/lib/__tests__/dhf-doc-store.test.js.map +1 -0
- package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/dhf-template-resolver.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/dhf-template-resolver.test.js +39 -0
- package/packages/tools/lib/__tests__/dhf-template-resolver.test.js.map +1 -0
- package/packages/tools/lib/__tests__/dhf.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/dhf.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/dhf.test.js +393 -0
- package/packages/tools/lib/__tests__/dhf.test.js.map +1 -0
- package/packages/tools/lib/__tests__/dimension-filter.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/dimension-filter.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/dimension-filter.test.js +85 -0
- package/packages/tools/lib/__tests__/dimension-filter.test.js.map +1 -0
- package/packages/tools/lib/__tests__/dsm.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/dsm.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/dsm.test.js +112 -0
- package/packages/tools/lib/__tests__/dsm.test.js.map +1 -0
- package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/e2e-workflow.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/e2e-workflow.test.js +707 -0
- package/packages/tools/lib/__tests__/e2e-workflow.test.js.map +1 -0
- package/packages/tools/lib/__tests__/file-watcher.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/file-watcher.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/file-watcher.test.js +31 -0
- package/packages/tools/lib/__tests__/file-watcher.test.js.map +1 -0
- package/packages/tools/lib/__tests__/impact.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/impact.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/impact.test.js +82 -0
- package/packages/tools/lib/__tests__/impact.test.js.map +1 -0
- package/packages/tools/lib/__tests__/importer.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/importer.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/importer.test.js +336 -0
- package/packages/tools/lib/__tests__/importer.test.js.map +1 -0
- package/packages/tools/lib/__tests__/kind-registry.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/kind-registry.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/kind-registry.test.js +132 -0
- package/packages/tools/lib/__tests__/kind-registry.test.js.map +1 -0
- package/packages/tools/lib/__tests__/llm.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/llm.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/llm.test.js +275 -0
- package/packages/tools/lib/__tests__/llm.test.js.map +1 -0
- package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/manifest-resolver.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/manifest-resolver.test.js +97 -0
- package/packages/tools/lib/__tests__/manifest-resolver.test.js.map +1 -0
- package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/markdown-to-ir.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/markdown-to-ir.test.js +74 -0
- package/packages/tools/lib/__tests__/markdown-to-ir.test.js.map +1 -0
- package/packages/tools/lib/__tests__/methodology-scope.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/methodology-scope.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/methodology-scope.test.js +59 -0
- package/packages/tools/lib/__tests__/methodology-scope.test.js.map +1 -0
- package/packages/tools/lib/__tests__/parser.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/parser.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/parser.test.js +938 -0
- package/packages/tools/lib/__tests__/parser.test.js.map +1 -0
- package/packages/tools/lib/__tests__/plugin.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/plugin.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/plugin.test.js +308 -0
- package/packages/tools/lib/__tests__/plugin.test.js.map +1 -0
- package/packages/tools/lib/__tests__/relationship-registry.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/relationship-registry.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/relationship-registry.test.js +96 -0
- package/packages/tools/lib/__tests__/relationship-registry.test.js.map +1 -0
- package/packages/tools/lib/__tests__/rule-registry.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/rule-registry.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/rule-registry.test.js +53 -0
- package/packages/tools/lib/__tests__/rule-registry.test.js.map +1 -0
- package/packages/tools/lib/__tests__/toolchain.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/toolchain.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/toolchain.test.js +94 -0
- package/packages/tools/lib/__tests__/toolchain.test.js.map +1 -0
- package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/view-deriver-samples.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/view-deriver-samples.test.js +39 -0
- package/packages/tools/lib/__tests__/view-deriver-samples.test.js.map +1 -0
- package/packages/tools/lib/__tests__/view-kinds.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/view-kinds.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/view-kinds.test.js +263 -0
- package/packages/tools/lib/__tests__/view-kinds.test.js.map +1 -0
- package/packages/tools/lib/__tests__/view-layout-store.test.d.ts +2 -0
- package/packages/tools/lib/__tests__/view-layout-store.test.d.ts.map +1 -0
- package/packages/tools/lib/__tests__/view-layout-store.test.js +61 -0
- package/packages/tools/lib/__tests__/view-layout-store.test.js.map +1 -0
- package/packages/tools/lib/analysis/dsm.d.ts +47 -0
- package/packages/tools/lib/analysis/dsm.d.ts.map +1 -0
- package/packages/tools/lib/analysis/dsm.js +172 -0
- package/packages/tools/lib/analysis/dsm.js.map +1 -0
- package/packages/tools/lib/analysis/impact.d.ts +35 -0
- package/packages/tools/lib/analysis/impact.d.ts.map +1 -0
- package/packages/tools/lib/analysis/impact.js +97 -0
- package/packages/tools/lib/analysis/impact.js.map +1 -0
- package/packages/tools/lib/bin/memo.d.ts +3 -0
- package/packages/tools/lib/bin/memo.d.ts.map +1 -0
- package/packages/tools/lib/bin/memo.js +461 -0
- package/packages/tools/lib/bin/memo.js.map +1 -0
- package/packages/tools/lib/browser/index.d.ts +13 -0
- package/packages/tools/lib/browser/index.d.ts.map +1 -0
- package/packages/tools/lib/browser/index.js +11 -0
- package/packages/tools/lib/browser/index.js.map +1 -0
- package/packages/tools/lib/commands/archetype-loader.d.ts +15 -0
- package/packages/tools/lib/commands/archetype-loader.d.ts.map +1 -0
- package/packages/tools/lib/commands/archetype-loader.js +31 -0
- package/packages/tools/lib/commands/archetype-loader.js.map +1 -0
- package/packages/tools/lib/commands/ask.d.ts +6 -0
- package/packages/tools/lib/commands/ask.d.ts.map +1 -0
- package/packages/tools/lib/commands/ask.js +79 -0
- package/packages/tools/lib/commands/ask.js.map +1 -0
- package/packages/tools/lib/commands/check.d.ts +6 -0
- package/packages/tools/lib/commands/check.d.ts.map +1 -0
- package/packages/tools/lib/commands/check.js +214 -0
- package/packages/tools/lib/commands/check.js.map +1 -0
- package/packages/tools/lib/commands/create-package.d.ts +12 -0
- package/packages/tools/lib/commands/create-package.d.ts.map +1 -0
- package/packages/tools/lib/commands/create-package.js +293 -0
- package/packages/tools/lib/commands/create-package.js.map +1 -0
- package/packages/tools/lib/commands/dev.d.ts +6 -0
- package/packages/tools/lib/commands/dev.d.ts.map +1 -0
- package/packages/tools/lib/commands/dev.js +316 -0
- package/packages/tools/lib/commands/dev.js.map +1 -0
- package/packages/tools/lib/commands/dhf-draft.d.ts +8 -0
- package/packages/tools/lib/commands/dhf-draft.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf-draft.js +115 -0
- package/packages/tools/lib/commands/dhf-draft.js.map +1 -0
- package/packages/tools/lib/commands/dhf-init.d.ts +4 -0
- package/packages/tools/lib/commands/dhf-init.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf-init.js +270 -0
- package/packages/tools/lib/commands/dhf-init.js.map +1 -0
- package/packages/tools/lib/commands/dhf-preview.d.ts +4 -0
- package/packages/tools/lib/commands/dhf-preview.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf-preview.js +285 -0
- package/packages/tools/lib/commands/dhf-preview.js.map +1 -0
- package/packages/tools/lib/commands/dhf.d.ts +27 -0
- package/packages/tools/lib/commands/dhf.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf.js +334 -0
- package/packages/tools/lib/commands/dhf.js.map +1 -0
- package/packages/tools/lib/commands/export.d.ts +9 -0
- package/packages/tools/lib/commands/export.d.ts.map +1 -0
- package/packages/tools/lib/commands/export.js +136 -0
- package/packages/tools/lib/commands/export.js.map +1 -0
- package/packages/tools/lib/commands/generate.d.ts +6 -0
- package/packages/tools/lib/commands/generate.d.ts.map +1 -0
- package/packages/tools/lib/commands/generate.js +80 -0
- package/packages/tools/lib/commands/generate.js.map +1 -0
- package/packages/tools/lib/commands/import-ea.d.ts +32 -0
- package/packages/tools/lib/commands/import-ea.d.ts.map +1 -0
- package/packages/tools/lib/commands/import-ea.js +156 -0
- package/packages/tools/lib/commands/import-ea.js.map +1 -0
- package/packages/tools/lib/commands/import-owl.d.ts +19 -0
- package/packages/tools/lib/commands/import-owl.d.ts.map +1 -0
- package/packages/tools/lib/commands/import-owl.js +103 -0
- package/packages/tools/lib/commands/import-owl.js.map +1 -0
- package/packages/tools/lib/commands/import-sysand.d.ts +11 -0
- package/packages/tools/lib/commands/import-sysand.d.ts.map +1 -0
- package/packages/tools/lib/commands/import-sysand.js +87 -0
- package/packages/tools/lib/commands/import-sysand.js.map +1 -0
- package/packages/tools/lib/commands/import.d.ts +30 -0
- package/packages/tools/lib/commands/import.d.ts.map +1 -0
- package/packages/tools/lib/commands/import.js +250 -0
- package/packages/tools/lib/commands/import.js.map +1 -0
- package/packages/tools/lib/commands/init-wizard.d.ts +10 -0
- package/packages/tools/lib/commands/init-wizard.d.ts.map +1 -0
- package/packages/tools/lib/commands/init-wizard.js +69 -0
- package/packages/tools/lib/commands/init-wizard.js.map +1 -0
- package/packages/tools/lib/commands/init.d.ts +30 -0
- package/packages/tools/lib/commands/init.d.ts.map +1 -0
- package/packages/tools/lib/commands/init.js +238 -0
- package/packages/tools/lib/commands/init.js.map +1 -0
- package/packages/tools/lib/commands/install.d.ts +8 -0
- package/packages/tools/lib/commands/install.d.ts.map +1 -0
- package/packages/tools/lib/commands/install.js +238 -0
- package/packages/tools/lib/commands/install.js.map +1 -0
- package/packages/tools/lib/commands/lock.d.ts +2 -0
- package/packages/tools/lib/commands/lock.d.ts.map +1 -0
- package/packages/tools/lib/commands/lock.js +29 -0
- package/packages/tools/lib/commands/lock.js.map +1 -0
- package/packages/tools/lib/commands/ontology.d.ts +14 -0
- package/packages/tools/lib/commands/ontology.d.ts.map +1 -0
- package/packages/tools/lib/commands/ontology.js +464 -0
- package/packages/tools/lib/commands/ontology.js.map +1 -0
- package/packages/tools/lib/commands/pack.d.ts +4 -0
- package/packages/tools/lib/commands/pack.d.ts.map +1 -0
- package/packages/tools/lib/commands/pack.js +89 -0
- package/packages/tools/lib/commands/pack.js.map +1 -0
- package/packages/tools/lib/commands/plugin.d.ts +10 -0
- package/packages/tools/lib/commands/plugin.d.ts.map +1 -0
- package/packages/tools/lib/commands/plugin.js +195 -0
- package/packages/tools/lib/commands/plugin.js.map +1 -0
- package/packages/tools/lib/commands/req.d.ts +10 -0
- package/packages/tools/lib/commands/req.d.ts.map +1 -0
- package/packages/tools/lib/commands/req.js +64 -0
- package/packages/tools/lib/commands/req.js.map +1 -0
- package/packages/tools/lib/commands/roundtrip.d.ts +6 -0
- package/packages/tools/lib/commands/roundtrip.d.ts.map +1 -0
- package/packages/tools/lib/commands/roundtrip.js +162 -0
- package/packages/tools/lib/commands/roundtrip.js.map +1 -0
- package/packages/tools/lib/commands/rules.d.ts +15 -0
- package/packages/tools/lib/commands/rules.d.ts.map +1 -0
- package/packages/tools/lib/commands/rules.js +282 -0
- package/packages/tools/lib/commands/rules.js.map +1 -0
- package/packages/tools/lib/commands/sysand-publish.d.ts +6 -0
- package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -0
- package/packages/tools/lib/commands/sysand-publish.js +231 -0
- package/packages/tools/lib/commands/sysand-publish.js.map +1 -0
- package/packages/tools/lib/commands/validate.d.ts +6 -0
- package/packages/tools/lib/commands/validate.d.ts.map +1 -0
- package/packages/tools/lib/commands/validate.js +269 -0
- package/packages/tools/lib/commands/validate.js.map +1 -0
- package/packages/tools/lib/completeness/tracker.d.ts +11 -0
- package/packages/tools/lib/completeness/tracker.d.ts.map +1 -0
- package/packages/tools/lib/completeness/tracker.js +86 -0
- package/packages/tools/lib/completeness/tracker.js.map +1 -0
- package/packages/tools/lib/dhf/dhf-config-v2.d.ts +102 -0
- package/packages/tools/lib/dhf/dhf-config-v2.d.ts.map +1 -0
- package/packages/tools/lib/dhf/dhf-config-v2.js +82 -0
- package/packages/tools/lib/dhf/dhf-config-v2.js.map +1 -0
- package/packages/tools/lib/dhf/dhf-config.d.ts +53 -0
- package/packages/tools/lib/dhf/dhf-config.d.ts.map +1 -0
- package/packages/tools/lib/dhf/dhf-config.js +44 -0
- package/packages/tools/lib/dhf/dhf-config.js.map +1 -0
- package/packages/tools/lib/dhf/directive-parser.d.ts +31 -0
- package/packages/tools/lib/dhf/directive-parser.d.ts.map +1 -0
- package/packages/tools/lib/dhf/directive-parser.js +83 -0
- package/packages/tools/lib/dhf/directive-parser.js.map +1 -0
- package/packages/tools/lib/dhf/document-compiler.d.ts +68 -0
- package/packages/tools/lib/dhf/document-compiler.d.ts.map +1 -0
- package/packages/tools/lib/dhf/document-compiler.js +209 -0
- package/packages/tools/lib/dhf/document-compiler.js.map +1 -0
- package/packages/tools/lib/dhf/document-ir.d.ts +170 -0
- package/packages/tools/lib/dhf/document-ir.d.ts.map +1 -0
- package/packages/tools/lib/dhf/document-ir.js +47 -0
- package/packages/tools/lib/dhf/document-ir.js.map +1 -0
- package/packages/tools/lib/dhf/document-registry.d.ts +45 -0
- package/packages/tools/lib/dhf/document-registry.d.ts.map +1 -0
- package/packages/tools/lib/dhf/document-registry.js +342 -0
- package/packages/tools/lib/dhf/document-registry.js.map +1 -0
- package/packages/tools/lib/dhf/export-plugin.d.ts +24 -0
- package/packages/tools/lib/dhf/export-plugin.d.ts.map +1 -0
- package/packages/tools/lib/dhf/export-plugin.js +24 -0
- package/packages/tools/lib/dhf/export-plugin.js.map +1 -0
- package/packages/tools/lib/dhf/exporters/docx-exporter.d.ts +15 -0
- package/packages/tools/lib/dhf/exporters/docx-exporter.d.ts.map +1 -0
- package/packages/tools/lib/dhf/exporters/docx-exporter.js +159 -0
- package/packages/tools/lib/dhf/exporters/docx-exporter.js.map +1 -0
- package/packages/tools/lib/dhf/exporters/html-exporter.d.ts +9 -0
- package/packages/tools/lib/dhf/exporters/html-exporter.d.ts.map +1 -0
- package/packages/tools/lib/dhf/exporters/html-exporter.js +248 -0
- package/packages/tools/lib/dhf/exporters/html-exporter.js.map +1 -0
- package/packages/tools/lib/dhf/exporters/markdown-exporter.d.ts +9 -0
- package/packages/tools/lib/dhf/exporters/markdown-exporter.d.ts.map +1 -0
- package/packages/tools/lib/dhf/exporters/markdown-exporter.js +147 -0
- package/packages/tools/lib/dhf/exporters/markdown-exporter.js.map +1 -0
- package/packages/tools/lib/dhf/index.d.ts +15 -0
- package/packages/tools/lib/dhf/index.d.ts.map +1 -0
- package/packages/tools/lib/dhf/index.js +21 -0
- package/packages/tools/lib/dhf/index.js.map +1 -0
- package/packages/tools/lib/dhf/markdown-to-ir.d.ts +19 -0
- package/packages/tools/lib/dhf/markdown-to-ir.d.ts.map +1 -0
- package/packages/tools/lib/dhf/markdown-to-ir.js +193 -0
- package/packages/tools/lib/dhf/markdown-to-ir.js.map +1 -0
- package/packages/tools/lib/dhf/query-engine.d.ts +61 -0
- package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -0
- package/packages/tools/lib/dhf/query-engine.js +109 -0
- package/packages/tools/lib/dhf/query-engine.js.map +1 -0
- package/packages/tools/lib/dhf/query-executor.d.ts +33 -0
- package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -0
- package/packages/tools/lib/dhf/query-executor.js +222 -0
- package/packages/tools/lib/dhf/query-executor.js.map +1 -0
- package/packages/tools/lib/dhf/script-runner.d.ts +4 -0
- package/packages/tools/lib/dhf/script-runner.d.ts.map +1 -0
- package/packages/tools/lib/dhf/script-runner.js +62 -0
- package/packages/tools/lib/dhf/script-runner.js.map +1 -0
- package/packages/tools/lib/dhf/snapshot.d.ts +60 -0
- package/packages/tools/lib/dhf/snapshot.d.ts.map +1 -0
- package/packages/tools/lib/dhf/snapshot.js +185 -0
- package/packages/tools/lib/dhf/snapshot.js.map +1 -0
- package/packages/tools/lib/dhf/template-engine.d.ts +18 -0
- package/packages/tools/lib/dhf/template-engine.d.ts.map +1 -0
- package/packages/tools/lib/dhf/template-engine.js +339 -0
- package/packages/tools/lib/dhf/template-engine.js.map +1 -0
- package/packages/tools/lib/dhf/template-resolver.d.ts +42 -0
- package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -0
- package/packages/tools/lib/dhf/template-resolver.js +196 -0
- package/packages/tools/lib/dhf/template-resolver.js.map +1 -0
- package/packages/tools/lib/import/column-mapper.d.ts +35 -0
- package/packages/tools/lib/import/column-mapper.d.ts.map +1 -0
- package/packages/tools/lib/import/column-mapper.js +171 -0
- package/packages/tools/lib/import/column-mapper.js.map +1 -0
- package/packages/tools/lib/import/import-diff.d.ts +49 -0
- package/packages/tools/lib/import/import-diff.d.ts.map +1 -0
- package/packages/tools/lib/import/import-diff.js +102 -0
- package/packages/tools/lib/import/import-diff.js.map +1 -0
- package/packages/tools/lib/import/recipes.d.ts +43 -0
- package/packages/tools/lib/import/recipes.d.ts.map +1 -0
- package/packages/tools/lib/import/recipes.js +133 -0
- package/packages/tools/lib/import/recipes.js.map +1 -0
- package/packages/tools/lib/importer/cameo-importer.d.ts +103 -0
- package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -0
- package/packages/tools/lib/importer/cameo-importer.js +384 -0
- package/packages/tools/lib/importer/cameo-importer.js.map +1 -0
- package/packages/tools/lib/importer/ea-importer.d.ts +115 -0
- package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -0
- package/packages/tools/lib/importer/ea-importer.js +325 -0
- package/packages/tools/lib/importer/ea-importer.js.map +1 -0
- package/packages/tools/lib/importer/index.d.ts +5 -0
- package/packages/tools/lib/importer/index.d.ts.map +1 -0
- package/packages/tools/lib/importer/index.js +15 -0
- package/packages/tools/lib/importer/index.js.map +1 -0
- package/packages/tools/lib/importer/owl-importer.d.ts +91 -0
- package/packages/tools/lib/importer/owl-importer.d.ts.map +1 -0
- package/packages/tools/lib/importer/owl-importer.js +429 -0
- package/packages/tools/lib/importer/owl-importer.js.map +1 -0
- package/packages/tools/lib/importer/sysand-importer.d.ts +78 -0
- package/packages/tools/lib/importer/sysand-importer.d.ts.map +1 -0
- package/packages/tools/lib/importer/sysand-importer.js +188 -0
- package/packages/tools/lib/importer/sysand-importer.js.map +1 -0
- package/packages/tools/lib/index.d.ts +44 -0
- package/packages/tools/lib/index.d.ts.map +1 -0
- package/packages/tools/lib/index.js +56 -0
- package/packages/tools/lib/index.js.map +1 -0
- package/packages/tools/lib/language/generated/ast.d.ts +629 -0
- package/packages/tools/lib/language/generated/ast.d.ts.map +1 -0
- package/packages/tools/lib/language/generated/ast.js +961 -0
- package/packages/tools/lib/language/generated/ast.js.map +1 -0
- package/packages/tools/lib/language/generated/grammar.d.ts +7 -0
- package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -0
- package/packages/tools/lib/language/generated/grammar.js +5676 -0
- package/packages/tools/lib/language/generated/grammar.js.map +1 -0
- package/packages/tools/lib/language/generated/module.d.ts +14 -0
- package/packages/tools/lib/language/generated/module.d.ts.map +1 -0
- package/packages/tools/lib/language/generated/module.js +21 -0
- package/packages/tools/lib/language/generated/module.js.map +1 -0
- package/packages/tools/lib/language/memo-sysml-module.d.ts +24 -0
- package/packages/tools/lib/language/memo-sysml-module.d.ts.map +1 -0
- package/packages/tools/lib/language/memo-sysml-module.js +20 -0
- package/packages/tools/lib/language/memo-sysml-module.js.map +1 -0
- package/packages/tools/lib/llm/ask-engine.d.ts +17 -0
- package/packages/tools/lib/llm/ask-engine.d.ts.map +1 -0
- package/packages/tools/lib/llm/ask-engine.js +43 -0
- package/packages/tools/lib/llm/ask-engine.js.map +1 -0
- package/packages/tools/lib/llm/draft-engine.d.ts +32 -0
- package/packages/tools/lib/llm/draft-engine.d.ts.map +1 -0
- package/packages/tools/lib/llm/draft-engine.js +270 -0
- package/packages/tools/lib/llm/draft-engine.js.map +1 -0
- package/packages/tools/lib/llm/generate-engine.d.ts +21 -0
- package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -0
- package/packages/tools/lib/llm/generate-engine.js +83 -0
- package/packages/tools/lib/llm/generate-engine.js.map +1 -0
- package/packages/tools/lib/llm/index.d.ts +6 -0
- package/packages/tools/lib/llm/index.d.ts.map +1 -0
- package/packages/tools/lib/llm/index.js +11 -0
- package/packages/tools/lib/llm/index.js.map +1 -0
- package/packages/tools/lib/llm/llm-provider.d.ts +40 -0
- package/packages/tools/lib/llm/llm-provider.d.ts.map +1 -0
- package/packages/tools/lib/llm/llm-provider.js +121 -0
- package/packages/tools/lib/llm/llm-provider.js.map +1 -0
- package/packages/tools/lib/llm/model-context.d.ts +28 -0
- package/packages/tools/lib/llm/model-context.d.ts.map +1 -0
- package/packages/tools/lib/llm/model-context.js +162 -0
- package/packages/tools/lib/llm/model-context.js.map +1 -0
- package/packages/tools/lib/lock.d.ts +43 -0
- package/packages/tools/lib/lock.d.ts.map +1 -0
- package/packages/tools/lib/lock.js +225 -0
- package/packages/tools/lib/lock.js.map +1 -0
- package/packages/tools/lib/model/builder.d.ts +22 -0
- package/packages/tools/lib/model/builder.d.ts.map +1 -0
- package/packages/tools/lib/model/builder.js +708 -0
- package/packages/tools/lib/model/builder.js.map +1 -0
- package/packages/tools/lib/model/config-loader.d.ts +34 -0
- package/packages/tools/lib/model/config-loader.d.ts.map +1 -0
- package/packages/tools/lib/model/config-loader.js +257 -0
- package/packages/tools/lib/model/config-loader.js.map +1 -0
- package/packages/tools/lib/model/config.d.ts +220 -0
- package/packages/tools/lib/model/config.d.ts.map +1 -0
- package/packages/tools/lib/model/config.js +14 -0
- package/packages/tools/lib/model/config.js.map +1 -0
- package/packages/tools/lib/model/content-store.d.ts +8 -0
- package/packages/tools/lib/model/content-store.d.ts.map +1 -0
- package/packages/tools/lib/model/content-store.js +59 -0
- package/packages/tools/lib/model/content-store.js.map +1 -0
- package/packages/tools/lib/model/dimension-filter.d.ts +33 -0
- package/packages/tools/lib/model/dimension-filter.d.ts.map +1 -0
- package/packages/tools/lib/model/dimension-filter.js +57 -0
- package/packages/tools/lib/model/dimension-filter.js.map +1 -0
- package/packages/tools/lib/model/kind-registry.d.ts +72 -0
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -0
- package/packages/tools/lib/model/kind-registry.js +178 -0
- package/packages/tools/lib/model/kind-registry.js.map +1 -0
- package/packages/tools/lib/model/layer-resolver.d.ts +25 -0
- package/packages/tools/lib/model/layer-resolver.d.ts.map +1 -0
- package/packages/tools/lib/model/layer-resolver.js +82 -0
- package/packages/tools/lib/model/layer-resolver.js.map +1 -0
- package/packages/tools/lib/model/manifest.d.ts +23 -0
- package/packages/tools/lib/model/manifest.d.ts.map +1 -0
- package/packages/tools/lib/model/manifest.js +117 -0
- package/packages/tools/lib/model/manifest.js.map +1 -0
- package/packages/tools/lib/model/methodology-loader.d.ts +56 -0
- package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -0
- package/packages/tools/lib/model/methodology-loader.js +203 -0
- package/packages/tools/lib/model/methodology-loader.js.map +1 -0
- package/packages/tools/lib/model/ontology-loader.d.ts +113 -0
- package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -0
- package/packages/tools/lib/model/ontology-loader.js +901 -0
- package/packages/tools/lib/model/ontology-loader.js.map +1 -0
- package/packages/tools/lib/model/package-registry.d.ts +62 -0
- package/packages/tools/lib/model/package-registry.d.ts.map +1 -0
- package/packages/tools/lib/model/package-registry.js +164 -0
- package/packages/tools/lib/model/package-registry.js.map +1 -0
- package/packages/tools/lib/model/parser-utils.d.ts +23 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -0
- package/packages/tools/lib/model/parser-utils.js +63 -0
- package/packages/tools/lib/model/parser-utils.js.map +1 -0
- package/packages/tools/lib/model/paths.d.ts +18 -0
- package/packages/tools/lib/model/paths.d.ts.map +1 -0
- package/packages/tools/lib/model/paths.js +26 -0
- package/packages/tools/lib/model/paths.js.map +1 -0
- package/packages/tools/lib/model/relationship-registry.d.ts +64 -0
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -0
- package/packages/tools/lib/model/relationship-registry.js +141 -0
- package/packages/tools/lib/model/relationship-registry.js.map +1 -0
- package/packages/tools/lib/model/semantic.d.ts +175 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -0
- package/packages/tools/lib/model/semantic.js +61 -0
- package/packages/tools/lib/model/semantic.js.map +1 -0
- package/packages/tools/lib/model/short-id.d.ts +32 -0
- package/packages/tools/lib/model/short-id.d.ts.map +1 -0
- package/packages/tools/lib/model/short-id.js +136 -0
- package/packages/tools/lib/model/short-id.js.map +1 -0
- package/packages/tools/lib/model/toolchain.d.ts +12 -0
- package/packages/tools/lib/model/toolchain.d.ts.map +1 -0
- package/packages/tools/lib/model/toolchain.js +92 -0
- package/packages/tools/lib/model/toolchain.js.map +1 -0
- package/packages/tools/lib/model/view-deriver.d.ts +22 -0
- package/packages/tools/lib/model/view-deriver.d.ts.map +1 -0
- package/packages/tools/lib/model/view-deriver.js +160 -0
- package/packages/tools/lib/model/view-deriver.js.map +1 -0
- package/packages/tools/lib/model/view-kinds.d.ts +29 -0
- package/packages/tools/lib/model/view-kinds.d.ts.map +1 -0
- package/packages/tools/lib/model/view-kinds.js +80 -0
- package/packages/tools/lib/model/view-kinds.js.map +1 -0
- package/packages/tools/lib/ontology/owl-exporter.d.ts +43 -0
- package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -0
- package/packages/tools/lib/ontology/owl-exporter.js +70 -0
- package/packages/tools/lib/ontology/owl-exporter.js.map +1 -0
- package/packages/tools/lib/operations/index.d.ts +8 -0
- package/packages/tools/lib/operations/index.d.ts.map +1 -0
- package/packages/tools/lib/operations/index.js +8 -0
- package/packages/tools/lib/operations/index.js.map +1 -0
- package/packages/tools/lib/operations/project-snapshot.d.ts +17 -0
- package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -0
- package/packages/tools/lib/operations/project-snapshot.js +103 -0
- package/packages/tools/lib/operations/project-snapshot.js.map +1 -0
- package/packages/tools/lib/plugin/index.d.ts +5 -0
- package/packages/tools/lib/plugin/index.d.ts.map +1 -0
- package/packages/tools/lib/plugin/index.js +10 -0
- package/packages/tools/lib/plugin/index.js.map +1 -0
- package/packages/tools/lib/plugin/plugin-loader.d.ts +26 -0
- package/packages/tools/lib/plugin/plugin-loader.d.ts.map +1 -0
- package/packages/tools/lib/plugin/plugin-loader.js +216 -0
- package/packages/tools/lib/plugin/plugin-loader.js.map +1 -0
- package/packages/tools/lib/plugin/plugin-registry.d.ts +49 -0
- package/packages/tools/lib/plugin/plugin-registry.d.ts.map +1 -0
- package/packages/tools/lib/plugin/plugin-registry.js +121 -0
- package/packages/tools/lib/plugin/plugin-registry.js.map +1 -0
- package/packages/tools/lib/plugin/plugin-scaffold.d.ts +17 -0
- package/packages/tools/lib/plugin/plugin-scaffold.d.ts.map +1 -0
- package/packages/tools/lib/plugin/plugin-scaffold.js +223 -0
- package/packages/tools/lib/plugin/plugin-scaffold.js.map +1 -0
- package/packages/tools/lib/plugin/plugin-types.d.ts +115 -0
- package/packages/tools/lib/plugin/plugin-types.d.ts.map +1 -0
- package/packages/tools/lib/plugin/plugin-types.js +11 -0
- package/packages/tools/lib/plugin/plugin-types.js.map +1 -0
- package/packages/tools/lib/protocol/messages.d.ts +470 -0
- package/packages/tools/lib/protocol/messages.d.ts.map +1 -0
- package/packages/tools/lib/protocol/messages.js +6 -0
- package/packages/tools/lib/protocol/messages.js.map +1 -0
- package/packages/tools/lib/serializer/csv-io.d.ts +113 -0
- package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -0
- package/packages/tools/lib/serializer/csv-io.js +394 -0
- package/packages/tools/lib/serializer/csv-io.js.map +1 -0
- package/packages/tools/lib/serializer/sysml-generator.d.ts +32 -0
- package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -0
- package/packages/tools/lib/serializer/sysml-generator.js +120 -0
- package/packages/tools/lib/serializer/sysml-generator.js.map +1 -0
- package/packages/tools/lib/server/config-resolver.d.ts +14 -0
- package/packages/tools/lib/server/config-resolver.d.ts.map +1 -0
- package/packages/tools/lib/server/config-resolver.js +54 -0
- package/packages/tools/lib/server/config-resolver.js.map +1 -0
- package/packages/tools/lib/server/dev-server.d.ts +17 -0
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -0
- package/packages/tools/lib/server/dev-server.js +939 -0
- package/packages/tools/lib/server/dev-server.js.map +1 -0
- package/packages/tools/lib/server/dhf-doc-store.d.ts +11 -0
- package/packages/tools/lib/server/dhf-doc-store.d.ts.map +1 -0
- package/packages/tools/lib/server/dhf-doc-store.js +181 -0
- package/packages/tools/lib/server/dhf-doc-store.js.map +1 -0
- package/packages/tools/lib/server/file-watcher.d.ts +20 -0
- package/packages/tools/lib/server/file-watcher.d.ts.map +1 -0
- package/packages/tools/lib/server/file-watcher.js +140 -0
- package/packages/tools/lib/server/file-watcher.js.map +1 -0
- package/packages/tools/lib/server/persistor.d.ts +25 -0
- package/packages/tools/lib/server/persistor.d.ts.map +1 -0
- package/packages/tools/lib/server/persistor.js +100 -0
- package/packages/tools/lib/server/persistor.js.map +1 -0
- package/packages/tools/lib/server/view-layout-store.d.ts +8 -0
- package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -0
- package/packages/tools/lib/server/view-layout-store.js +73 -0
- package/packages/tools/lib/server/view-layout-store.js.map +1 -0
- package/packages/tools/lib/types/index.d.ts +4 -0
- package/packages/tools/lib/types/index.d.ts.map +1 -0
- package/packages/tools/lib/types/index.js +6 -0
- package/packages/tools/lib/types/index.js.map +1 -0
- package/packages/tools/lib/validator/behavior-validator.d.ts +12 -0
- package/packages/tools/lib/validator/behavior-validator.d.ts.map +1 -0
- package/packages/tools/lib/validator/behavior-validator.js +124 -0
- package/packages/tools/lib/validator/behavior-validator.js.map +1 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts +90 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -0
- package/packages/tools/lib/validator/constraint-eval.js +478 -0
- package/packages/tools/lib/validator/constraint-eval.js.map +1 -0
- package/packages/tools/lib/validator/constraint-loader.d.ts +10 -0
- package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -0
- package/packages/tools/lib/validator/constraint-loader.js +113 -0
- package/packages/tools/lib/validator/constraint-loader.js.map +1 -0
- package/packages/tools/lib/validator/rule-engine.d.ts +13 -0
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -0
- package/packages/tools/lib/validator/rule-engine.js +38 -0
- package/packages/tools/lib/validator/rule-engine.js.map +1 -0
- package/packages/tools/lib/validator/rule-registry.d.ts +61 -0
- package/packages/tools/lib/validator/rule-registry.d.ts.map +1 -0
- package/packages/tools/lib/validator/rule-registry.js +142 -0
- package/packages/tools/lib/validator/rule-registry.js.map +1 -0
- package/packages/tools/lib/validator/types.d.ts +59 -0
- package/packages/tools/lib/validator/types.d.ts.map +1 -0
- package/packages/tools/lib/validator/types.js +3 -0
- package/packages/tools/lib/validator/types.js.map +1 -0
- package/packages/tools/lib/validator/view-validator.d.ts +11 -0
- package/packages/tools/lib/validator/view-validator.d.ts.map +1 -0
- package/packages/tools/lib/validator/view-validator.js +48 -0
- package/packages/tools/lib/validator/view-validator.js.map +1 -0
- package/packages/tools/src/grammar/memo-sysml.langium +450 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
// ─── memo import ─────────────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Import elements and relationships from CSV files into the project.
|
|
4
|
+
// Generates .sysml files from the CSV data, validated against the ontology.
|
|
5
|
+
//
|
|
6
|
+
// Commands:
|
|
7
|
+
// memo import csv <file> — Import elements CSV
|
|
8
|
+
// memo import csv-rel <file> — Import relationships CSV
|
|
9
|
+
// memo import template elements — Generate element CSV template
|
|
10
|
+
// memo import template relations — Generate relationship CSV template
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
import { resolve, basename } from 'node:path';
|
|
13
|
+
import { readFileSync, writeFileSync, readdirSync } from 'node:fs';
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
import { findConfigFile, parseFiles, buildMemoModel, parseElementsCsv, parseRelationshipsCsv, generateFile, generateElementTemplate, generateRelationshipTemplate, computeImportDiff, formatDiffSummary, } from '@memoarchitect/tools';
|
|
16
|
+
import { loadAndResolveConfig } from '../server/config-resolver.js';
|
|
17
|
+
function findSysmlFiles(dir) {
|
|
18
|
+
const files = [];
|
|
19
|
+
try {
|
|
20
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
21
|
+
const full = resolve(dir, entry.name);
|
|
22
|
+
if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== '.memo') {
|
|
23
|
+
files.push(...findSysmlFiles(full));
|
|
24
|
+
}
|
|
25
|
+
else if (entry.name.endsWith('.sysml')) {
|
|
26
|
+
files.push(full);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// skip
|
|
32
|
+
}
|
|
33
|
+
return files;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Import elements from a CSV file. Generates a .sysml file.
|
|
37
|
+
*/
|
|
38
|
+
export async function importCsvCommand(csvFile, options) {
|
|
39
|
+
const cwd = process.cwd();
|
|
40
|
+
// Load config
|
|
41
|
+
const configPath = findConfigFile(cwd);
|
|
42
|
+
if (!configPath) {
|
|
43
|
+
console.error(chalk.red('No memo config found. Run `memo init` first.'));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const config = await loadAndResolveConfig(configPath);
|
|
47
|
+
// Read CSV
|
|
48
|
+
const csvPath = resolve(cwd, csvFile);
|
|
49
|
+
let csvText;
|
|
50
|
+
try {
|
|
51
|
+
csvText = readFileSync(csvPath, 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
console.error(chalk.red(`Cannot read file: ${csvPath}`));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
console.log(chalk.blue(`Parsing elements CSV: ${csvFile}`));
|
|
58
|
+
const result = parseElementsCsv(csvText, config);
|
|
59
|
+
// Report warnings
|
|
60
|
+
for (const warn of result.warnings) {
|
|
61
|
+
console.log(chalk.yellow(` Warning: ${warn}`));
|
|
62
|
+
}
|
|
63
|
+
// Report errors
|
|
64
|
+
if (result.errors.length > 0) {
|
|
65
|
+
console.error(chalk.red(`\n${result.errors.length} error(s):`));
|
|
66
|
+
for (const err of result.errors) {
|
|
67
|
+
console.error(chalk.red(` ${err}`));
|
|
68
|
+
}
|
|
69
|
+
if (result.items.length === 0) {
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
console.log(chalk.yellow(`\nContinuing with ${result.items.length} valid element(s)...`));
|
|
73
|
+
}
|
|
74
|
+
const packageName = options.package || basename(csvFile, '.csv').replace(/[^a-zA-Z0-9_]/g, '_');
|
|
75
|
+
const sysml = generateFile(result.items, [], packageName);
|
|
76
|
+
if (options.dryRun) {
|
|
77
|
+
console.log(chalk.dim('\n── Generated SysML (dry run) ──'));
|
|
78
|
+
console.log(sysml);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const outputFile = options.output || `${packageName}.sysml`;
|
|
82
|
+
const outputPath = resolve(cwd, outputFile);
|
|
83
|
+
writeFileSync(outputPath, sysml, 'utf-8');
|
|
84
|
+
console.log(chalk.green(`\nImported ${result.items.length} element(s) → ${outputFile}`));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Import relationships from a CSV file. Appends to existing or generates new .sysml.
|
|
88
|
+
*/
|
|
89
|
+
export async function importRelCsvCommand(csvFile, options) {
|
|
90
|
+
const cwd = process.cwd();
|
|
91
|
+
const configPath = findConfigFile(cwd);
|
|
92
|
+
if (!configPath) {
|
|
93
|
+
console.error(chalk.red('No memo config found. Run `memo init` first.'));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const config = await loadAndResolveConfig(configPath);
|
|
97
|
+
// Build current model to validate element references
|
|
98
|
+
const sysmlFiles = findSysmlFiles(cwd);
|
|
99
|
+
let knownIds;
|
|
100
|
+
if (sysmlFiles.length > 0) {
|
|
101
|
+
const parsed = await parseFiles(sysmlFiles);
|
|
102
|
+
const model = buildMemoModel(parsed.documents, config);
|
|
103
|
+
knownIds = new Set(model.elements.keys());
|
|
104
|
+
}
|
|
105
|
+
const csvPath = resolve(cwd, csvFile);
|
|
106
|
+
let csvText;
|
|
107
|
+
try {
|
|
108
|
+
csvText = readFileSync(csvPath, 'utf-8');
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.error(chalk.red(`Cannot read file: ${csvPath}`));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk.blue(`Parsing relationships CSV: ${csvFile}`));
|
|
115
|
+
const result = parseRelationshipsCsv(csvText, config, knownIds);
|
|
116
|
+
for (const warn of result.warnings) {
|
|
117
|
+
console.log(chalk.yellow(` Warning: ${warn}`));
|
|
118
|
+
}
|
|
119
|
+
if (result.errors.length > 0) {
|
|
120
|
+
console.error(chalk.red(`\n${result.errors.length} error(s):`));
|
|
121
|
+
for (const err of result.errors) {
|
|
122
|
+
console.error(chalk.red(` ${err}`));
|
|
123
|
+
}
|
|
124
|
+
if (result.items.length === 0) {
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
console.log(chalk.yellow(`\nContinuing with ${result.items.length} valid relationship(s)...`));
|
|
128
|
+
}
|
|
129
|
+
const packageName = options.package || basename(csvFile, '.csv').replace(/[^a-zA-Z0-9_]/g, '_');
|
|
130
|
+
const sysml = generateFile([], result.items, packageName);
|
|
131
|
+
if (options.dryRun) {
|
|
132
|
+
console.log(chalk.dim('\n── Generated SysML (dry run) ──'));
|
|
133
|
+
console.log(sysml);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const outputFile = options.output || `${packageName}_relationships.sysml`;
|
|
137
|
+
const outputPath = resolve(cwd, outputFile);
|
|
138
|
+
writeFileSync(outputPath, sysml, 'utf-8');
|
|
139
|
+
console.log(chalk.green(`\nImported ${result.items.length} relationship(s) → ${outputFile}`));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Generate template CSV files based on the current ontology config.
|
|
143
|
+
*/
|
|
144
|
+
export async function importTemplateCommand(templateType, options) {
|
|
145
|
+
const cwd = process.cwd();
|
|
146
|
+
const configPath = findConfigFile(cwd);
|
|
147
|
+
if (!configPath) {
|
|
148
|
+
console.error(chalk.red('No memo config found. Run `memo init` first.'));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
const config = await loadAndResolveConfig(configPath);
|
|
152
|
+
let csv;
|
|
153
|
+
let defaultFile;
|
|
154
|
+
if (templateType === 'elements') {
|
|
155
|
+
csv = generateElementTemplate(config);
|
|
156
|
+
defaultFile = 'elements-template.csv';
|
|
157
|
+
console.log(chalk.blue(`Generating element template with ${Object.keys(config.kinds ?? {}).length} kinds`));
|
|
158
|
+
}
|
|
159
|
+
else if (templateType === 'relationships' || templateType === 'relations') {
|
|
160
|
+
csv = generateRelationshipTemplate(config);
|
|
161
|
+
defaultFile = 'relationships-template.csv';
|
|
162
|
+
console.log(chalk.blue(`Generating relationship template with ${(config.relationshipTypes ?? []).length} types`));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.error(chalk.red(`Unknown template type: '${templateType}'. Use 'elements' or 'relationships'.`));
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const outputFile = options.output || defaultFile;
|
|
169
|
+
const outputPath = resolve(cwd, outputFile);
|
|
170
|
+
writeFileSync(outputPath, csv, 'utf-8');
|
|
171
|
+
console.log(chalk.green(`Template written → ${outputFile}`));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Show a diff of what a CSV import would change without modifying the model.
|
|
175
|
+
* Useful for reviewing updates before committing.
|
|
176
|
+
*/
|
|
177
|
+
export async function importDiffCommand(csvFile, options) {
|
|
178
|
+
const cwd = process.cwd();
|
|
179
|
+
const configPath = findConfigFile(cwd);
|
|
180
|
+
if (!configPath) {
|
|
181
|
+
console.error(chalk.red('No memo config found. Run `memo init` first.'));
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const config = await loadAndResolveConfig(configPath);
|
|
185
|
+
const csvPath = resolve(cwd, csvFile);
|
|
186
|
+
let csvText;
|
|
187
|
+
try {
|
|
188
|
+
csvText = readFileSync(csvPath, 'utf-8');
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
console.error(chalk.red(`Cannot read file: ${csvPath}`));
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
console.log(chalk.blue(`Parsing elements CSV: ${csvFile}`));
|
|
195
|
+
const parseResult = parseElementsCsv(csvText, config);
|
|
196
|
+
for (const warn of parseResult.warnings) {
|
|
197
|
+
console.log(chalk.yellow(` Warning: ${warn}`));
|
|
198
|
+
}
|
|
199
|
+
if (parseResult.errors.length > 0) {
|
|
200
|
+
for (const err of parseResult.errors) {
|
|
201
|
+
console.error(chalk.red(` Error: ${err}`));
|
|
202
|
+
}
|
|
203
|
+
if (parseResult.items.length === 0) {
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Build current model for comparison
|
|
208
|
+
const sysmlFiles = findSysmlFiles(cwd);
|
|
209
|
+
let model = { elements: new Map(), relationships: [] };
|
|
210
|
+
if (sysmlFiles.length > 0) {
|
|
211
|
+
const parsed = await parseFiles(sysmlFiles);
|
|
212
|
+
model = buildMemoModel(parsed.documents, config);
|
|
213
|
+
}
|
|
214
|
+
const diff = computeImportDiff(model, parseResult.items, options.detectRemovals ?? false);
|
|
215
|
+
console.log(chalk.bold(`\nImport diff: ${formatDiffSummary(diff)}`));
|
|
216
|
+
console.log(chalk.dim(` Incoming: ${diff.incomingCount} row(s) Current model: ${diff.currentCount} element(s)\n`));
|
|
217
|
+
if (diff.added.length > 0) {
|
|
218
|
+
console.log(chalk.green(` + ${diff.added.length} new element(s):`));
|
|
219
|
+
for (const el of diff.added) {
|
|
220
|
+
console.log(chalk.green(` ${el.id} [${el.kind}] "${el.name}"`));
|
|
221
|
+
}
|
|
222
|
+
console.log('');
|
|
223
|
+
}
|
|
224
|
+
if (diff.modified.length > 0) {
|
|
225
|
+
console.log(chalk.yellow(` ~ ${diff.modified.length} modified element(s):`));
|
|
226
|
+
for (const { current, incoming, changes } of diff.modified) {
|
|
227
|
+
console.log(chalk.yellow(` ${current.id} [${current.kind}] "${current.name}"`));
|
|
228
|
+
for (const ch of changes) {
|
|
229
|
+
console.log(chalk.dim(` ${ch.field}: "${ch.currentValue}" → "${ch.incomingValue}"`));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
console.log('');
|
|
233
|
+
}
|
|
234
|
+
if (diff.unchanged.length > 0) {
|
|
235
|
+
console.log(chalk.dim(` = ${diff.unchanged.length} unchanged element(s)`));
|
|
236
|
+
console.log('');
|
|
237
|
+
}
|
|
238
|
+
if (diff.removed.length > 0) {
|
|
239
|
+
console.log(chalk.red(` - ${diff.removed.length} element(s) in model but missing from CSV:`));
|
|
240
|
+
for (const id of diff.removed) {
|
|
241
|
+
const el = model.elements.get(id);
|
|
242
|
+
console.log(chalk.red(` ${id} [${el?.kind ?? '?'}] "${el?.name ?? '?'}"`));
|
|
243
|
+
}
|
|
244
|
+
console.log('');
|
|
245
|
+
}
|
|
246
|
+
if (diff.added.length === 0 && diff.modified.length === 0 && diff.removed.length === 0) {
|
|
247
|
+
console.log(chalk.dim(' No changes — CSV matches current model state.\n'));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ArchetypeInfo } from './archetype-loader.js';
|
|
2
|
+
type RegulatoryClass = 'class-i' | 'class-ii' | 'class-iii-iib';
|
|
3
|
+
export interface WizardResult {
|
|
4
|
+
archetypeId: string;
|
|
5
|
+
regulatoryClass: RegulatoryClass;
|
|
6
|
+
}
|
|
7
|
+
export declare function runWizard(archetypes: ArchetypeInfo[]): Promise<WizardResult>;
|
|
8
|
+
export declare function regulatoryComment(regulatoryClass: RegulatoryClass, archetypeLabel: string): string;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=init-wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-wizard.d.ts","sourceRoot":"","sources":["../../src/commands/init-wizard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,KAAK,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;AAchE,MAAM,WAAW,YAAY;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;CACpC;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAmDlF;AAED,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAYlG"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createInterface } from 'node:readline/promises';
|
|
2
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
const REGULATORY_CLASSES = [
|
|
5
|
+
{ id: 'class-i', label: 'Class I / Low Risk', standards: 'ISO 14971 (risk), IEC 62366 (usability)' },
|
|
6
|
+
{ id: 'class-ii', label: 'Class II / Moderate Risk', standards: '+ IEC 62304 (software lifecycle), 21 CFR 820' },
|
|
7
|
+
{ id: 'class-iii-iib', label: 'Class III / High Risk (EU IIb+)', standards: '+ full DHF, clinical evaluation, PMA/EU MDR' },
|
|
8
|
+
];
|
|
9
|
+
export async function runWizard(archetypes) {
|
|
10
|
+
const rl = createInterface({ input, output });
|
|
11
|
+
const choices = archetypes.filter(a => a.id !== 'blank');
|
|
12
|
+
console.log(chalk.bold('\n🧙 MEMO Startup Wizard\n'));
|
|
13
|
+
console.log(chalk.gray(' Answer a few questions and we\'ll scaffold the right starter model.\n'));
|
|
14
|
+
console.log(chalk.bold(' What type of medical device are you building?\n'));
|
|
15
|
+
choices.forEach((a, i) => {
|
|
16
|
+
console.log(` ${chalk.cyan(`${i + 1}.`)} ${chalk.white(a.label)}`);
|
|
17
|
+
console.log(` ${chalk.gray(a.description)}`);
|
|
18
|
+
});
|
|
19
|
+
let archetypeIndex = -1;
|
|
20
|
+
while (archetypeIndex < 0 || archetypeIndex >= choices.length) {
|
|
21
|
+
const raw = await rl.question(chalk.gray(`\n Select [1-${choices.length}]: `));
|
|
22
|
+
const parsed = parseInt(raw.trim(), 10);
|
|
23
|
+
if (!isNaN(parsed) && parsed >= 1 && parsed <= choices.length) {
|
|
24
|
+
archetypeIndex = parsed - 1;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(chalk.yellow(` Please enter a number between 1 and ${choices.length}.`));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const archetype = choices[archetypeIndex];
|
|
31
|
+
console.log(chalk.green(` ✓ ${archetype.label}\n`));
|
|
32
|
+
console.log(chalk.bold(' What is your expected regulatory classification?\n'));
|
|
33
|
+
REGULATORY_CLASSES.forEach((rc, i) => {
|
|
34
|
+
console.log(` ${chalk.cyan(`${i + 1}.`)} ${chalk.white(rc.label)}`);
|
|
35
|
+
console.log(` ${chalk.gray(rc.standards)}`);
|
|
36
|
+
});
|
|
37
|
+
let regIndex = -1;
|
|
38
|
+
while (regIndex < 0 || regIndex >= REGULATORY_CLASSES.length) {
|
|
39
|
+
const raw = await rl.question(chalk.gray(`\n Select [1-${REGULATORY_CLASSES.length}]: `));
|
|
40
|
+
const parsed = parseInt(raw.trim(), 10);
|
|
41
|
+
if (!isNaN(parsed) && parsed >= 1 && parsed <= REGULATORY_CLASSES.length) {
|
|
42
|
+
regIndex = parsed - 1;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(chalk.yellow(` Please enter a number between 1 and ${REGULATORY_CLASSES.length}.`));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const regulatoryClass = REGULATORY_CLASSES[regIndex];
|
|
49
|
+
console.log(chalk.green(` ✓ ${regulatoryClass.label}\n`));
|
|
50
|
+
rl.close();
|
|
51
|
+
return {
|
|
52
|
+
archetypeId: archetype.id,
|
|
53
|
+
regulatoryClass: regulatoryClass.id,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function regulatoryComment(regulatoryClass, archetypeLabel) {
|
|
57
|
+
const standards = {
|
|
58
|
+
'class-i': ['ISO 14971 (risk management)', 'IEC 62366 (usability engineering)'],
|
|
59
|
+
'class-ii': ['ISO 14971', 'IEC 62366', 'IEC 62304 (software lifecycle)', '21 CFR 820 / ISO 13485'],
|
|
60
|
+
'class-iii-iib': ['ISO 14971', 'IEC 62366', 'IEC 62304', '21 CFR 820 / ISO 13485', 'Clinical evaluation (EU MDR Annex XIV)'],
|
|
61
|
+
};
|
|
62
|
+
const lines = standards[regulatoryClass].map(s => `// • ${s}`).join('\n');
|
|
63
|
+
return `// Regulatory classification: ${REGULATORY_CLASSES.find(r => r.id === regulatoryClass)?.label}
|
|
64
|
+
// Applicable standards for this project:
|
|
65
|
+
${lines}
|
|
66
|
+
//
|
|
67
|
+
// Generated by memo init — update intended use statement before sharing.`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=init-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-wizard.js","sourceRoot":"","sources":["../../src/commands/init-wizard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,MAAM,kBAAkB,GAAqB;IACzC,EAAE,EAAE,EAAE,SAAS,EAAQ,KAAK,EAAE,oBAAoB,EAAe,SAAS,EAAE,yCAAyC,EAAE;IACvH,EAAE,EAAE,EAAE,UAAU,EAAO,KAAK,EAAE,0BAA0B,EAAS,SAAS,EAAE,8CAA8C,EAAE;IAC5H,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,iCAAiC,EAAE,SAAS,EAAE,6CAA6C,EAAE;CAC9H,CAAC;AAOF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA2B;IACvD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC,CAAC;IAEnG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;IACxB,OAAO,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5D,cAAc,GAAG,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAErD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;IAChF,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,OAAO,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;YACvE,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrG,CAAC;IACL,CAAC;IACD,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAE3D,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,OAAO;QACH,WAAW,EAAE,SAAS,CAAC,EAAE;QACzB,eAAe,EAAE,eAAe,CAAC,EAAE;KACtC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,eAAgC,EAAE,cAAsB;IACtF,MAAM,SAAS,GAAsC;QACjD,SAAS,EAAE,CAAC,6BAA6B,EAAE,mCAAmC,CAAC;QAC/E,UAAU,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,gCAAgC,EAAE,wBAAwB,CAAC;QAClG,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE,wCAAwC,CAAC;KAC/H,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,iCAAiC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,eAAe,CAAC,EAAE,KAAK;;EAEvG,KAAK;;0EAEmE,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { type ArchetypeInfo } from './archetype-loader.js';
|
|
2
|
+
export interface AvailableOntology {
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
type: string;
|
|
6
|
+
description: string;
|
|
7
|
+
extends?: string;
|
|
8
|
+
path: string;
|
|
9
|
+
isDefault: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface AvailableExample {
|
|
12
|
+
id: string;
|
|
13
|
+
aliases: string[];
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
path: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function discoverOntologies(fromDir: string): AvailableOntology[];
|
|
19
|
+
export declare function discoverExamples(fromDir: string): AvailableExample[];
|
|
20
|
+
export declare function listOntologiesCommand(fromDir?: string): void;
|
|
21
|
+
export interface InitOptions {
|
|
22
|
+
template?: string;
|
|
23
|
+
ontology?: string;
|
|
24
|
+
archetype?: string;
|
|
25
|
+
listOntologies?: boolean;
|
|
26
|
+
example?: string;
|
|
27
|
+
fromExample?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function initCommand(name: string | undefined, options: InitOptions): Promise<void>;
|
|
30
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAsBvE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAsBpE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,SAAgB,GAAG,IAAI,CAanE;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AA4DD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F/F"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { basename, resolve } from 'node:path';
|
|
2
|
+
import { cpSync, existsSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { findConfigFile, findMemoManifests, installContentPackage, resolveManifestPath, } from '@memoarchitect/tools';
|
|
6
|
+
import { createLockFile } from '../lock.js';
|
|
7
|
+
import { loadArchetypes, findArchetype, deviceClassArchetypes, profileArchetypes, } from './archetype-loader.js';
|
|
8
|
+
import { runWizard } from './init-wizard.js';
|
|
9
|
+
function manifests(fromDir) {
|
|
10
|
+
return findMemoManifests(fromDir);
|
|
11
|
+
}
|
|
12
|
+
export function discoverOntologies(fromDir) {
|
|
13
|
+
const results = [];
|
|
14
|
+
for (const loaded of manifests(fromDir)) {
|
|
15
|
+
for (const [name, subpath] of Object.entries(loaded.manifest.packages)) {
|
|
16
|
+
const path = resolve(resolveManifestPath(loaded, subpath), 'memo.package.yaml');
|
|
17
|
+
if (!existsSync(path) || results.some(result => result.name === name))
|
|
18
|
+
continue;
|
|
19
|
+
try {
|
|
20
|
+
const parsed = parseYaml(readFileSync(path, 'utf-8'));
|
|
21
|
+
if (parsed?.type !== 'ontology' && parsed?.type !== 'profile')
|
|
22
|
+
continue;
|
|
23
|
+
results.push({
|
|
24
|
+
name,
|
|
25
|
+
version: String(parsed.version ?? '0.0.0'),
|
|
26
|
+
type: String(parsed.type),
|
|
27
|
+
description: String(parsed.description ?? ''),
|
|
28
|
+
extends: typeof parsed.extends === 'string' ? parsed.extends : undefined,
|
|
29
|
+
path,
|
|
30
|
+
isDefault: name === loaded.manifest.init.defaultExtends,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch { /* skip malformed logical packages */ }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
export function discoverExamples(fromDir) {
|
|
39
|
+
const results = [];
|
|
40
|
+
for (const loaded of manifests(fromDir)) {
|
|
41
|
+
for (const [alias, subpath] of Object.entries(loaded.manifest.examples)) {
|
|
42
|
+
const path = resolveManifestPath(loaded, subpath);
|
|
43
|
+
if (!existsSync(path))
|
|
44
|
+
continue;
|
|
45
|
+
const id = basename(path);
|
|
46
|
+
if (results.some(result => result.path === path))
|
|
47
|
+
continue;
|
|
48
|
+
const configPath = ['memo.package.yaml', 'memo.config.yaml']
|
|
49
|
+
.map(name => resolve(path, name)).find(existsSync);
|
|
50
|
+
let name = id;
|
|
51
|
+
let description = '';
|
|
52
|
+
if (configPath) {
|
|
53
|
+
const raw = readFileSync(configPath, 'utf-8');
|
|
54
|
+
const parsed = parseYaml(raw);
|
|
55
|
+
name = String(parsed?.name ?? parsed?.projectName ?? id);
|
|
56
|
+
description = raw.split('\n')[0]?.replace(/^#\s*/, '') ?? '';
|
|
57
|
+
}
|
|
58
|
+
results.push({ id, aliases: [alias], name, description, path });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return results;
|
|
62
|
+
}
|
|
63
|
+
export function listOntologiesCommand(fromDir = process.cwd()) {
|
|
64
|
+
const available = discoverOntologies(fromDir);
|
|
65
|
+
if (available.length === 0) {
|
|
66
|
+
console.log(chalk.yellow('No installed MEMO content manifest found.'));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(chalk.bold('\nAvailable ontology packages:\n'));
|
|
70
|
+
for (const ontology of available) {
|
|
71
|
+
console.log(` ${chalk.cyan(ontology.name)}${ontology.isDefault ? chalk.green(' (default)') : ''}`);
|
|
72
|
+
console.log(` ${chalk.gray(`v${ontology.version} · ${ontology.type}`)}`);
|
|
73
|
+
if (ontology.description)
|
|
74
|
+
console.log(` ${chalk.gray(ontology.description)}`);
|
|
75
|
+
console.log();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function matchExample(examples, query) {
|
|
79
|
+
const exact = examples.find(example => example.id === query || example.aliases.includes(query));
|
|
80
|
+
if (exact)
|
|
81
|
+
return { example: exact, candidates: [exact] };
|
|
82
|
+
let candidates = examples.filter(example => example.id.startsWith(query)
|
|
83
|
+
|| example.aliases.some(alias => alias.startsWith(query)));
|
|
84
|
+
if (candidates.length === 0)
|
|
85
|
+
candidates = examples.filter(example => example.id.includes(query));
|
|
86
|
+
return { example: candidates.length === 1 ? candidates[0] : undefined, candidates };
|
|
87
|
+
}
|
|
88
|
+
function ensureTarget(name, exampleId) {
|
|
89
|
+
const inPlace = !name || name === '.';
|
|
90
|
+
const projectDir = inPlace ? process.cwd() : resolve(process.cwd(), name);
|
|
91
|
+
if (inPlace) {
|
|
92
|
+
const entries = readdirSync(projectDir).filter(entry => !entry.startsWith('.'));
|
|
93
|
+
if (entries.length > 0) {
|
|
94
|
+
const config = findConfigFile(projectDir);
|
|
95
|
+
console.error(chalk.red(config
|
|
96
|
+
? `❌ This directory is already a MEMO project (${basename(config)} exists).`
|
|
97
|
+
: '❌ Current directory is not empty.'));
|
|
98
|
+
if (exampleId)
|
|
99
|
+
console.log(chalk.gray(` Run in an empty directory, or pass a name: memo init <name> --example ${exampleId}`));
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (existsSync(projectDir)) {
|
|
104
|
+
console.error(chalk.red(`❌ Directory "${name}" already exists.`));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
return { projectDir, projectName: basename(projectDir), inPlace };
|
|
108
|
+
}
|
|
109
|
+
function replaceTokens(dir, values) {
|
|
110
|
+
for (const entry of readdirSync(dir)) {
|
|
111
|
+
if (entry === '.memo')
|
|
112
|
+
continue;
|
|
113
|
+
const path = resolve(dir, entry);
|
|
114
|
+
if (statSync(path).isDirectory()) {
|
|
115
|
+
replaceTokens(path, values);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const content = readFileSync(path);
|
|
119
|
+
if (content.includes(0))
|
|
120
|
+
continue;
|
|
121
|
+
let text = content.toString('utf-8');
|
|
122
|
+
for (const [key, value] of Object.entries(values))
|
|
123
|
+
text = text.replaceAll(`{{${key}}}`, value);
|
|
124
|
+
writeFileSync(path, text);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function selectManifest(fromDir, logicalName) {
|
|
128
|
+
const available = manifests(fromDir);
|
|
129
|
+
const selected = logicalName
|
|
130
|
+
? available.find(entry => logicalName in entry.manifest.packages)
|
|
131
|
+
: available[0];
|
|
132
|
+
if (!selected) {
|
|
133
|
+
throw new Error(logicalName
|
|
134
|
+
? `ontology "${logicalName}" not found in an installed MEMO content manifest`
|
|
135
|
+
: 'no installed MEMO content manifest was found');
|
|
136
|
+
}
|
|
137
|
+
return selected;
|
|
138
|
+
}
|
|
139
|
+
export async function initCommand(name, options) {
|
|
140
|
+
const fromDir = process.cwd();
|
|
141
|
+
const exampleQuery = options.example ?? options.fromExample;
|
|
142
|
+
let preparedTarget;
|
|
143
|
+
let loaded;
|
|
144
|
+
try {
|
|
145
|
+
if (manifests(fromDir).length === 0 && !options.listOntologies) {
|
|
146
|
+
preparedTarget = ensureTarget(name, exampleQuery);
|
|
147
|
+
console.log(chalk.gray(' Fetching MEMO content package...'));
|
|
148
|
+
installContentPackage(preparedTarget.projectDir);
|
|
149
|
+
loaded = selectManifest(preparedTarget.projectDir, options.ontology);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
loaded = selectManifest(fromDir, options.ontology);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error(chalk.red(`❌ ${error instanceof Error ? error.message : error}`));
|
|
157
|
+
console.error(chalk.gray(' Install the content package with npm, or set MEMO_CONTENT_SPEC to an npm package/tarball.'));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
const contentFromDir = preparedTarget?.projectDir ?? fromDir;
|
|
161
|
+
const archetypes = await loadArchetypes(contentFromDir, loaded);
|
|
162
|
+
if (options.listOntologies) {
|
|
163
|
+
listOntologiesCommand(fromDir);
|
|
164
|
+
const examples = discoverExamples(fromDir);
|
|
165
|
+
if (examples.length > 0) {
|
|
166
|
+
console.log(chalk.bold('Available examples:\n'));
|
|
167
|
+
for (const example of examples)
|
|
168
|
+
console.log(` ${chalk.cyan(example.id)}`);
|
|
169
|
+
console.log();
|
|
170
|
+
}
|
|
171
|
+
const profiles = profileArchetypes(archetypes);
|
|
172
|
+
if (profiles.length > 0)
|
|
173
|
+
console.log(chalk.bold(`Available profiles:\n${profiles.map(p => ` ${p.id}`).join('\n')}\n`));
|
|
174
|
+
console.log(chalk.bold('Available device archetypes:\n'));
|
|
175
|
+
for (const archetype of deviceClassArchetypes(archetypes))
|
|
176
|
+
console.log(` ${chalk.cyan(archetype.id)}\n ${chalk.gray(archetype.description)}`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (exampleQuery) {
|
|
180
|
+
const { example, candidates } = matchExample(discoverExamples(contentFromDir), exampleQuery);
|
|
181
|
+
if (!example) {
|
|
182
|
+
console.error(chalk.red(candidates.length > 1
|
|
183
|
+
? `❌ Example "${exampleQuery}" is ambiguous.`
|
|
184
|
+
: `❌ Unknown example "${exampleQuery}".`));
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
const target = preparedTarget ?? ensureTarget(name, example.id);
|
|
188
|
+
console.log(chalk.bold(`\n📦 Creating project from example: ${example.id}\n`));
|
|
189
|
+
cpSync(example.path, target.projectDir, { recursive: true });
|
|
190
|
+
console.log(chalk.green(target.inPlace ? '\n✅ Project created in current directory' : `\n✅ Project created at ./${name}`));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const target = preparedTarget ?? ensureTarget(name);
|
|
194
|
+
const ontology = options.ontology ?? loaded.manifest.init.defaultExtends;
|
|
195
|
+
let selectedArchetype = options.archetype ? findArchetype(archetypes, options.archetype) : undefined;
|
|
196
|
+
if (options.archetype && !selectedArchetype) {
|
|
197
|
+
console.error(chalk.red(`❌ Unknown archetype "${options.archetype}".`));
|
|
198
|
+
console.log(chalk.gray('Available: ' + archetypes.map(entry => entry.id).join(', ')));
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
if (!selectedArchetype && process.stdin.isTTY) {
|
|
202
|
+
try {
|
|
203
|
+
const result = await runWizard(deviceClassArchetypes(archetypes));
|
|
204
|
+
selectedArchetype = findArchetype(archetypes, result.archetypeId);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
selectedArchetype = findArchetype(archetypes, 'blank');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
selectedArchetype ??= findArchetype(archetypes, 'blank');
|
|
211
|
+
console.log(chalk.bold(`\n📦 Creating MEMO project: ${target.projectName}\n`));
|
|
212
|
+
const templateDir = resolveManifestPath(loaded, loaded.manifest.init.template);
|
|
213
|
+
cpSync(templateDir, target.projectDir, { recursive: true });
|
|
214
|
+
if (selectedArchetype?.templateDir) {
|
|
215
|
+
const archetypesPath = resolveManifestPath(loaded, loaded.manifest.init.archetypes);
|
|
216
|
+
const starter = resolve(archetypesPath, '..', 'templates', selectedArchetype.templateDir, 'starter.sysml');
|
|
217
|
+
if (!existsSync(starter))
|
|
218
|
+
throw new Error(`Archetype template not found: ${starter}`);
|
|
219
|
+
cpSync(starter, resolve(target.projectDir, 'src', 'catalog', 'starter.sysml'));
|
|
220
|
+
}
|
|
221
|
+
replaceTokens(target.projectDir, { name: target.projectName, rootImport: loaded.manifest.init.rootImport });
|
|
222
|
+
const configPath = resolve(target.projectDir, 'memo.package.yaml');
|
|
223
|
+
const config = parseYaml(readFileSync(configPath, 'utf-8'));
|
|
224
|
+
config.name = target.projectName;
|
|
225
|
+
config.extends = ontology;
|
|
226
|
+
if (selectedArchetype && selectedArchetype.id !== 'blank')
|
|
227
|
+
config.archetype = selectedArchetype.id;
|
|
228
|
+
writeFileSync(configPath, stringifyYaml(config, { lineWidth: 0 }));
|
|
229
|
+
try {
|
|
230
|
+
const { lock } = createLockFile(configPath);
|
|
231
|
+
console.log(chalk.gray(` Created memo.lock.yaml (locked to ${lock.ontology} v${lock.version})`));
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.log(chalk.yellow(` ⚠ Could not create lock file: ${error instanceof Error ? error.message : error}`));
|
|
235
|
+
}
|
|
236
|
+
console.log(chalk.green(target.inPlace ? '\n✅ Project created in current directory' : `\n✅ Project created at ./${target.projectName}`));
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=init.js.map
|