@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,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic Package.json Generator
|
|
3
|
+
*
|
|
4
|
+
* Aggregates requirements from all implementation types in manifest
|
|
5
|
+
* and generates a complete package.json file
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
9
|
+
|
|
10
|
+
export default function generatePackageJson(context: TemplateContext): string {
|
|
11
|
+
const { spec, manifest, configuration } = context;
|
|
12
|
+
|
|
13
|
+
// Check if we're in monorepo mode
|
|
14
|
+
const outputStructure = configuration?.outputStructure || 'monorepo';
|
|
15
|
+
const isMonorepo = outputStructure === 'monorepo';
|
|
16
|
+
|
|
17
|
+
// Aggregate requirements from all implementation types
|
|
18
|
+
const aggregated = aggregateRequirements(context.instanceFactories || context.implementationTypes || []);
|
|
19
|
+
|
|
20
|
+
const pkg: any = {
|
|
21
|
+
name: (spec.metadata?.component || 'specverse-app')
|
|
22
|
+
.toLowerCase()
|
|
23
|
+
.replace(/\s+/g, '-'),
|
|
24
|
+
version: spec.metadata?.version || '1.0.0',
|
|
25
|
+
description: spec.metadata?.description || '',
|
|
26
|
+
private: true,
|
|
27
|
+
type: 'module'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Add workspaces for monorepo
|
|
31
|
+
if (isMonorepo) {
|
|
32
|
+
const frontendDir = configuration?.frontendDir || 'frontend';
|
|
33
|
+
const backendDir = configuration?.backendDir || 'backend';
|
|
34
|
+
|
|
35
|
+
pkg.workspaces = [backendDir, frontendDir];
|
|
36
|
+
|
|
37
|
+
// Add convenience scripts for monorepo
|
|
38
|
+
pkg.scripts = {
|
|
39
|
+
// Build all workspaces
|
|
40
|
+
'build': 'npm run build --workspaces',
|
|
41
|
+
'build:backend': `npm run build --workspace=${backendDir}`,
|
|
42
|
+
'build:frontend': `npm run build --workspace=${frontendDir}`,
|
|
43
|
+
|
|
44
|
+
// Production
|
|
45
|
+
'start': `npm run start --workspace=${backendDir}`,
|
|
46
|
+
|
|
47
|
+
// Development
|
|
48
|
+
'dev': 'npm run dev --workspaces',
|
|
49
|
+
'dev:backend': `npm run dev --workspace=${backendDir}`,
|
|
50
|
+
'dev:frontend': `npm run dev --workspace=${frontendDir}`,
|
|
51
|
+
|
|
52
|
+
// Testing
|
|
53
|
+
'test': 'npm test --workspaces',
|
|
54
|
+
'test:backend': `npm test --workspace=${backendDir}`,
|
|
55
|
+
'test:frontend': `npm test --workspace=${frontendDir}`,
|
|
56
|
+
|
|
57
|
+
// Database management (backend)
|
|
58
|
+
'db:setup': `npm run db:setup --workspace=${backendDir}`,
|
|
59
|
+
'db:generate': `npm run db:generate --workspace=${backendDir}`,
|
|
60
|
+
'db:push': `npm run db:push --workspace=${backendDir}`,
|
|
61
|
+
'db:migrate': `npm run db:migrate --workspace=${backendDir}`,
|
|
62
|
+
'db:studio': `npm run db:studio --workspace=${backendDir}`,
|
|
63
|
+
|
|
64
|
+
// Linting
|
|
65
|
+
'lint': 'npm run lint --workspaces',
|
|
66
|
+
'lint:fix': 'npm run lint:fix --workspaces'
|
|
67
|
+
};
|
|
68
|
+
} else {
|
|
69
|
+
// Standalone mode - merge all scripts
|
|
70
|
+
pkg.scripts = {
|
|
71
|
+
...aggregated.scripts,
|
|
72
|
+
// Ensure we have build script if TypeScript
|
|
73
|
+
...(aggregated.usesTypeScript && !aggregated.scripts.build && {
|
|
74
|
+
build: 'tsc'
|
|
75
|
+
}),
|
|
76
|
+
// Add database setup script
|
|
77
|
+
'db:setup': 'node -e "const{execSync:e}=require(\'child_process\');const{readFileSync:r}=require(\'fs\');try{const d=r(\'.env\',\'utf8\').match(/DATABASE_URL=.*\\/([^?\\"]+)/)?.[1];if(!d)throw new Error(\'DATABASE_URL not found\');console.log(\'Creating database:\',d);try{e(\'createdb \'+d)}catch(err){const errMsg=err.stderr?err.stderr.toString():err.message;if(errMsg.includes(\'already exists\')){console.log(\'✅ Database already exists\')}else throw err}console.log(\'✅ Database created successfully\')}catch(err){console.error(\'❌ Database setup failed:\',err.message);process.exit(1)}"',
|
|
78
|
+
// Add test script if not provided by implementation types
|
|
79
|
+
...(!aggregated.scripts.test && {
|
|
80
|
+
test: 'echo "Error: no test specified" && exit 1'
|
|
81
|
+
})
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// In standalone mode, include dependencies
|
|
85
|
+
pkg.dependencies = aggregated.dependencies;
|
|
86
|
+
pkg.devDependencies = {
|
|
87
|
+
...aggregated.devDependencies,
|
|
88
|
+
// Ensure TypeScript is present if needed
|
|
89
|
+
...(aggregated.usesTypeScript && !aggregated.devDependencies.typescript && {
|
|
90
|
+
typescript: '^5.3.0',
|
|
91
|
+
'@types/node': '^20.0.0'
|
|
92
|
+
})
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
// TypeScript-specific fields
|
|
96
|
+
if (aggregated.usesTypeScript) {
|
|
97
|
+
pkg.main = 'dist/main.js';
|
|
98
|
+
pkg.types = 'dist/main.d.ts';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Add common Node.js fields
|
|
103
|
+
pkg.engines = {
|
|
104
|
+
node: '>=18.0.0'
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
return JSON.stringify(pkg, null, 2);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Aggregate requirements from all implementation types
|
|
112
|
+
*/
|
|
113
|
+
function aggregateRequirements(implementationTypes: any[]) {
|
|
114
|
+
const result = {
|
|
115
|
+
dependencies: {} as Record<string, string>,
|
|
116
|
+
devDependencies: {} as Record<string, string>,
|
|
117
|
+
scripts: {} as Record<string, string>,
|
|
118
|
+
environment: [] as any[],
|
|
119
|
+
usesTypeScript: false,
|
|
120
|
+
usesDocker: false
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
if (!implementationTypes || implementationTypes.length === 0) {
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Iterate through all implementation types
|
|
128
|
+
for (const implType of implementationTypes) {
|
|
129
|
+
// Handle dependencies from the top level (v3.3 format)
|
|
130
|
+
if (implType.dependencies) {
|
|
131
|
+
// Runtime dependencies
|
|
132
|
+
if (implType.dependencies.runtime && Array.isArray(implType.dependencies.runtime)) {
|
|
133
|
+
for (const dep of implType.dependencies.runtime) {
|
|
134
|
+
if (dep.name && dep.version) {
|
|
135
|
+
result.dependencies[dep.name] = dep.version;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Dev dependencies
|
|
140
|
+
if (implType.dependencies.dev && Array.isArray(implType.dependencies.dev)) {
|
|
141
|
+
for (const dep of implType.dependencies.dev) {
|
|
142
|
+
if (dep.name && dep.version) {
|
|
143
|
+
result.devDependencies[dep.name] = dep.version;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Also handle old requirements.dependencies.npm structure for backwards compatibility
|
|
150
|
+
const requirements = implType.requirements;
|
|
151
|
+
if (requirements) {
|
|
152
|
+
if (requirements.dependencies?.npm) {
|
|
153
|
+
Object.assign(result.dependencies, requirements.dependencies.npm.dependencies || {});
|
|
154
|
+
Object.assign(result.devDependencies, requirements.dependencies.npm.devDependencies || {});
|
|
155
|
+
Object.assign(result.scripts, requirements.dependencies.npm.scripts || {});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Collect environment variables
|
|
159
|
+
if (requirements.environment) {
|
|
160
|
+
result.environment.push(...requirements.environment);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Detect TypeScript usage
|
|
165
|
+
if (implType.technology?.language === 'typescript') {
|
|
166
|
+
result.usesTypeScript = true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Detect Docker usage
|
|
170
|
+
if (implType.capabilities?.provides?.includes('container.dev')) {
|
|
171
|
+
result.usesDocker = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic README Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates README based on spec and manifest choices
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
8
|
+
|
|
9
|
+
export default function generateReadme(context: TemplateContext): string {
|
|
10
|
+
const { spec, manifest } = context;
|
|
11
|
+
|
|
12
|
+
const sections: string[] = [];
|
|
13
|
+
|
|
14
|
+
// Title and description
|
|
15
|
+
sections.push(`# ${spec.metadata?.component || 'SpecVerse Application'}`);
|
|
16
|
+
sections.push('');
|
|
17
|
+
sections.push(spec.metadata?.description || 'Generated with SpecVerse');
|
|
18
|
+
sections.push('');
|
|
19
|
+
|
|
20
|
+
// Tech stack (inferred from manifest)
|
|
21
|
+
const techStack = inferTechStack(manifest);
|
|
22
|
+
if (techStack.length > 0) {
|
|
23
|
+
sections.push('## Tech Stack');
|
|
24
|
+
sections.push('');
|
|
25
|
+
for (const tech of techStack) {
|
|
26
|
+
sections.push(`- **${tech.category}**: ${tech.items.join(', ')}`);
|
|
27
|
+
}
|
|
28
|
+
sections.push('');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Prerequisites
|
|
32
|
+
sections.push('## Getting Started');
|
|
33
|
+
sections.push('');
|
|
34
|
+
sections.push('### Prerequisites');
|
|
35
|
+
sections.push('');
|
|
36
|
+
sections.push('- Node.js 18+');
|
|
37
|
+
sections.push('- npm or yarn');
|
|
38
|
+
|
|
39
|
+
if (usesPrisma(manifest)) {
|
|
40
|
+
sections.push('- PostgreSQL (or your database of choice)');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
sections.push('');
|
|
44
|
+
|
|
45
|
+
// Installation
|
|
46
|
+
sections.push('### Installation');
|
|
47
|
+
sections.push('');
|
|
48
|
+
sections.push('```bash');
|
|
49
|
+
sections.push('npm install');
|
|
50
|
+
sections.push('```');
|
|
51
|
+
sections.push('');
|
|
52
|
+
|
|
53
|
+
// Environment setup
|
|
54
|
+
const hasEnvVars = manifestHasEnvVars(manifest);
|
|
55
|
+
if (hasEnvVars) {
|
|
56
|
+
sections.push('### Environment Setup');
|
|
57
|
+
sections.push('');
|
|
58
|
+
sections.push('```bash');
|
|
59
|
+
sections.push('cp .env.example .env');
|
|
60
|
+
sections.push('```');
|
|
61
|
+
sections.push('');
|
|
62
|
+
sections.push('Configure your environment variables in `.env`');
|
|
63
|
+
sections.push('');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Database setup if using Prisma
|
|
67
|
+
if (usesPrisma(manifest)) {
|
|
68
|
+
sections.push('### Database Setup');
|
|
69
|
+
sections.push('');
|
|
70
|
+
sections.push('**Important**: Create the database before running Prisma commands.');
|
|
71
|
+
sections.push('');
|
|
72
|
+
sections.push('```bash');
|
|
73
|
+
sections.push('# Create database (PostgreSQL example)');
|
|
74
|
+
sections.push('createdb your_database_name');
|
|
75
|
+
sections.push('');
|
|
76
|
+
sections.push('# Or using psql:');
|
|
77
|
+
sections.push('# psql postgres');
|
|
78
|
+
sections.push('# CREATE DATABASE your_database_name;');
|
|
79
|
+
sections.push('# \\q');
|
|
80
|
+
sections.push('');
|
|
81
|
+
sections.push('# Update DATABASE_URL in .env with your database name');
|
|
82
|
+
sections.push('# DATABASE_URL="postgresql://localhost:5432/your_database_name"');
|
|
83
|
+
sections.push('');
|
|
84
|
+
sections.push('# Generate Prisma client');
|
|
85
|
+
sections.push('npm run db:generate');
|
|
86
|
+
sections.push('');
|
|
87
|
+
sections.push('# Push schema to database (for development)');
|
|
88
|
+
sections.push('npm run db:push');
|
|
89
|
+
sections.push('');
|
|
90
|
+
sections.push('# Or use migrations (for production)');
|
|
91
|
+
sections.push('npm run db:migrate');
|
|
92
|
+
sections.push('```');
|
|
93
|
+
sections.push('');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Development
|
|
97
|
+
sections.push('### Development');
|
|
98
|
+
sections.push('');
|
|
99
|
+
sections.push('```bash');
|
|
100
|
+
sections.push('npm run dev');
|
|
101
|
+
sections.push('```');
|
|
102
|
+
sections.push('');
|
|
103
|
+
|
|
104
|
+
// Production
|
|
105
|
+
sections.push('### Production Build');
|
|
106
|
+
sections.push('');
|
|
107
|
+
sections.push('```bash');
|
|
108
|
+
sections.push('npm run build');
|
|
109
|
+
sections.push('npm start');
|
|
110
|
+
sections.push('```');
|
|
111
|
+
sections.push('');
|
|
112
|
+
|
|
113
|
+
// API Documentation
|
|
114
|
+
if (hasRestAPI(manifest)) {
|
|
115
|
+
sections.push('## API');
|
|
116
|
+
sections.push('');
|
|
117
|
+
sections.push('The API server runs on `http://localhost:${PORT}` (default: 3000)');
|
|
118
|
+
sections.push('');
|
|
119
|
+
|
|
120
|
+
// List controllers if present
|
|
121
|
+
if (spec.controllers && spec.controllers.length > 0) {
|
|
122
|
+
sections.push('### Endpoints');
|
|
123
|
+
sections.push('');
|
|
124
|
+
for (const controller of spec.controllers) {
|
|
125
|
+
sections.push(`- **${controller.name}**: \`${controller.basePath || '/api'}\``);
|
|
126
|
+
}
|
|
127
|
+
sections.push('');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Generated notice
|
|
132
|
+
sections.push('---');
|
|
133
|
+
sections.push('');
|
|
134
|
+
sections.push('_Generated with [SpecVerse](https://github.com/specverse/specverse-lang)_');
|
|
135
|
+
|
|
136
|
+
return sections.join('\n');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function inferTechStack(manifest: any): Array<{category: string, items: string[]}> {
|
|
140
|
+
const stack: Array<{category: string, items: string[]}> = [];
|
|
141
|
+
|
|
142
|
+
if (!manifest || !manifest.capabilityMappings) {
|
|
143
|
+
return stack;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Runtime
|
|
147
|
+
stack.push({
|
|
148
|
+
category: 'Runtime',
|
|
149
|
+
items: ['Node.js', 'TypeScript']
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// Framework - extract from capability mapping
|
|
153
|
+
const apiMapping = manifest.capabilityMappings.find((m: any) =>
|
|
154
|
+
m.capability === 'api.rest'
|
|
155
|
+
);
|
|
156
|
+
if (apiMapping) {
|
|
157
|
+
stack.push({
|
|
158
|
+
category: 'Web Framework',
|
|
159
|
+
items: [apiMapping.instanceFactory]
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// ORM - extract from capability mapping
|
|
164
|
+
const ormMapping = manifest.capabilityMappings.find((m: any) =>
|
|
165
|
+
m.capability === 'orm.client' || m.capability === 'orm.schema'
|
|
166
|
+
);
|
|
167
|
+
if (ormMapping) {
|
|
168
|
+
stack.push({
|
|
169
|
+
category: 'ORM',
|
|
170
|
+
items: [ormMapping.instanceFactory]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return stack;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function usesPrisma(manifest: any): boolean {
|
|
178
|
+
if (!manifest || !manifest.capabilityMappings) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return manifest.capabilityMappings.some((m: any) =>
|
|
183
|
+
m.instanceFactory?.toLowerCase().includes('prisma')
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function hasRestAPI(manifest: any): boolean {
|
|
188
|
+
if (!manifest || !manifest.capabilityMappings) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return manifest.capabilityMappings.some((m: any) =>
|
|
193
|
+
m.capability === 'api.rest'
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function manifestHasEnvVars(manifest: any): boolean {
|
|
198
|
+
// In v3.3, we always assume there are env vars if we have database or server config
|
|
199
|
+
if (!manifest || !manifest.capabilityMappings) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Check if there are database or API capabilities (they typically need env vars)
|
|
204
|
+
return manifest.capabilityMappings.some((m: any) =>
|
|
205
|
+
m.capability === 'storage.database' || m.capability === 'api.rest'
|
|
206
|
+
);
|
|
207
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic TSConfig Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript configuration based on manifest choices
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
8
|
+
|
|
9
|
+
export default function generateTsConfig(context: TemplateContext): string {
|
|
10
|
+
const { manifest, spec } = context;
|
|
11
|
+
|
|
12
|
+
// Extract TypeScript options from implementation types
|
|
13
|
+
const mergedOptions = extractTsConfigOptions(context.implementationTypes || []);
|
|
14
|
+
|
|
15
|
+
// Detect if we're using React - check both implementation types AND if we have views in the spec
|
|
16
|
+
const hasViews = spec && (spec.views || (Array.isArray(spec.views) && spec.views.length > 0));
|
|
17
|
+
const usesReact = hasViews && (context.implementationTypes || []).some((implType: any) =>
|
|
18
|
+
implType.capabilities?.provides?.includes('ui.components') &&
|
|
19
|
+
implType.technology?.framework === 'react'
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
// Base tsconfig for backend code
|
|
23
|
+
const tsconfig = {
|
|
24
|
+
compilerOptions: {
|
|
25
|
+
// Defaults
|
|
26
|
+
target: 'ES2022',
|
|
27
|
+
module: 'ESNext',
|
|
28
|
+
moduleResolution: 'node',
|
|
29
|
+
lib: ['ES2022'],
|
|
30
|
+
outDir: './dist',
|
|
31
|
+
rootDir: './src',
|
|
32
|
+
|
|
33
|
+
// Strict mode
|
|
34
|
+
strict: true,
|
|
35
|
+
esModuleInterop: true,
|
|
36
|
+
skipLibCheck: true,
|
|
37
|
+
forceConsistentCasingInFileNames: true,
|
|
38
|
+
|
|
39
|
+
// Module resolution
|
|
40
|
+
resolveJsonModule: true,
|
|
41
|
+
allowSyntheticDefaultImports: true,
|
|
42
|
+
|
|
43
|
+
// Output
|
|
44
|
+
declaration: true,
|
|
45
|
+
declarationMap: true,
|
|
46
|
+
sourceMap: true,
|
|
47
|
+
|
|
48
|
+
// Merge options from implementation types
|
|
49
|
+
...mergedOptions
|
|
50
|
+
},
|
|
51
|
+
include: usesReact ? ['src/**/*.ts'] : ['src/**/*'], // Exclude .tsx files if React is used
|
|
52
|
+
exclude: usesReact
|
|
53
|
+
? ['node_modules', 'dist', '**/*.test.ts', '**/*.spec.ts', 'src/components/**', 'src/hooks/**', 'src/types/**'] // Exclude React-specific dirs
|
|
54
|
+
: ['node_modules', 'dist', '**/*.test.ts', '**/*.spec.ts'],
|
|
55
|
+
...(usesReact && {
|
|
56
|
+
references: [{ path: './tsconfig.react.json' }] // Reference React config
|
|
57
|
+
})
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return JSON.stringify(tsconfig, null, 2);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function extractTsConfigOptions(implementationTypes: any[]): any {
|
|
64
|
+
const options: any = {};
|
|
65
|
+
|
|
66
|
+
if (!implementationTypes || implementationTypes.length === 0) {
|
|
67
|
+
return options;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
for (const implType of implementationTypes) {
|
|
71
|
+
// Access from generic configuration.tsconfig structure
|
|
72
|
+
if (implType.requirements?.configuration?.tsconfig?.compilerOptions) {
|
|
73
|
+
Object.assign(options, implType.requirements.configuration.tsconfig.compilerOptions);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return options;
|
|
78
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React TSConfig Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript configuration for React components with bundler module resolution
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
8
|
+
|
|
9
|
+
export default function generateReactTsConfig(context: TemplateContext): string {
|
|
10
|
+
const tsconfigReact = {
|
|
11
|
+
extends: './tsconfig.json',
|
|
12
|
+
compilerOptions: {
|
|
13
|
+
// React/Vite specific settings
|
|
14
|
+
moduleResolution: 'bundler',
|
|
15
|
+
lib: ['ES2022', 'DOM', 'DOM.Iterable'],
|
|
16
|
+
jsx: 'react-jsx',
|
|
17
|
+
jsxImportSource: 'react',
|
|
18
|
+
types: ['vite/client'],
|
|
19
|
+
|
|
20
|
+
// Allow importing .ts/.tsx files with extensions
|
|
21
|
+
allowImportingTsExtensions: true,
|
|
22
|
+
|
|
23
|
+
// Project reference settings
|
|
24
|
+
composite: true,
|
|
25
|
+
outDir: './dist/react'
|
|
26
|
+
},
|
|
27
|
+
include: ['src/**/*.tsx', 'src/**/*.ts'],
|
|
28
|
+
exclude: [
|
|
29
|
+
'node_modules',
|
|
30
|
+
'dist',
|
|
31
|
+
'**/*.test.ts',
|
|
32
|
+
'**/*.spec.ts',
|
|
33
|
+
'src/main.ts', // Backend entry point
|
|
34
|
+
'src/controllers/**', // Backend controllers
|
|
35
|
+
'src/routes/**', // Backend routes
|
|
36
|
+
'src/services/**' // Backend services (if any)
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
return JSON.stringify(tsconfigReact, null, 2);
|
|
41
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
name: PythonSDK
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
category: view
|
|
4
|
+
description: "Python SDK generator for consuming REST APIs with async support and type hints"
|
|
5
|
+
|
|
6
|
+
metadata:
|
|
7
|
+
author: "SpecVerse Team"
|
|
8
|
+
license: "MIT"
|
|
9
|
+
tags: [python, sdk, client, rest-api, async]
|
|
10
|
+
|
|
11
|
+
compatibility:
|
|
12
|
+
specverse: "^3.3.0"
|
|
13
|
+
python: ">=3.8"
|
|
14
|
+
|
|
15
|
+
capabilities:
|
|
16
|
+
provides:
|
|
17
|
+
- "sdk.python"
|
|
18
|
+
- "client.rest.async"
|
|
19
|
+
requires:
|
|
20
|
+
- "api.rest"
|
|
21
|
+
- "api.rest.crud"
|
|
22
|
+
|
|
23
|
+
technology:
|
|
24
|
+
runtime: "python"
|
|
25
|
+
language: "python"
|
|
26
|
+
framework: "native"
|
|
27
|
+
httpClient: "aiohttp"
|
|
28
|
+
|
|
29
|
+
dependencies:
|
|
30
|
+
runtime:
|
|
31
|
+
- name: "aiohttp"
|
|
32
|
+
version: "^3.9.0"
|
|
33
|
+
- name: "pydantic"
|
|
34
|
+
version: "^2.0.0"
|
|
35
|
+
dev:
|
|
36
|
+
- name: "mypy"
|
|
37
|
+
version: "^1.7.0"
|
|
38
|
+
- name: "pytest"
|
|
39
|
+
version: "^7.4.0"
|
|
40
|
+
- name: "pytest-asyncio"
|
|
41
|
+
version: "^0.21.0"
|
|
42
|
+
|
|
43
|
+
codeTemplates:
|
|
44
|
+
sdk:
|
|
45
|
+
engine: typescript
|
|
46
|
+
generator: "libs/instance-factories/sdks/templates/python/sdk-generator.ts"
|
|
47
|
+
outputPattern: "sdk-python/"
|
|
48
|
+
|
|
49
|
+
configuration:
|
|
50
|
+
packageName: "specverse_client"
|
|
51
|
+
packageVersion: "1.0.0"
|
|
52
|
+
includeAuth: true
|
|
53
|
+
includeRetry: true
|
|
54
|
+
includeAsync: true
|
|
55
|
+
timeout: 30000
|
|
56
|
+
retries: 3
|
|
57
|
+
|
|
58
|
+
# NOTE: This implementation type wraps the existing generate-sdk-python.js script
|
|
59
|
+
# TODO: Future enhancement - Convert generate-sdk-python.js to native TypeScript template generator
|
|
60
|
+
# The current script is 1000+ lines and generates a complete Python package structure.
|
|
61
|
+
# Converting to native templates would require breaking it into multiple template files:
|
|
62
|
+
# - client-generator.ts (main async client class)
|
|
63
|
+
# - resource-generator.ts (per-controller resource classes)
|
|
64
|
+
# - types-generator.ts (Pydantic models)
|
|
65
|
+
# - errors-generator.ts (exception classes)
|
|
66
|
+
# - package-generator.ts (setup.py, requirements.txt)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python SDK Generator Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing generate-sdk-python.js script for use with the
|
|
5
|
+
* implementation types system.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This is a wrapper around scripts/generate-sdk-python.js
|
|
8
|
+
* TODO: Convert generate-sdk-python.js to native TypeScript template generator
|
|
9
|
+
* See python-sdk.yaml for conversion notes.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
13
|
+
import { generatePythonSDK } from '../../../../../scripts/generate-sdk-python.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Generate Python SDK by delegating to the existing generator
|
|
17
|
+
*/
|
|
18
|
+
export default function generateSDK(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
|
+
packageName: config.packageName || 'specverse_client',
|
|
30
|
+
packageVersion: config.packageVersion || '1.0.0',
|
|
31
|
+
includeAuth: config.includeAuth !== false,
|
|
32
|
+
includeRetry: config.includeRetry !== false,
|
|
33
|
+
includeAsync: config.includeAsync !== false,
|
|
34
|
+
timeout: config.timeout || 30000,
|
|
35
|
+
retries: config.retries || 3
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Call the existing generator
|
|
39
|
+
const result = generatePythonSDK(spec, outputDir || './sdk-python', options);
|
|
40
|
+
|
|
41
|
+
// Return summary information
|
|
42
|
+
return JSON.stringify({
|
|
43
|
+
message: 'Python SDK generated successfully',
|
|
44
|
+
packageName: result.packageName,
|
|
45
|
+
resourceCount: result.resourceCount,
|
|
46
|
+
endpointCount: result.endpointCount,
|
|
47
|
+
outputDir: result.outputDir,
|
|
48
|
+
files: result.files
|
|
49
|
+
}, null, 2);
|
|
50
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript SDK Generator Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps the existing generate-sdk-typescript.js script for use with the
|
|
5
|
+
* implementation types system.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This is a wrapper around scripts/generate-sdk-typescript.js
|
|
8
|
+
* TODO: Convert generate-sdk-typescript.js to native TypeScript template generator
|
|
9
|
+
* See typescript-sdk.yaml for conversion notes.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { TemplateContext } from '@specverse/engine-realize';
|
|
13
|
+
import { generateTypeScriptSDK } from '../../../../../scripts/generate-sdk-typescript.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Generate TypeScript SDK by delegating to the existing generator
|
|
17
|
+
*/
|
|
18
|
+
export default function generateSDK(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
|
+
packageName: config.packageName || '@specverse/sdk',
|
|
30
|
+
packageVersion: config.packageVersion || '1.0.0',
|
|
31
|
+
includeAuth: config.includeAuth !== false,
|
|
32
|
+
includeRetry: config.includeRetry !== false,
|
|
33
|
+
timeout: config.timeout || 30000,
|
|
34
|
+
retries: config.retries || 3
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Call the existing generator
|
|
38
|
+
const result = generateTypeScriptSDK(spec, outputDir || './sdk-typescript', options);
|
|
39
|
+
|
|
40
|
+
// Return summary information
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
message: 'TypeScript SDK generated successfully',
|
|
43
|
+
packageName: result.packageName,
|
|
44
|
+
resourceCount: result.resourceCount,
|
|
45
|
+
endpointCount: result.endpointCount,
|
|
46
|
+
outputDir: result.outputDir,
|
|
47
|
+
files: result.files
|
|
48
|
+
}, null, 2);
|
|
49
|
+
}
|