@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,320 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Integration Test for Generated Code
|
|
5
|
+
*
|
|
6
|
+
* Tests that generated services and routes actually execute correctly:
|
|
7
|
+
* - Service methods can be called
|
|
8
|
+
* - Validation works
|
|
9
|
+
* - Database operations execute (with mock)
|
|
10
|
+
* - Event publishing happens
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { fileURLToPath } from 'url';
|
|
14
|
+
import { dirname, join } from 'path';
|
|
15
|
+
import { existsSync } from 'fs';
|
|
16
|
+
|
|
17
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
+
const __dirname = dirname(__filename);
|
|
19
|
+
|
|
20
|
+
// ANSI color codes
|
|
21
|
+
const GREEN = '\x1b[32m';
|
|
22
|
+
const RED = '\x1b[31m';
|
|
23
|
+
const YELLOW = '\x1b[33m';
|
|
24
|
+
const BLUE = '\x1b[34m';
|
|
25
|
+
const RESET = '\x1b[0m';
|
|
26
|
+
|
|
27
|
+
let testsPassed = 0;
|
|
28
|
+
let testsFailed = 0;
|
|
29
|
+
|
|
30
|
+
function log(message, color = RESET) {
|
|
31
|
+
console.log(`${color}${message}${RESET}`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function assert(condition, message) {
|
|
35
|
+
if (condition) {
|
|
36
|
+
log(` ✅ ${message}`, GREEN);
|
|
37
|
+
testsPassed++;
|
|
38
|
+
return true;
|
|
39
|
+
} else {
|
|
40
|
+
log(` ❌ ${message}`, RED);
|
|
41
|
+
testsFailed++;
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Mock database and event bus
|
|
47
|
+
class MockDatabase {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.data = new Map();
|
|
50
|
+
this.operations = [];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
create(model, data) {
|
|
54
|
+
const id = data.id || Math.random().toString(36);
|
|
55
|
+
const record = { ...data, id, createdAt: new Date(), version: 0 };
|
|
56
|
+
this.data.set(id, record);
|
|
57
|
+
this.operations.push({ type: 'create', model, data: record });
|
|
58
|
+
return record;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
findOne(model, where) {
|
|
62
|
+
for (const [id, record] of this.data.entries()) {
|
|
63
|
+
if (where.id === id && (!where.deletedAt || record.deletedAt === where.deletedAt)) {
|
|
64
|
+
return record;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
update(model, id, data) {
|
|
71
|
+
const record = this.data.get(id);
|
|
72
|
+
if (!record) return null;
|
|
73
|
+
|
|
74
|
+
const updated = { ...record, ...data, updatedAt: new Date(), version: record.version + 1 };
|
|
75
|
+
this.data.set(id, updated);
|
|
76
|
+
this.operations.push({ type: 'update', model, id, data: updated });
|
|
77
|
+
return updated;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
delete(model, id) {
|
|
81
|
+
const record = this.data.get(id);
|
|
82
|
+
if (!record) return null;
|
|
83
|
+
|
|
84
|
+
// Soft delete
|
|
85
|
+
record.deletedAt = new Date();
|
|
86
|
+
this.data.set(id, record);
|
|
87
|
+
this.operations.push({ type: 'delete', model, id });
|
|
88
|
+
return record;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
class MockEventBus {
|
|
93
|
+
constructor() {
|
|
94
|
+
this.events = [];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
async publish(eventName, payload) {
|
|
98
|
+
this.events.push({ eventName, payload, timestamp: new Date() });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
getEvents() {
|
|
102
|
+
return this.events;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async function runTests() {
|
|
107
|
+
log('\n🧪 Running Integration Tests for Generated Code\n', BLUE);
|
|
108
|
+
|
|
109
|
+
// Test 1: Check file structure
|
|
110
|
+
log('Test Suite 1: File Structure', BLUE);
|
|
111
|
+
assert(existsSync(join(__dirname, 'services')), 'Services directory exists');
|
|
112
|
+
assert(existsSync(join(__dirname, 'routes')), 'Routes directory exists');
|
|
113
|
+
|
|
114
|
+
// Test 2: Load and instantiate service
|
|
115
|
+
log('\nTest Suite 2: Service Instantiation', BLUE);
|
|
116
|
+
|
|
117
|
+
const db = new MockDatabase();
|
|
118
|
+
const eventBus = new MockEventBus();
|
|
119
|
+
|
|
120
|
+
let ServiceClass;
|
|
121
|
+
let serviceName;
|
|
122
|
+
|
|
123
|
+
// Try to find a service file
|
|
124
|
+
const { readdirSync } = await import('fs');
|
|
125
|
+
const serviceFiles = readdirSync(join(__dirname, 'services')).filter(f => f.endsWith('.service.ts'));
|
|
126
|
+
|
|
127
|
+
if (serviceFiles.length === 0) {
|
|
128
|
+
log(' ⚠️ No service files found to test', YELLOW);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
serviceName = serviceFiles[0].replace('.service.ts', '');
|
|
133
|
+
log(` 📝 Testing service: ${serviceName}`, BLUE);
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
// Note: This requires tsx or ts-node to run TypeScript directly
|
|
137
|
+
// For production testing, compile to JS first
|
|
138
|
+
const servicePath = join(__dirname, 'services', serviceFiles[0]);
|
|
139
|
+
|
|
140
|
+
log(` → Attempting to load service from: ${servicePath}`);
|
|
141
|
+
|
|
142
|
+
// This is a demonstration - actual loading would need proper TS support
|
|
143
|
+
assert(existsSync(servicePath), `Service file exists: ${serviceFiles[0]}`);
|
|
144
|
+
|
|
145
|
+
} catch (error) {
|
|
146
|
+
log(` ⚠️ Service loading requires TypeScript compilation: ${error.message}`, YELLOW);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Test 3: Validate method structure (by reading source)
|
|
150
|
+
log('\nTest Suite 3: v3.3 Feature Detection', BLUE);
|
|
151
|
+
|
|
152
|
+
const { readFileSync } = await import('fs');
|
|
153
|
+
const serviceContent = readFileSync(join(__dirname, 'services', serviceFiles[0]), 'utf-8');
|
|
154
|
+
|
|
155
|
+
// Check for v3.3 features
|
|
156
|
+
assert(
|
|
157
|
+
serviceContent.includes('validate(data'),
|
|
158
|
+
'Service has unified validate() method'
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
assert(
|
|
162
|
+
serviceContent.includes("operation: 'create' | 'update' | 'evolve'"),
|
|
163
|
+
'Validate method accepts operation context'
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
assert(
|
|
167
|
+
serviceContent.includes('this.validate(data,'),
|
|
168
|
+
'CURED operations call validate() internally'
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
assert(
|
|
172
|
+
serviceContent.includes('version mismatch') || serviceContent.includes('version'),
|
|
173
|
+
'Optimistic locking (version checking) present'
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
assert(
|
|
177
|
+
serviceContent.includes('deletedAt: null') || serviceContent.includes('isDeleted:'),
|
|
178
|
+
'Soft delete filtering present'
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
assert(
|
|
182
|
+
serviceContent.includes('eventBus.publish'),
|
|
183
|
+
'Event publishing present'
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// Test 4: Route structure
|
|
187
|
+
log('\nTest Suite 4: Route Structure', BLUE);
|
|
188
|
+
|
|
189
|
+
const routeDirs = readdirSync(join(__dirname, 'routes')).filter(f => {
|
|
190
|
+
const stat = require('fs').statSync(join(__dirname, 'routes', f));
|
|
191
|
+
return stat.isDirectory();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
assert(routeDirs.length > 0, `Found ${routeDirs.length} route directory(ies)`);
|
|
195
|
+
|
|
196
|
+
for (const routeDir of routeDirs) {
|
|
197
|
+
const routeFiles = readdirSync(join(__dirname, 'routes', routeDir));
|
|
198
|
+
|
|
199
|
+
// Check for CURED operations
|
|
200
|
+
const hasCRUD = routeFiles.some(f => ['create', 'retrieve', 'update', 'destroy'].some(op => f.includes(op)));
|
|
201
|
+
assert(hasCRUD, `${routeDir}: Has CURED operation files`);
|
|
202
|
+
|
|
203
|
+
// Check for validate endpoint
|
|
204
|
+
const hasValidate = routeFiles.some(f => f.includes('validate'));
|
|
205
|
+
assert(hasValidate, `${routeDir}: Has unified validate endpoint`);
|
|
206
|
+
|
|
207
|
+
// Should NOT have validate-create or validate-update
|
|
208
|
+
const hasWrongValidate = routeFiles.some(f =>
|
|
209
|
+
f.includes('validate-create') || f.includes('validate-update')
|
|
210
|
+
);
|
|
211
|
+
assert(!hasWrongValidate, `${routeDir}: No separate validate-create/update endpoints`);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Test 5: Mock service execution
|
|
215
|
+
log('\nTest Suite 5: Mock Service Execution', BLUE);
|
|
216
|
+
|
|
217
|
+
// Create a simple mock service to demonstrate functionality
|
|
218
|
+
class MockTaskService {
|
|
219
|
+
constructor(db, eventBus) {
|
|
220
|
+
this.db = db;
|
|
221
|
+
this.eventBus = eventBus;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
validate(data, context) {
|
|
225
|
+
const errors = [];
|
|
226
|
+
|
|
227
|
+
if (context.operation === 'create') {
|
|
228
|
+
if (!data.title) {
|
|
229
|
+
errors.push('Title is required');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return { valid: errors.length === 0, errors };
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
async create(data) {
|
|
237
|
+
const validationResult = this.validate(data, { operation: 'create' });
|
|
238
|
+
if (!validationResult.valid) {
|
|
239
|
+
throw new Error(`Validation failed: ${validationResult.errors.join(', ')}`);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const task = this.db.create('Task', data);
|
|
243
|
+
await this.eventBus.publish('TaskCreated', { taskId: task.id });
|
|
244
|
+
return task;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
async update(id, data) {
|
|
248
|
+
const validationResult = this.validate(data, { operation: 'update' });
|
|
249
|
+
if (!validationResult.valid) {
|
|
250
|
+
throw new Error(`Validation failed: ${validationResult.errors.join(', ')}`);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Version checking
|
|
254
|
+
if (data.version !== undefined) {
|
|
255
|
+
const existing = this.db.findOne('Task', { id });
|
|
256
|
+
if (existing && existing.version !== data.version) {
|
|
257
|
+
throw new Error('Version mismatch: record has been modified');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const task = this.db.update('Task', id, data);
|
|
262
|
+
await this.eventBus.publish('TaskUpdated', { taskId: id });
|
|
263
|
+
return task;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const mockService = new MockTaskService(db, eventBus);
|
|
268
|
+
|
|
269
|
+
// Test create with validation
|
|
270
|
+
try {
|
|
271
|
+
await mockService.create({ title: 'Test Task' });
|
|
272
|
+
assert(true, 'Service.create() executed successfully');
|
|
273
|
+
} catch (error) {
|
|
274
|
+
assert(false, `Service.create() failed: ${error.message}`);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
assert(db.operations.length > 0, 'Database operations were performed');
|
|
278
|
+
assert(eventBus.events.length > 0, 'Events were published');
|
|
279
|
+
|
|
280
|
+
// Test validation failure
|
|
281
|
+
try {
|
|
282
|
+
await mockService.create({});
|
|
283
|
+
assert(false, 'Validation should have failed for empty data');
|
|
284
|
+
} catch (error) {
|
|
285
|
+
assert(error.message.includes('Validation failed'), 'Validation correctly rejected invalid data');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Test optimistic locking
|
|
289
|
+
const task = db.data.values().next().value;
|
|
290
|
+
try {
|
|
291
|
+
await mockService.update(task.id, { title: 'Updated', version: 999 });
|
|
292
|
+
assert(false, 'Version mismatch should have been detected');
|
|
293
|
+
} catch (error) {
|
|
294
|
+
assert(error.message.includes('Version mismatch'), 'Optimistic locking works correctly');
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Summary
|
|
298
|
+
log('\n═══════════════════════════════════════', BLUE);
|
|
299
|
+
log(`Integration Test Summary:`, BLUE);
|
|
300
|
+
log(` ✅ Passed: ${testsPassed}`, GREEN);
|
|
301
|
+
if (testsFailed > 0) {
|
|
302
|
+
log(` ❌ Failed: ${testsFailed}`, RED);
|
|
303
|
+
}
|
|
304
|
+
log(` 📊 Total: ${testsPassed + testsFailed}`, BLUE);
|
|
305
|
+
|
|
306
|
+
if (testsFailed === 0) {
|
|
307
|
+
log('\n🎉 All integration tests passed!', GREEN);
|
|
308
|
+
process.exit(0);
|
|
309
|
+
} else {
|
|
310
|
+
log('\n⚠️ Some tests failed', YELLOW);
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Run tests
|
|
316
|
+
runTests().catch(error => {
|
|
317
|
+
log(`\n❌ Test suite failed: ${error.message}`, RED);
|
|
318
|
+
console.error(error);
|
|
319
|
+
process.exit(1);
|
|
320
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectNameKebab}}-generated-code",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Generated code for {{projectName}} - v3.3 runtime",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "tsc",
|
|
8
|
+
"test": "node test-runner.js",
|
|
9
|
+
"test:integration": "node integration-tests.js",
|
|
10
|
+
"start:dev": "tsx services/index.ts",
|
|
11
|
+
"prisma:generate": "prisma generate",
|
|
12
|
+
"prisma:migrate": "prisma migrate dev",
|
|
13
|
+
"db:setup": "node setup-database.js"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@prisma/client": "^5.0.0",
|
|
17
|
+
"typeorm": "^0.3.17",
|
|
18
|
+
"reflect-metadata": "^0.1.13",
|
|
19
|
+
"fastify": "^4.23.0",
|
|
20
|
+
"express": "^4.18.2",
|
|
21
|
+
"@nestjs/common": "^10.2.0",
|
|
22
|
+
"@nestjs/core": "^10.2.0",
|
|
23
|
+
"@nestjs/platform-express": "^10.2.0",
|
|
24
|
+
"zod": "^3.22.0",
|
|
25
|
+
"better-sqlite3": "^9.0.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^20.0.0",
|
|
29
|
+
"@types/express": "^4.17.17",
|
|
30
|
+
"typescript": "^5.2.0",
|
|
31
|
+
"tsx": "^3.12.0",
|
|
32
|
+
"vitest": "^0.34.0"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Generated Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains documentation and diagrams automatically generated from inferred SpecVerse specifications.
|
|
4
|
+
|
|
5
|
+
## Content Types
|
|
6
|
+
|
|
7
|
+
### Documentation Files
|
|
8
|
+
- **`*-complete-docs.md`**: Complete documentation from AI-inferred specifications
|
|
9
|
+
- **`*-deployed-docs.md`**: Documentation for deployment specifications
|
|
10
|
+
- **`*-deployed-prod-docs.md`**: Production deployment documentation
|
|
11
|
+
|
|
12
|
+
### Diagram Files
|
|
13
|
+
- **`*-complete-diagrams.md`**: UML diagrams (ER, sequence, class) for complete specifications
|
|
14
|
+
- **`*-deployed-diagrams.md`**: Deployment diagrams for development environment
|
|
15
|
+
- **`*-deployed-prod-diagrams.md`**: Deployment diagrams for production environment
|
|
16
|
+
|
|
17
|
+
## Auto-Generation
|
|
18
|
+
|
|
19
|
+
These files are automatically generated when you run:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Generates both specification and documentation
|
|
23
|
+
npm run infer # → creates complete docs + diagrams
|
|
24
|
+
npm run infer:deployment # → creates development deployment docs + diagrams
|
|
25
|
+
npm run infer:deployment:prod # → creates production deployment docs + diagrams
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Manual Generation
|
|
29
|
+
|
|
30
|
+
You can also generate documentation for existing specifications:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Generate docs for specific files
|
|
34
|
+
npm run infer:docs # docs for complete specification
|
|
35
|
+
npm run infer:deployment:docs # docs for development deployment
|
|
36
|
+
npm run infer:deployment:prod:docs # docs for production deployment
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## File Organization
|
|
40
|
+
|
|
41
|
+
Files follow this naming pattern:
|
|
42
|
+
- `{project-name}-complete-docs.md` - Documentation for AI-inferred complete specification
|
|
43
|
+
- `{project-name}-complete-diagrams.md` - UML diagrams for complete specification
|
|
44
|
+
- `{project-name}-deployed-docs.md` - Documentation for development deployment
|
|
45
|
+
- `{project-name}-deployed-diagrams.md` - Deployment diagrams for development
|
|
46
|
+
- `{project-name}-deployed-prod-docs.md` - Documentation for production deployment
|
|
47
|
+
- `{project-name}-deployed-prod-diagrams.md` - Deployment diagrams for production
|
|
48
|
+
|
|
49
|
+
All files are automatically regenerated when you run infer commands.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Dependencies
|
|
2
|
+
node_modules/
|
|
3
|
+
package-lock.json
|
|
4
|
+
yarn.lock
|
|
5
|
+
#pnpm-lock.yaml
|
|
6
|
+
|
|
7
|
+
# Generated files
|
|
8
|
+
generated/
|
|
9
|
+
dist/
|
|
10
|
+
build/
|
|
11
|
+
|
|
12
|
+
# IDE files
|
|
13
|
+
.vscode/
|
|
14
|
+
.idea/
|
|
15
|
+
*.swp
|
|
16
|
+
*.swo
|
|
17
|
+
*~
|
|
18
|
+
|
|
19
|
+
# OS files
|
|
20
|
+
.DS_Store
|
|
21
|
+
Thumbs.db
|
|
22
|
+
|
|
23
|
+
# Logs
|
|
24
|
+
*.log
|
|
25
|
+
logs/
|
|
26
|
+
|
|
27
|
+
# Environment
|
|
28
|
+
.env
|
|
29
|
+
.env.local
|
|
30
|
+
.env.*.local
|
|
31
|
+
|
|
32
|
+
# Temporary files
|
|
33
|
+
tmp/
|
|
34
|
+
temp/
|
|
35
|
+
*.tmp
|
|
36
|
+
|
|
37
|
+
# SpecVerse generated files
|
|
38
|
+
specs/*-complete.specly
|
|
39
|
+
specs/*-enhanced.specly
|
|
40
|
+
specs/*-deployed.specly
|
|
41
|
+
specs/*-deployed-prod.specly
|
|
42
|
+
specs/*-processed.yaml
|
|
43
|
+
docs/diagrams/
|
|
44
|
+
docs/generated/
|
|
45
|
+
|
|
46
|
+
# Database files (for development)
|
|
47
|
+
*.db
|
|
48
|
+
*.sqlite
|
|
49
|
+
*.sqlite3
|
|
50
|
+
dev.db
|
|
51
|
+
|
|
52
|
+
# Test coverage
|
|
53
|
+
coverage/
|
|
54
|
+
.nyc_output/
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Implementation Manifests
|
|
2
|
+
|
|
3
|
+
This directory contains **SpecVerse v3.1 Implementation Manifests** that show how to deploy your component specifications to real infrastructure.
|
|
4
|
+
|
|
5
|
+
## What are Manifests?
|
|
6
|
+
|
|
7
|
+
Manifests bridge the gap between your logical SpecVerse specifications and concrete technology implementations. They define:
|
|
8
|
+
|
|
9
|
+
- **Implementation Types**: How logical components map to specific technologies
|
|
10
|
+
- **Behavior Mappings**: How model behaviors translate to actual code/API calls
|
|
11
|
+
- **Capability Mappings**: How logical capabilities map to implementation types
|
|
12
|
+
- **Communication Channels**: How components communicate in the real deployment
|
|
13
|
+
- **Technology Configuration**: Framework-specific settings and parameters
|
|
14
|
+
|
|
15
|
+
## Available Manifests
|
|
16
|
+
|
|
17
|
+
### `implementation.yaml` ⭐ NEW - v3.3 Code Generation
|
|
18
|
+
- **Purpose**: Technology stack configuration for code generation
|
|
19
|
+
- **Features**: ORM selection, server framework, metadata strategies
|
|
20
|
+
- **Use Case**: Generate production-ready code (services, routes, ORM schemas)
|
|
21
|
+
- **Commands**:
|
|
22
|
+
```bash
|
|
23
|
+
npm run generate:code # Generate all code
|
|
24
|
+
npm run test:generators # Generate and verify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `docker-compose.specly`
|
|
28
|
+
- **Target**: Local development and staging
|
|
29
|
+
- **Technology**: Docker Compose
|
|
30
|
+
- **Database**: SQLite (development-friendly)
|
|
31
|
+
- **Use Case**: Quick local testing and development
|
|
32
|
+
|
|
33
|
+
### `kubernetes.specly`
|
|
34
|
+
- **Target**: Production deployment
|
|
35
|
+
- **Technology**: Kubernetes with operators
|
|
36
|
+
- **Database**: PostgreSQL with high availability
|
|
37
|
+
- **Use Case**: Scalable production deployments
|
|
38
|
+
|
|
39
|
+
## How to Use
|
|
40
|
+
|
|
41
|
+
1. **Choose a manifest** that matches your deployment target
|
|
42
|
+
2. **Customize the configuration** section for your specific needs
|
|
43
|
+
3. **Reference your component** by updating the component source
|
|
44
|
+
4. **Deploy using the specified tools** (docker-compose, kubectl, etc.)
|
|
45
|
+
|
|
46
|
+
## Extending Manifests
|
|
47
|
+
|
|
48
|
+
You can create additional manifests for other technologies:
|
|
49
|
+
|
|
50
|
+
- **Cloud Providers**: AWS EKS, GCP GKE, Azure AKS
|
|
51
|
+
- **Serverless**: AWS Lambda, Vercel, Netlify
|
|
52
|
+
- **Traditional**: VM-based deployments, bare metal
|
|
53
|
+
- **Container Platforms**: OpenShift, Rancher, Docker Swarm
|
|
54
|
+
|
|
55
|
+
## Commands
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Validate a manifest
|
|
59
|
+
specverse validate manifests/docker-compose.specly
|
|
60
|
+
|
|
61
|
+
# Process a manifest with component context
|
|
62
|
+
specverse gen yaml manifests/kubernetes.specly
|
|
63
|
+
|
|
64
|
+
# Generate deployment documentation
|
|
65
|
+
specverse gen docs manifests/kubernetes.specly
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Learn More
|
|
69
|
+
|
|
70
|
+
- **SpecVerse Manifests Documentation**: See the main docs for comprehensive manifest features
|
|
71
|
+
- **Examples**: Check `examples/06-deploy/` for more complex manifest patterns
|
|
72
|
+
- **Best Practices**: Review the `aiInstructions` in each manifest for implementation guidance
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Docker Compose Implementation Manifest
|
|
2
|
+
# SpecVerse v3.3 manifest specification for Docker Compose deployment
|
|
3
|
+
|
|
4
|
+
manifests:
|
|
5
|
+
DockerComposeManifest:
|
|
6
|
+
specVersion: "3.3.0"
|
|
7
|
+
name: "{{componentName}}DockerComposeManifest"
|
|
8
|
+
version: "1.0.0"
|
|
9
|
+
description: "Docker Compose implementation manifest for {{projectName}}"
|
|
10
|
+
|
|
11
|
+
# v3.3: Deployment reference (REQUIRED)
|
|
12
|
+
deployment:
|
|
13
|
+
deploymentSource: "./specs/main.specly"
|
|
14
|
+
deploymentName: "development"
|
|
15
|
+
|
|
16
|
+
# v3.3: Default technology mappings
|
|
17
|
+
defaultMappings:
|
|
18
|
+
storage: "SQLite"
|
|
19
|
+
controller: "DockerNodeApp"
|
|
20
|
+
|
|
21
|
+
# v3.3: Capability to implementation factory mappings
|
|
22
|
+
capabilityMappings:
|
|
23
|
+
- capability: "api.*"
|
|
24
|
+
instanceFactory: "DockerWebApp"
|
|
25
|
+
|
|
26
|
+
- capability: "database.*"
|
|
27
|
+
instanceFactory: "DockerDatabase"
|
|
28
|
+
|
|
29
|
+
# v3.3: Platform-specific configuration
|
|
30
|
+
configuration:
|
|
31
|
+
# Docker Compose specific settings
|
|
32
|
+
composeVersion: "3.8"
|
|
33
|
+
|
|
34
|
+
networks:
|
|
35
|
+
default:
|
|
36
|
+
driver: "bridge"
|
|
37
|
+
|
|
38
|
+
volumes:
|
|
39
|
+
app_data:
|
|
40
|
+
driver: "local"
|
|
41
|
+
|
|
42
|
+
# Implementation type definitions
|
|
43
|
+
implementationFactories:
|
|
44
|
+
DockerWebApp:
|
|
45
|
+
type: "controller"
|
|
46
|
+
technology: "docker"
|
|
47
|
+
framework: "compose"
|
|
48
|
+
config:
|
|
49
|
+
image: "node:18-alpine"
|
|
50
|
+
build:
|
|
51
|
+
context: "."
|
|
52
|
+
dockerfile: "Dockerfile"
|
|
53
|
+
ports:
|
|
54
|
+
- "3000:3000"
|
|
55
|
+
environment:
|
|
56
|
+
NODE_ENV: "development"
|
|
57
|
+
DATABASE_URL: "sqlite:./data/app.db"
|
|
58
|
+
volumes:
|
|
59
|
+
- "./src:/app/src"
|
|
60
|
+
- "./data:/app/data"
|
|
61
|
+
restart: "unless-stopped"
|
|
62
|
+
|
|
63
|
+
DockerDatabase:
|
|
64
|
+
type: "database"
|
|
65
|
+
technology: "sqlite"
|
|
66
|
+
framework: "docker"
|
|
67
|
+
config:
|
|
68
|
+
image: "alpine:latest"
|
|
69
|
+
volumes:
|
|
70
|
+
- "./data:/data"
|
|
71
|
+
command: "tail -f /dev/null"
|
|
72
|
+
|
|
73
|
+
# Namespace configuration
|
|
74
|
+
namespace:
|
|
75
|
+
strategy: "single"
|
|
76
|
+
name: "{{projectNameKebab}}"
|
|
77
|
+
description: "Main application namespace"
|
|
78
|
+
isolation: "permissive"
|
|
79
|
+
|
|
80
|
+
# AI implementation instructions
|
|
81
|
+
aiInstructions: |
|
|
82
|
+
When implementing this Docker Compose deployment:
|
|
83
|
+
|
|
84
|
+
1. **Development Focus**: This manifest is optimized for local development
|
|
85
|
+
2. **Live Reload**: Source code is mounted for immediate changes
|
|
86
|
+
3. **Data Persistence**: SQLite database with volume mounting
|
|
87
|
+
4. **Port Mapping**: Application accessible on localhost:3000
|
|
88
|
+
5. **Environment**: Configure environment variables in docker-compose.yml
|
|
89
|
+
6. **Networking**: Uses default bridge network for container communication
|
|
90
|
+
7. **Database**: Simple SQLite setup for development (upgrade to PostgreSQL for production)
|
|
91
|
+
8. **Restart Policy**: Containers restart unless manually stopped
|