@specverse/engine-realize 3.5.3
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/assets/examples/09-api/ai-spec.yaml +194 -0
- package/assets/examples/09-api/converted.yaml +95 -0
- package/assets/examples/09-api/diagram-architecture.mmd +10 -0
- package/assets/examples/09-api/diagram-er.mmd +10 -0
- package/assets/examples/09-api/documentation.html +104 -0
- package/assets/examples/09-api/documentation.md +95 -0
- package/assets/examples/09-api/inferred-spec.yaml +420 -0
- package/assets/examples/09-api/openapi.json +61 -0
- package/assets/examples/10-api/README.md +216 -0
- package/assets/examples/10-api/ai-spec.yaml +194 -0
- package/assets/examples/10-api/converted.yaml +96 -0
- package/assets/examples/10-api/diagram-architecture.mmd +10 -0
- package/assets/examples/10-api/diagram-er.mmd +10 -0
- package/assets/examples/10-api/documentation.html +104 -0
- package/assets/examples/10-api/documentation.md +95 -0
- package/assets/examples/10-api/inferred-spec.yaml +7 -0
- package/assets/examples/10-api/metadata.yaml +89 -0
- package/assets/examples/10-api/openapi.json +61 -0
- package/assets/examples/10-api/package-integration-test.js +177 -0
- package/assets/examples/10-api/usage-example.js +323 -0
- package/assets/examples/10-api/usage-example.ts +363 -0
- package/assets/examples/10-api/workflow-test.js +113 -0
- package/assets/examples/manifests/01-simple-default-mappings.yaml +36 -0
- package/assets/examples/manifests/02-capability-mappings.yaml +55 -0
- package/assets/examples/manifests/03-hybrid-mappings.yaml +109 -0
- package/assets/examples/manifests/README.md +245 -0
- package/assets/examples/manifests/backend-only.yaml +43 -0
- package/assets/examples/manifests/blog-api.md +78 -0
- package/assets/examples/manifests/blog-api.specly +79 -0
- package/assets/examples/manifests/frontend-only.yaml +27 -0
- package/assets/examples/manifests/fullstack-app.yaml +44 -0
- package/assets/examples/manifests/fullstack-monorepo.yaml +62 -0
- package/assets/examples/validate-examples-with-expected-failures.cjs +328 -0
- package/assets/examples/validate-examples.cjs +225 -0
- package/assets/examples-decomposed/cloud-native-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/cloud-native-manifest.md +379 -0
- package/assets/examples-decomposed/cloud-native-manifest.specly +60 -0
- package/assets/examples-decomposed/docker-compose-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/docker-compose-manifest.md +326 -0
- package/assets/examples-decomposed/docker-compose-manifest.specly +40 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.example.yaml +8 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.md +237 -0
- package/assets/examples-decomposed/kubernetes-deployment-manifest.specly +41 -0
- package/assets/templates/README.md +559 -0
- package/assets/templates/TEMPLATE-ENHANCEMENTS-V33.md +462 -0
- package/assets/templates/backend-only/CLAUDE.md +73 -0
- package/assets/templates/backend-only/README.md +197 -0
- package/assets/templates/backend-only/deployments/README.md +149 -0
- package/assets/templates/backend-only/deployments/development.specly +53 -0
- package/assets/templates/backend-only/deployments/production.specly +87 -0
- package/assets/templates/backend-only/docs/README.md +50 -0
- package/assets/templates/backend-only/docs/api/README.md +7 -0
- package/assets/templates/backend-only/docs/diagrams/README.md +85 -0
- package/assets/templates/backend-only/docs/example-documentation-template.md +269 -0
- package/assets/templates/backend-only/docs/guides/README.md +15 -0
- package/assets/templates/backend-only/dot.env.example +18 -0
- package/assets/templates/backend-only/generated/README.md +56 -0
- package/assets/templates/backend-only/generated/code/integration-test.template.js +320 -0
- package/assets/templates/backend-only/generated/code/package.json.template +34 -0
- package/assets/templates/backend-only/generated/docs/README.md +49 -0
- package/assets/templates/backend-only/gitignore +54 -0
- package/assets/templates/backend-only/manifests/README.md +72 -0
- package/assets/templates/backend-only/manifests/docker-compose.specly +91 -0
- package/assets/templates/backend-only/manifests/implementation.yaml +100 -0
- package/assets/templates/backend-only/manifests/kubernetes.specly +140 -0
- package/assets/templates/backend-only/package.json +59 -0
- package/assets/templates/backend-only/scripts/test-all.sh +160 -0
- package/assets/templates/backend-only/scripts/test-generated-code.sh +165 -0
- package/assets/templates/backend-only/specs/main.specly +67 -0
- package/assets/templates/default/CLAUDE.md +141 -0
- package/assets/templates/default/README.md +404 -0
- package/assets/templates/default/deployments/README.md +149 -0
- package/assets/templates/default/deployments/development.specly +53 -0
- package/assets/templates/default/deployments/production.specly +87 -0
- package/assets/templates/default/docs/README.md +50 -0
- package/assets/templates/default/docs/api/README.md +7 -0
- package/assets/templates/default/docs/diagrams/README.md +85 -0
- package/assets/templates/default/docs/example-documentation-template.md +269 -0
- package/assets/templates/default/docs/guides/README.md +15 -0
- package/assets/templates/default/dot.env.example +18 -0
- package/assets/templates/default/generated/README.md +56 -0
- package/assets/templates/default/generated/code/integration-test.template.js +320 -0
- package/assets/templates/default/generated/code/package.json.template +34 -0
- package/assets/templates/default/generated/docs/README.md +49 -0
- package/assets/templates/default/gitignore +54 -0
- package/assets/templates/default/manifests/README.md +72 -0
- package/assets/templates/default/manifests/docker-compose.specly +91 -0
- package/assets/templates/default/manifests/implementation.yaml +176 -0
- package/assets/templates/default/manifests/kubernetes.specly +140 -0
- package/assets/templates/default/package.json +61 -0
- package/assets/templates/default/scripts/test-all.sh +160 -0
- package/assets/templates/default/scripts/test-generated-code.sh +165 -0
- package/assets/templates/default/specs/main.specly +67 -0
- package/assets/templates/frontend-only/CLAUDE.md +75 -0
- package/assets/templates/frontend-only/README.md +231 -0
- package/assets/templates/frontend-only/deployments/README.md +149 -0
- package/assets/templates/frontend-only/deployments/development.specly +53 -0
- package/assets/templates/frontend-only/deployments/production.specly +87 -0
- package/assets/templates/frontend-only/docs/README.md +50 -0
- package/assets/templates/frontend-only/docs/api/README.md +7 -0
- package/assets/templates/frontend-only/docs/diagrams/README.md +85 -0
- package/assets/templates/frontend-only/docs/example-documentation-template.md +269 -0
- package/assets/templates/frontend-only/docs/guides/README.md +15 -0
- package/assets/templates/frontend-only/dot.env.example +18 -0
- package/assets/templates/frontend-only/generated/README.md +56 -0
- package/assets/templates/frontend-only/generated/code/integration-test.template.js +320 -0
- package/assets/templates/frontend-only/generated/code/package.json.template +34 -0
- package/assets/templates/frontend-only/generated/docs/README.md +49 -0
- package/assets/templates/frontend-only/gitignore +54 -0
- package/assets/templates/frontend-only/manifests/README.md +72 -0
- package/assets/templates/frontend-only/manifests/docker-compose.specly +91 -0
- package/assets/templates/frontend-only/manifests/implementation.yaml +58 -0
- package/assets/templates/frontend-only/manifests/kubernetes.specly +140 -0
- package/assets/templates/frontend-only/package.json +59 -0
- package/assets/templates/frontend-only/scripts/test-all.sh +160 -0
- package/assets/templates/frontend-only/scripts/test-generated-code.sh +165 -0
- package/assets/templates/frontend-only/specs/main.specly +57 -0
- package/assets/templates/full-stack/AI-GUIDE.md +60 -0
- package/assets/templates/full-stack/CLAUDE.md +141 -0
- package/assets/templates/full-stack/README.md +382 -0
- package/assets/templates/full-stack/archive/AI-GUIDE-legacy.md +392 -0
- package/assets/templates/full-stack/deployments/README.md +149 -0
- package/assets/templates/full-stack/deployments/development.specly +53 -0
- package/assets/templates/full-stack/deployments/production.specly +87 -0
- package/assets/templates/full-stack/docs/README.md +51 -0
- package/assets/templates/full-stack/docs/api/README.md +7 -0
- package/assets/templates/full-stack/docs/diagrams/README.md +85 -0
- package/assets/templates/full-stack/docs/example-documentation-template.md +269 -0
- package/assets/templates/full-stack/docs/guides/README.md +15 -0
- package/assets/templates/full-stack/generated/README.md +56 -0
- package/assets/templates/full-stack/generated/code/integration-test.template.js +320 -0
- package/assets/templates/full-stack/generated/code/package.json.template +34 -0
- package/assets/templates/full-stack/generated/docs/README.md +49 -0
- package/assets/templates/full-stack/gitignore +54 -0
- package/assets/templates/full-stack/manifests/README.md +72 -0
- package/assets/templates/full-stack/manifests/docker-compose.specly +91 -0
- package/assets/templates/full-stack/manifests/implementation.yaml +155 -0
- package/assets/templates/full-stack/manifests/kubernetes.specly +140 -0
- package/assets/templates/full-stack/package.json +45 -0
- package/assets/templates/full-stack/scripts/test-all.sh +160 -0
- package/assets/templates/full-stack/scripts/test-generated-code.sh +165 -0
- package/assets/templates/full-stack/specs/example-v33.specly +297 -0
- package/assets/templates/full-stack/specs/main-simple.specly +73 -0
- package/assets/templates/full-stack/specs/main.specly +408 -0
- package/dist/engines/code-generator.d.ts +86 -0
- package/dist/engines/code-generator.d.ts.map +1 -0
- package/dist/engines/code-generator.js +159 -0
- package/dist/engines/code-generator.js.map +1 -0
- package/dist/engines/engine-registry.d.ts +94 -0
- package/dist/engines/engine-registry.d.ts.map +1 -0
- package/dist/engines/engine-registry.js +163 -0
- package/dist/engines/engine-registry.js.map +1 -0
- package/dist/engines/index.d.ts +10 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +12 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/typescript-engine.d.ts +74 -0
- package/dist/engines/typescript-engine.d.ts.map +1 -0
- package/dist/engines/typescript-engine.js +288 -0
- package/dist/engines/typescript-engine.js.map +1 -0
- package/dist/generators/index.d.ts +11 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +11 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +434 -0
- package/dist/index.js.map +1 -0
- package/dist/library/index.d.ts +12 -0
- package/dist/library/index.d.ts.map +1 -0
- package/dist/library/index.js +15 -0
- package/dist/library/index.js.map +1 -0
- package/dist/library/library.d.ts +132 -0
- package/dist/library/library.d.ts.map +1 -0
- package/dist/library/library.js +343 -0
- package/dist/library/library.js.map +1 -0
- package/dist/library/loader.d.ts +73 -0
- package/dist/library/loader.d.ts.map +1 -0
- package/dist/library/loader.js +150 -0
- package/dist/library/loader.js.map +1 -0
- package/dist/library/resolver.d.ts +104 -0
- package/dist/library/resolver.d.ts.map +1 -0
- package/dist/library/resolver.js +299 -0
- package/dist/library/resolver.js.map +1 -0
- package/dist/library/validator.d.ts +65 -0
- package/dist/library/validator.d.ts.map +1 -0
- package/dist/library/validator.js +203 -0
- package/dist/library/validator.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/instance-factory.d.ts +289 -0
- package/dist/types/instance-factory.d.ts.map +1 -0
- package/dist/types/instance-factory.js +8 -0
- package/dist/types/instance-factory.js.map +1 -0
- package/dist/types/unified-mappings.d.ts +163 -0
- package/dist/types/unified-mappings.d.ts.map +1 -0
- package/dist/types/unified-mappings.js +110 -0
- package/dist/types/unified-mappings.js.map +1 -0
- package/dist/utils/ai-spec-loader.d.ts +77 -0
- package/dist/utils/ai-spec-loader.d.ts.map +1 -0
- package/dist/utils/ai-spec-loader.js +138 -0
- package/dist/utils/ai-spec-loader.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/manifest-loader.d.ts +107 -0
- package/dist/utils/manifest-loader.d.ts.map +1 -0
- package/dist/utils/manifest-loader.js +168 -0
- package/dist/utils/manifest-loader.js.map +1 -0
- package/dist/utils/mapping-migration.d.ts +53 -0
- package/dist/utils/mapping-migration.d.ts.map +1 -0
- package/dist/utils/mapping-migration.js +194 -0
- package/dist/utils/mapping-migration.js.map +1 -0
- package/libs/instance-factories/CURVED-INTERFACE.md +278 -0
- package/libs/instance-factories/README.md +433 -0
- package/libs/instance-factories/applications/generic-app.yaml +52 -0
- package/libs/instance-factories/applications/react-app.yaml +186 -0
- package/libs/instance-factories/applications/templates/generic/backend-env-generator.ts +31 -0
- package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +80 -0
- package/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.ts +69 -0
- package/libs/instance-factories/applications/templates/generic/main-generator.ts +308 -0
- package/libs/instance-factories/applications/templates/react/_view-components-source.ts +555 -0
- package/libs/instance-factories/applications/templates/react/api-client-generator.ts +436 -0
- package/libs/instance-factories/applications/templates/react/api-types-generator.ts +153 -0
- package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +94 -0
- package/libs/instance-factories/applications/templates/react/env-example-generator.ts +24 -0
- package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +106 -0
- package/libs/instance-factories/applications/templates/react/gitignore-generator.ts +38 -0
- package/libs/instance-factories/applications/templates/react/index-css-generator.ts +85 -0
- package/libs/instance-factories/applications/templates/react/index-html-generator.ts +30 -0
- package/libs/instance-factories/applications/templates/react/main-tsx-generator.ts +34 -0
- package/libs/instance-factories/applications/templates/react/package-json-generator.ts +54 -0
- package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +179 -0
- package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +1347 -0
- package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +704 -0
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +84 -0
- package/libs/instance-factories/applications/templates/react/tsconfig-generator.ts +35 -0
- package/libs/instance-factories/applications/templates/react/use-api-hooks-generator.ts +121 -0
- package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +150 -0
- package/libs/instance-factories/applications/templates/react/view-form-generator.ts +362 -0
- package/libs/instance-factories/applications/templates/react/view-list-generator.ts +98 -0
- package/libs/instance-factories/applications/templates/react/view-router-generator.ts +89 -0
- package/libs/instance-factories/applications/templates/react/vite-config-generator.ts +49 -0
- package/libs/instance-factories/archived/fastify-prisma.yaml +104 -0
- package/libs/instance-factories/cli/commander-js.yaml +55 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts +12 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts.map +1 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +115 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js.map +1 -0
- package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +145 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +14 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.d.ts.map +1 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.js +182 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.js.map +1 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +992 -0
- package/libs/instance-factories/communication/event-emitter.yaml +56 -0
- package/libs/instance-factories/communication/rabbitmq-events.yaml +87 -0
- package/libs/instance-factories/communication/templates/eventemitter/bus-generator.ts +93 -0
- package/libs/instance-factories/communication/templates/eventemitter/publisher-generator.ts +117 -0
- package/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.ts +101 -0
- package/libs/instance-factories/controllers/fastify.yaml +127 -0
- package/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.ts +103 -0
- package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +389 -0
- package/libs/instance-factories/controllers/templates/fastify/server-generator.ts +76 -0
- package/libs/instance-factories/infrastructure/docker-k8s.yaml +61 -0
- package/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.ts +46 -0
- package/libs/instance-factories/orms/prisma.yaml +89 -0
- package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +563 -0
- package/libs/instance-factories/orms/templates/prisma/services-generator.ts +408 -0
- package/libs/instance-factories/scaffolding/generic-scaffold.yaml +65 -0
- package/libs/instance-factories/scaffolding/templates/generic/env-example-generator.ts +73 -0
- package/libs/instance-factories/scaffolding/templates/generic/env-generator.ts +85 -0
- package/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.ts +69 -0
- package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +176 -0
- package/libs/instance-factories/scaffolding/templates/generic/readme-generator.ts +207 -0
- package/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.ts +78 -0
- package/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.ts +41 -0
- package/libs/instance-factories/sdks/python-sdk.yaml +66 -0
- package/libs/instance-factories/sdks/templates/python/sdk-generator.ts +50 -0
- package/libs/instance-factories/sdks/templates/typescript/sdk-generator.ts +49 -0
- package/libs/instance-factories/sdks/typescript-sdk.yaml +59 -0
- package/libs/instance-factories/services/prisma-services.yaml +71 -0
- package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +303 -0
- package/libs/instance-factories/services/templates/prisma/controller-generator.ts +532 -0
- package/libs/instance-factories/services/templates/prisma/service-generator.ts +315 -0
- package/libs/instance-factories/shared/path-resolver.ts +111 -0
- package/libs/instance-factories/storage/mongodb.yaml +79 -0
- package/libs/instance-factories/storage/postgresql.yaml +75 -0
- package/libs/instance-factories/storage/redis.yaml +79 -0
- package/libs/instance-factories/storage/templates/mongodb/config-generator.ts +15 -0
- package/libs/instance-factories/storage/templates/mongodb/docker-generator.ts +18 -0
- package/libs/instance-factories/storage/templates/postgresql/config-generator.ts +54 -0
- package/libs/instance-factories/storage/templates/postgresql/docker-generator.ts +55 -0
- package/libs/instance-factories/storage/templates/redis/config-generator.ts +16 -0
- package/libs/instance-factories/storage/templates/redis/docker-generator.ts +18 -0
- package/libs/instance-factories/test-generation.ts +192 -0
- package/libs/instance-factories/testing/templates/vitest/tests-generator.ts +51 -0
- package/libs/instance-factories/testing/vitest-tests.yaml +63 -0
- package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +136 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +630 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +330 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +552 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +164 -0
- package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +247 -0
- package/libs/instance-factories/tools/templates/mcp/static/package.json +92 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +284 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +139 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +74 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +156 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +41 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +259 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +231 -0
- package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +196 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +293 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +90 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +24 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +15 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +106 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +75 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +239 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +1501 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +211 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +308 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +210 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +356 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +524 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +530 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +594 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +170 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +544 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +189 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +89 -0
- package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +110 -0
- package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +28 -0
- package/libs/instance-factories/tools/templates/vscode/static/extension.ts +1195 -0
- package/libs/instance-factories/tools/templates/vscode/static/language-configuration.json +34 -0
- package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +4279 -0
- package/libs/instance-factories/tools/templates/vscode/static/syntaxes/specverse.tmLanguage.json +138 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/README.md +74 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/complete-specverse-colors.json +122 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-basic-theme.json +65 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-complete-theme.json +123 -0
- package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-theme-colors.json +64 -0
- package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +214 -0
- package/libs/instance-factories/validation/templates/zod/validation-generator.ts +46 -0
- package/libs/instance-factories/validation/zod.yaml +56 -0
- package/libs/instance-factories/views/index.d.ts +13 -0
- package/libs/instance-factories/views/index.d.ts.map +1 -0
- package/libs/instance-factories/views/index.js +18 -0
- package/libs/instance-factories/views/index.js.map +1 -0
- package/libs/instance-factories/views/index.ts +45 -0
- package/libs/instance-factories/views/react-components.yaml +129 -0
- package/libs/instance-factories/views/templates/ARCHITECTURE.md +198 -0
- package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +869 -0
- package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +953 -0
- package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +806 -0
- package/libs/instance-factories/views/templates/react/app-generator.ts +55 -0
- package/libs/instance-factories/views/templates/react/components-generator.ts +391 -0
- package/libs/instance-factories/views/templates/react/forms-generator.ts +343 -0
- package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +54 -0
- package/libs/instance-factories/views/templates/react/hooks-generator.ts +122 -0
- package/libs/instance-factories/views/templates/react/index-css-generator.ts +209 -0
- package/libs/instance-factories/views/templates/react/index-html-generator.ts +34 -0
- package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +29 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +152 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.js +398 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.js.map +1 -0
- package/libs/instance-factories/views/templates/react/react-component-generator.ts +533 -0
- package/libs/instance-factories/views/templates/react/router-generator.ts +197 -0
- package/libs/instance-factories/views/templates/react/router-generic-generator.ts +103 -0
- package/libs/instance-factories/views/templates/react/spec-json-generator.ts +17 -0
- package/libs/instance-factories/views/templates/react/types-generator.ts +76 -0
- package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +42 -0
- package/libs/instance-factories/views/templates/react/vite-config-generator.ts +38 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +1 -0
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +474 -0
- package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +242 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +77 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.js +47 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/adapter-types.ts +142 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +63 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +822 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +908 -0
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts +247 -0
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/base-generator.js +363 -0
- package/libs/instance-factories/views/templates/shared/base-generator.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/base-generator.ts +608 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +254 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.js +602 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/component-metadata.ts +803 -0
- package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +250 -0
- package/libs/instance-factories/views/templates/shared/composite-patterns.ts +535 -0
- package/libs/instance-factories/views/templates/shared/index.ts +68 -0
- package/libs/instance-factories/views/templates/shared/pattern-validator.ts +279 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +149 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.js +580 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/property-mapper.ts +700 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +143 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +1 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js +420 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +1 -0
- package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +539 -0
- package/package.json +42 -0
- package/schema/SPECVERSE-SCHEMA.json +4274 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Configuration Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates database configuration for PostgreSQL instances
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Generate PostgreSQL configuration
|
|
11
|
+
*/
|
|
12
|
+
export default function generatePostgreSQLConfig(context: TemplateContext): string {
|
|
13
|
+
const { instance, implType } = context;
|
|
14
|
+
const config = implType.configuration || {};
|
|
15
|
+
const instanceName = instance?.name || 'default';
|
|
16
|
+
|
|
17
|
+
return `/**
|
|
18
|
+
* PostgreSQL Database Configuration
|
|
19
|
+
* Instance: ${instanceName}
|
|
20
|
+
* Generated from SpecVerse specification
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { Pool, PoolConfig } from 'pg';
|
|
24
|
+
|
|
25
|
+
export const ${instanceName}Config: PoolConfig = {
|
|
26
|
+
host: process.env.${instanceName.toUpperCase()}_DB_HOST || ${JSON.stringify(config.host || 'localhost')},
|
|
27
|
+
port: parseInt(process.env.${instanceName.toUpperCase()}_DB_PORT || '${config.port || 5432}'),
|
|
28
|
+
database: process.env.${instanceName.toUpperCase()}_DB_NAME || ${JSON.stringify(config.database || 'app')},
|
|
29
|
+
user: process.env.${instanceName.toUpperCase()}_DB_USER,
|
|
30
|
+
password: process.env.${instanceName.toUpperCase()}_DB_PASSWORD,
|
|
31
|
+
|
|
32
|
+
// Connection pool settings
|
|
33
|
+
min: ${config.pool?.min || 2},
|
|
34
|
+
max: ${config.pool?.max || 10},
|
|
35
|
+
idleTimeoutMillis: ${config.pool?.idleTimeoutMillis || 30000},
|
|
36
|
+
connectionTimeoutMillis: ${config.pool?.connectionTimeoutMillis || 2000},
|
|
37
|
+
|
|
38
|
+
// Performance settings
|
|
39
|
+
statement_timeout: 30000,
|
|
40
|
+
query_timeout: 30000,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// Create connection pool
|
|
44
|
+
export const ${instanceName}Pool = new Pool(${instanceName}Config);
|
|
45
|
+
|
|
46
|
+
// Handle pool errors
|
|
47
|
+
${instanceName}Pool.on('error', (err) => {
|
|
48
|
+
console.error('Unexpected error on idle PostgreSQL client (${instanceName})', err);
|
|
49
|
+
process.exit(-1);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export default ${instanceName}Pool;
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Docker Compose Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates Docker Compose configuration for PostgreSQL instances
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Generate Docker Compose configuration for PostgreSQL
|
|
11
|
+
*/
|
|
12
|
+
export default function generatePostgreSQLDocker(context: TemplateContext): string {
|
|
13
|
+
const { instance, implType } = context;
|
|
14
|
+
const config = implType.configuration || {};
|
|
15
|
+
const instanceName = instance?.name || 'postgres';
|
|
16
|
+
|
|
17
|
+
return `# PostgreSQL Docker Compose Configuration
|
|
18
|
+
# Instance: ${instanceName}
|
|
19
|
+
# Generated from SpecVerse specification
|
|
20
|
+
|
|
21
|
+
version: '3.8'
|
|
22
|
+
|
|
23
|
+
services:
|
|
24
|
+
${instanceName}:
|
|
25
|
+
image: postgres:15-alpine
|
|
26
|
+
container_name: ${instanceName}
|
|
27
|
+
restart: unless-stopped
|
|
28
|
+
|
|
29
|
+
ports:
|
|
30
|
+
- "\${${instanceName.toUpperCase()}_DB_PORT:-${config.port || 5432}}:5432"
|
|
31
|
+
|
|
32
|
+
environment:
|
|
33
|
+
POSTGRES_DB: \${${instanceName.toUpperCase()}_DB_NAME:-app}
|
|
34
|
+
POSTGRES_USER: \${${instanceName.toUpperCase()}_DB_USER:-postgres}
|
|
35
|
+
POSTGRES_PASSWORD: \${${instanceName.toUpperCase()}_DB_PASSWORD}
|
|
36
|
+
|
|
37
|
+
# Performance settings
|
|
38
|
+
POSTGRES_MAX_CONNECTIONS: ${config.settings?.max_connections || 100}
|
|
39
|
+
POSTGRES_SHARED_BUFFERS: ${config.settings?.shared_buffers || '256MB'}
|
|
40
|
+
|
|
41
|
+
volumes:
|
|
42
|
+
- ${instanceName}_data:/var/lib/postgresql/data
|
|
43
|
+
- ./init-scripts:/docker-entrypoint-initdb.d
|
|
44
|
+
|
|
45
|
+
healthcheck:
|
|
46
|
+
test: ["CMD-SHELL", "pg_isready -U \${${instanceName.toUpperCase()}_DB_USER:-postgres}"]
|
|
47
|
+
interval: 10s
|
|
48
|
+
timeout: 5s
|
|
49
|
+
retries: 5
|
|
50
|
+
|
|
51
|
+
volumes:
|
|
52
|
+
${instanceName}_data:
|
|
53
|
+
driver: local
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Configuration Generator
|
|
3
|
+
*/
|
|
4
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
5
|
+
|
|
6
|
+
export default function generateRedisConfig(context: TemplateContext): string {
|
|
7
|
+
const { instance } = context;
|
|
8
|
+
const instanceName = instance?.name || 'redis';
|
|
9
|
+
return `// Redis configuration for ${instanceName}
|
|
10
|
+
// TODO: Implement full Redis config generator
|
|
11
|
+
export const redisConfig = {
|
|
12
|
+
host: process.env.REDIS_HOST || 'localhost',
|
|
13
|
+
port: parseInt(process.env.REDIS_PORT || '6379')
|
|
14
|
+
};
|
|
15
|
+
`;
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis Docker Compose Generator
|
|
3
|
+
*/
|
|
4
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
5
|
+
|
|
6
|
+
export default function generateRedisDocker(context: TemplateContext): string {
|
|
7
|
+
const { instance } = context;
|
|
8
|
+
const instanceName = instance?.name || 'redis';
|
|
9
|
+
return `# Redis Docker Compose for ${instanceName}
|
|
10
|
+
# TODO: Implement full Redis docker generator
|
|
11
|
+
version: '3.8'
|
|
12
|
+
services:
|
|
13
|
+
${instanceName}:
|
|
14
|
+
image: redis:7-alpine
|
|
15
|
+
ports:
|
|
16
|
+
- "6379:6379"
|
|
17
|
+
`;
|
|
18
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test v3.3 Implementation Types System
|
|
3
|
+
*
|
|
4
|
+
* Tests the complete flow from spec to generated code
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { createDefaultLibrary, createResolver, createCodeGenerator, loadManifest } from '@specverse/engine-realize';
|
|
8
|
+
import { UnifiedSpecVerseParser } from '@specverse/engine-parser';
|
|
9
|
+
import { readFileSync } from 'fs';
|
|
10
|
+
import { resolve } from 'path';
|
|
11
|
+
|
|
12
|
+
async function testV33Generation() {
|
|
13
|
+
console.log('🧪 Testing v3.3 Implementation Types System\n');
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
// 1. Load Implementation Type Library
|
|
17
|
+
console.log('📚 Step 1: Loading Implementation Type Library...');
|
|
18
|
+
const library = await createDefaultLibrary(process.cwd());
|
|
19
|
+
const allTypes = library.find({});
|
|
20
|
+
console.log(` ✅ Library loaded with ${allTypes.length} implementation types`);
|
|
21
|
+
|
|
22
|
+
// List loaded types
|
|
23
|
+
allTypes.forEach(type => {
|
|
24
|
+
console.log(` - ${type.name} v${type.version} (${type.type})`);
|
|
25
|
+
});
|
|
26
|
+
console.log();
|
|
27
|
+
|
|
28
|
+
// 2. Load Manifest
|
|
29
|
+
console.log('📄 Step 2: Loading v3.3 Manifest...');
|
|
30
|
+
const manifestPath = resolve(process.cwd(), 'examples/v33-test/fastify-prisma-manifest.yaml');
|
|
31
|
+
const manifest = loadManifest(manifestPath);
|
|
32
|
+
console.log(` ✅ Manifest loaded: ${manifest.name}`);
|
|
33
|
+
console.log(` - Version: ${manifest.version}`);
|
|
34
|
+
console.log(` - Implementation Types: ${manifest.implementationTypes?.length || 0}`);
|
|
35
|
+
console.log(` - Capability Mappings: ${Object.keys(manifest.capabilityMappings || {}).length}`);
|
|
36
|
+
console.log();
|
|
37
|
+
|
|
38
|
+
// 3. Create Resolver
|
|
39
|
+
console.log('🔍 Step 3: Creating Capability Resolver...');
|
|
40
|
+
const resolver = createResolver(library, manifest);
|
|
41
|
+
console.log(` ✅ Resolver created`);
|
|
42
|
+
console.log();
|
|
43
|
+
|
|
44
|
+
// 4. Parse Spec
|
|
45
|
+
console.log('📝 Step 4: Parsing Test Spec...');
|
|
46
|
+
// Use a simple existing example for now
|
|
47
|
+
const specPath = resolve(process.cwd(), 'examples/01-fundamentals/01-01-basic-model.specly');
|
|
48
|
+
const specContent = readFileSync(specPath, 'utf8');
|
|
49
|
+
|
|
50
|
+
const schemaPath = resolve(process.cwd(), 'schema/SPECVERSE-SCHEMA.json');
|
|
51
|
+
const schema = JSON.parse(readFileSync(schemaPath, 'utf8'));
|
|
52
|
+
|
|
53
|
+
const parser = new UnifiedSpecVerseParser(schema);
|
|
54
|
+
const parseResult = parser.parse(specContent, 'specly');
|
|
55
|
+
|
|
56
|
+
if (parseResult.errors && parseResult.errors.length > 0) {
|
|
57
|
+
console.error(' ❌ Parse errors:');
|
|
58
|
+
parseResult.errors.forEach((err: any) => {
|
|
59
|
+
console.error(` - ${err.message}`);
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
console.log(` ✅ Spec parsed successfully`);
|
|
65
|
+
console.log(` - Component: ${parseResult.ast?.components ? Object.keys(parseResult.ast.components)[0] : 'unknown'}`);
|
|
66
|
+
console.log(` - Models: ${parseResult.ast?.components?.[Object.keys(parseResult.ast.components)[0]]?.models?.length || 0}`);
|
|
67
|
+
console.log(` - Controllers: ${parseResult.ast?.components?.[Object.keys(parseResult.ast.components)[0]]?.controllers?.length || 0}`);
|
|
68
|
+
|
|
69
|
+
// Mock a deployment for testing (since basic example doesn't have one)
|
|
70
|
+
const deployment = {
|
|
71
|
+
environment: 'development',
|
|
72
|
+
instances: {
|
|
73
|
+
'apiServer': {
|
|
74
|
+
name: 'Test API Server',
|
|
75
|
+
type: 'api-server',
|
|
76
|
+
advertises: ['api.rest', 'api.rest.crud'],
|
|
77
|
+
uses: ['storage.database']
|
|
78
|
+
},
|
|
79
|
+
'database': {
|
|
80
|
+
name: 'Test Database',
|
|
81
|
+
type: 'storage',
|
|
82
|
+
advertises: ['storage.database', 'storage.prisma'],
|
|
83
|
+
uses: []
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
console.log(` - Mocked deployment for testing`);
|
|
88
|
+
console.log(` - Instances: ${Object.keys(deployment.instances || {}).length}`);
|
|
89
|
+
console.log();
|
|
90
|
+
|
|
91
|
+
// 5. Test Resolution
|
|
92
|
+
console.log('🔗 Step 5: Testing Capability Resolution...');
|
|
93
|
+
const apiInstance = deployment.instances?.['apiServer'];
|
|
94
|
+
if (!apiInstance) {
|
|
95
|
+
console.error(' ❌ No api-server instance found');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
console.log(` Testing instance: ${apiInstance.name}`);
|
|
100
|
+
console.log(` Advertises: ${apiInstance.advertises?.join(', ')}`);
|
|
101
|
+
|
|
102
|
+
const resolved = resolver.resolveForInstance(apiInstance);
|
|
103
|
+
console.log(` ✅ Resolved ${resolved.length} implementation type(s)`);
|
|
104
|
+
|
|
105
|
+
resolved.forEach(impl => {
|
|
106
|
+
console.log(` - ${impl.implementationType.name}`);
|
|
107
|
+
console.log(` Capability: ${impl.capability}`);
|
|
108
|
+
console.log(` Templates: ${Object.keys(impl.implementationType.codeTemplates).join(', ')}`);
|
|
109
|
+
});
|
|
110
|
+
console.log();
|
|
111
|
+
|
|
112
|
+
// 6. Test Code Generation
|
|
113
|
+
console.log('⚙️ Step 6: Testing Code Generation...');
|
|
114
|
+
const codeGen = createCodeGenerator({ outputDir: '/tmp/v33-test' });
|
|
115
|
+
|
|
116
|
+
// Get component data
|
|
117
|
+
const componentName = Object.keys(parseResult.ast?.components || {})[0];
|
|
118
|
+
const component = parseResult.ast?.components?.[componentName];
|
|
119
|
+
const model = component?.models?.[0];
|
|
120
|
+
|
|
121
|
+
// Mock a controller if not present
|
|
122
|
+
const controller = component?.controllers?.[0] || {
|
|
123
|
+
name: `${model?.name}Controller`,
|
|
124
|
+
path: `/api/${model?.name?.toLowerCase()}`,
|
|
125
|
+
model: model?.name,
|
|
126
|
+
endpoints: [
|
|
127
|
+
{ operation: 'create', method: 'POST', path: '/' },
|
|
128
|
+
{ operation: 'retrieve', method: 'GET', path: '/:id' },
|
|
129
|
+
{ operation: 'update', method: 'PUT', path: '/:id' },
|
|
130
|
+
{ operation: 'delete', method: 'DELETE', path: '/:id' },
|
|
131
|
+
{ operation: 'list', method: 'GET', path: '/' }
|
|
132
|
+
]
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
if (!model) {
|
|
136
|
+
console.error(' ❌ No model found in spec');
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
console.log(` Generating code for model: ${model.name}`);
|
|
141
|
+
|
|
142
|
+
// Test each template
|
|
143
|
+
const impl = resolved[0];
|
|
144
|
+
const templates = ['routes', 'services', 'schema'];
|
|
145
|
+
|
|
146
|
+
for (const templateName of templates) {
|
|
147
|
+
try {
|
|
148
|
+
console.log(` Testing ${templateName} template...`);
|
|
149
|
+
|
|
150
|
+
const output = await codeGen.generateFromTemplate(
|
|
151
|
+
impl,
|
|
152
|
+
templateName,
|
|
153
|
+
{
|
|
154
|
+
spec: parseResult.ast,
|
|
155
|
+
model,
|
|
156
|
+
controller,
|
|
157
|
+
models: [model]
|
|
158
|
+
},
|
|
159
|
+
{ outputDir: '/tmp/v33-test' }
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
console.log(` ✅ ${templateName}: ${output.filePath}`);
|
|
163
|
+
console.log(` Code length: ${output.code.length} characters`);
|
|
164
|
+
console.log(` First 100 chars: ${output.code.substring(0, 100)}...`);
|
|
165
|
+
} catch (error) {
|
|
166
|
+
console.error(` ❌ ${templateName} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
console.log();
|
|
170
|
+
|
|
171
|
+
// 7. Summary
|
|
172
|
+
console.log('✅ All tests completed!');
|
|
173
|
+
console.log('\n📊 Summary:');
|
|
174
|
+
console.log(` - Library: ✅ Loaded`);
|
|
175
|
+
console.log(` - Manifest: ✅ Loaded`);
|
|
176
|
+
console.log(` - Spec: ✅ Parsed`);
|
|
177
|
+
console.log(` - Resolution: ✅ Working`);
|
|
178
|
+
console.log(` - Generation: ✅ Working`);
|
|
179
|
+
console.log('\n🎉 v3.3 Implementation Types System is operational!');
|
|
180
|
+
|
|
181
|
+
} catch (error) {
|
|
182
|
+
console.error('\n❌ Test failed:', error instanceof Error ? error.message : String(error));
|
|
183
|
+
if (error instanceof Error && error.stack) {
|
|
184
|
+
console.error('\nStack trace:');
|
|
185
|
+
console.error(error.stack);
|
|
186
|
+
}
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Run test
|
|
192
|
+
testV33Generation();
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest Test Suite Generator Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing generate-tests.js script for use with the
|
|
5
|
+
* implementation types system.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This is a wrapper around scripts/generate-tests.js
|
|
8
|
+
* TODO: Convert generate-tests.js to native TypeScript template generator
|
|
9
|
+
* See vitest-tests.yaml for conversion notes.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
13
|
+
import { generateTests } from '../../../../../scripts/generate-tests.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Generate test suite by delegating to the existing generator
|
|
17
|
+
*/
|
|
18
|
+
export default function generateTestSuite(context: TemplateContext): string {
|
|
19
|
+
const { spec, implType, outputDir } = context;
|
|
20
|
+
|
|
21
|
+
if (!spec) {
|
|
22
|
+
throw new Error('Specification is required in template context');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Extract configuration from implementation type
|
|
26
|
+
const config = implType.configuration || {};
|
|
27
|
+
|
|
28
|
+
const options = {
|
|
29
|
+
testFramework: config.testFramework || 'vitest',
|
|
30
|
+
generateUnitTests: config.generateUnitTests !== false,
|
|
31
|
+
generateIntegrationTests: config.generateIntegrationTests !== false,
|
|
32
|
+
generateE2ETests: config.generateE2ETests !== false,
|
|
33
|
+
generateFixtures: config.generateFixtures !== false,
|
|
34
|
+
generateMocks: config.generateMocks !== false
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Call the existing generator
|
|
38
|
+
const result = generateTests(spec, outputDir || './tests', options);
|
|
39
|
+
|
|
40
|
+
// Return summary information
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
message: 'Test suite generated successfully',
|
|
43
|
+
unitTests: result.unitTests,
|
|
44
|
+
integrationTests: result.integrationTests,
|
|
45
|
+
e2eTests: result.e2eTests,
|
|
46
|
+
fixtureCount: result.fixtureCount,
|
|
47
|
+
mockCount: result.mockCount,
|
|
48
|
+
outputDir: result.outputDir,
|
|
49
|
+
files: result.files
|
|
50
|
+
}, null, 2);
|
|
51
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: VitestTests
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
category: service
|
|
4
|
+
description: "Comprehensive test suite generator with Vitest - unit, integration, and e2e tests"
|
|
5
|
+
|
|
6
|
+
metadata:
|
|
7
|
+
author: "SpecVerse Team"
|
|
8
|
+
license: "MIT"
|
|
9
|
+
tags: [vitest, testing, typescript, unit, integration, e2e]
|
|
10
|
+
|
|
11
|
+
compatibility:
|
|
12
|
+
specverse: "^3.3.0"
|
|
13
|
+
node: ">=18.0.0"
|
|
14
|
+
|
|
15
|
+
capabilities:
|
|
16
|
+
provides:
|
|
17
|
+
- "testing.unit"
|
|
18
|
+
- "testing.integration"
|
|
19
|
+
- "testing.e2e"
|
|
20
|
+
requires:
|
|
21
|
+
- "api.rest"
|
|
22
|
+
|
|
23
|
+
technology:
|
|
24
|
+
runtime: "node"
|
|
25
|
+
language: "typescript"
|
|
26
|
+
testFramework: "vitest"
|
|
27
|
+
testRunner: "vitest"
|
|
28
|
+
|
|
29
|
+
dependencies:
|
|
30
|
+
dev:
|
|
31
|
+
- name: "vitest"
|
|
32
|
+
version: "^1.0.0"
|
|
33
|
+
- name: "@vitest/ui"
|
|
34
|
+
version: "^1.0.0"
|
|
35
|
+
- name: "@types/node"
|
|
36
|
+
version: "^20.8.0"
|
|
37
|
+
- name: "typescript"
|
|
38
|
+
version: "^5.2.0"
|
|
39
|
+
|
|
40
|
+
codeTemplates:
|
|
41
|
+
tests:
|
|
42
|
+
engine: typescript
|
|
43
|
+
generator: "libs/instance-factories/testing/templates/vitest/tests-generator.ts"
|
|
44
|
+
outputPattern: "tests/"
|
|
45
|
+
|
|
46
|
+
configuration:
|
|
47
|
+
testFramework: "vitest"
|
|
48
|
+
generateUnitTests: true
|
|
49
|
+
generateIntegrationTests: true
|
|
50
|
+
generateE2ETests: true
|
|
51
|
+
generateFixtures: true
|
|
52
|
+
generateMocks: true
|
|
53
|
+
|
|
54
|
+
# NOTE: This implementation type wraps the existing generate-tests.js script
|
|
55
|
+
# TODO: Future enhancement - Convert generate-tests.js to native TypeScript template generator
|
|
56
|
+
# The current script is 700+ lines and generates a complete test suite structure.
|
|
57
|
+
# Converting to native templates would require breaking it into multiple template files:
|
|
58
|
+
# - unit-tests-generator.ts (service layer unit tests)
|
|
59
|
+
# - integration-tests-generator.ts (route integration tests)
|
|
60
|
+
# - e2e-tests-generator.ts (end-to-end workflow tests)
|
|
61
|
+
# - fixtures-generator.ts (test data fixtures)
|
|
62
|
+
# - mocks-generator.ts (Prisma and EventBus mocks)
|
|
63
|
+
# - setup-generator.ts (database and server setup utilities)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates a Model Context Protocol server from the SpecVerse spec.
|
|
5
|
+
* Ships the core server framework as static assets, generates tool/resource
|
|
6
|
+
* registration from the spec's ToolsSupport and CLI components.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
10
|
+
import { existsSync, mkdirSync, writeFileSync, readdirSync, statSync, copyFileSync } from 'fs';
|
|
11
|
+
import { join, dirname } from 'path';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
13
|
+
|
|
14
|
+
const __generatorDir = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
|
|
16
|
+
export default function generateMCPServer(context: TemplateContext): string {
|
|
17
|
+
const { spec, outputDir } = context;
|
|
18
|
+
|
|
19
|
+
const mcpDir = join(outputDir || '.', 'tools', 'specverse-mcp');
|
|
20
|
+
if (!existsSync(mcpDir)) mkdirSync(mcpDir, { recursive: true });
|
|
21
|
+
|
|
22
|
+
// 1. Copy static MCP server framework
|
|
23
|
+
const staticDir = join(__generatorDir, 'static');
|
|
24
|
+
if (existsSync(staticDir)) {
|
|
25
|
+
copyRecursive(staticDir, mcpDir);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// 2. Generate tool registry from spec
|
|
29
|
+
const tools = extractMCPTools(spec);
|
|
30
|
+
const resources = extractMCPResources(spec);
|
|
31
|
+
const cliCommands = extractCLICommands(spec);
|
|
32
|
+
|
|
33
|
+
// 3. Generate a spec-driven registration file
|
|
34
|
+
const registryCode = generateToolRegistry(tools, resources, cliCommands);
|
|
35
|
+
const registryDir = join(mcpDir, 'src', 'generated');
|
|
36
|
+
if (!existsSync(registryDir)) mkdirSync(registryDir, { recursive: true });
|
|
37
|
+
writeFileSync(join(registryDir, 'spec-registry.ts'), registryCode);
|
|
38
|
+
|
|
39
|
+
return `MCP server generated in: ${mcpDir}\n ${tools.length} tools, ${resources.length} resources, ${cliCommands.length} CLI commands`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function extractMCPTools(spec: any): Array<{ name: string; description: string; isEntityTool: boolean }> {
|
|
43
|
+
const tools: Array<{ name: string; description: string; isEntityTool: boolean }> = [];
|
|
44
|
+
const components = spec?.components || [];
|
|
45
|
+
for (const component of Array.isArray(components) ? components : Object.values(components)) {
|
|
46
|
+
const models = (component as any)?.models;
|
|
47
|
+
if (!models) continue;
|
|
48
|
+
const modelList = Array.isArray(models) ? models : Object.entries(models).map(([n, d]) => ({ name: n, ...(d as any) }));
|
|
49
|
+
for (const model of modelList) {
|
|
50
|
+
if (model.name === 'MCPTool') {
|
|
51
|
+
// This is the meta-model — extract default tools from the spec description
|
|
52
|
+
tools.push(
|
|
53
|
+
{ name: 'specverse-create', description: 'Create a SpecVerse specification from requirements', isEntityTool: false },
|
|
54
|
+
{ name: 'specverse-analyse', description: 'Analyse existing code and extract a specification', isEntityTool: false },
|
|
55
|
+
{ name: 'specverse-validate', description: 'Validate a .specly specification', isEntityTool: false },
|
|
56
|
+
{ name: 'specverse-realize', description: 'Generate code from a specification', isEntityTool: false },
|
|
57
|
+
{ name: 'specverse-suggest', description: 'Get improvement suggestions for a specification', isEntityTool: false },
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (tools.length === 0) {
|
|
63
|
+
// Default tools if no MCPTool model found
|
|
64
|
+
tools.push(
|
|
65
|
+
{ name: 'specverse-validate', description: 'Validate a specification', isEntityTool: false },
|
|
66
|
+
{ name: 'specverse-create', description: 'Create a specification', isEntityTool: false },
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return tools;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function extractMCPResources(spec: any): Array<{ uri: string; name: string; description: string }> {
|
|
73
|
+
return [
|
|
74
|
+
{ uri: 'specverse://schema', name: 'SpecVerse Schema', description: 'JSON Schema for .specly validation' },
|
|
75
|
+
{ uri: 'specverse://conventions', name: 'Convention Reference', description: 'Convention syntax patterns' },
|
|
76
|
+
{ uri: 'specverse://library-catalog', name: 'Library Catalog', description: 'Available SpecVerse libraries' },
|
|
77
|
+
{ uri: 'specverse://prompts', name: 'Prompt Templates', description: 'AI prompt template versions' },
|
|
78
|
+
];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function extractCLICommands(spec: any): string[] {
|
|
82
|
+
const commands: string[] = [];
|
|
83
|
+
const components = spec?.components || [];
|
|
84
|
+
for (const component of Array.isArray(components) ? components : Object.values(components)) {
|
|
85
|
+
const cliCommands = (component as any)?.commands;
|
|
86
|
+
if (!cliCommands) continue;
|
|
87
|
+
for (const [, rootDef] of Object.entries(cliCommands as Record<string, any>)) {
|
|
88
|
+
const subs = (rootDef as any)?.subcommands || {};
|
|
89
|
+
for (const subName of Object.keys(subs)) {
|
|
90
|
+
commands.push(subName);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return commands;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function generateToolRegistry(
|
|
98
|
+
tools: Array<{ name: string; description: string; isEntityTool: boolean }>,
|
|
99
|
+
resources: Array<{ uri: string; name: string; description: string }>,
|
|
100
|
+
cliCommands: string[]
|
|
101
|
+
): string {
|
|
102
|
+
return `/**
|
|
103
|
+
* Spec-Driven MCP Registry
|
|
104
|
+
* Generated from SpecVerse self-specification.
|
|
105
|
+
*
|
|
106
|
+
* Tools, resources, and CLI command mappings derived from the spec.
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
export const SPEC_TOOLS = ${JSON.stringify(tools, null, 2)};
|
|
110
|
+
|
|
111
|
+
export const SPEC_RESOURCES = ${JSON.stringify(resources, null, 2)};
|
|
112
|
+
|
|
113
|
+
export const CLI_COMMANDS = ${JSON.stringify(cliCommands, null, 2)};
|
|
114
|
+
|
|
115
|
+
export function getToolByName(name: string) {
|
|
116
|
+
return SPEC_TOOLS.find(t => t.name === name);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function getResourceByUri(uri: string) {
|
|
120
|
+
return SPEC_RESOURCES.find(r => r.uri === uri);
|
|
121
|
+
}
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function copyRecursive(src: string, dest: string) {
|
|
126
|
+
for (const entry of readdirSync(src)) {
|
|
127
|
+
const srcPath = join(src, entry);
|
|
128
|
+
const destPath = join(dest, entry);
|
|
129
|
+
if (statSync(srcPath).isDirectory()) {
|
|
130
|
+
if (!existsSync(destPath)) mkdirSync(destPath, { recursive: true });
|
|
131
|
+
copyRecursive(srcPath, destPath);
|
|
132
|
+
} else {
|
|
133
|
+
copyFileSync(srcPath, destPath);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|