@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,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Engine Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages multiple template engines and provides a unified
|
|
5
|
+
* interface for rendering templates.
|
|
6
|
+
*/
|
|
7
|
+
import type { TemplateEngine, CodeTemplate, TemplateContext } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Engine registry configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface EngineRegistryConfig {
|
|
12
|
+
/** Base directory for resolving template paths */
|
|
13
|
+
baseDir?: string;
|
|
14
|
+
/** Enable caching of loaded modules */
|
|
15
|
+
enableCache?: boolean;
|
|
16
|
+
/** Custom engine implementations */
|
|
17
|
+
customEngines?: Map<string, TemplateEngine>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Engine not found error
|
|
21
|
+
*/
|
|
22
|
+
export declare class EngineNotFoundError extends Error {
|
|
23
|
+
engineType: string;
|
|
24
|
+
constructor(engineType: string);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Template engine registry
|
|
28
|
+
*/
|
|
29
|
+
export declare class TemplateEngineRegistry {
|
|
30
|
+
private engines;
|
|
31
|
+
private config;
|
|
32
|
+
constructor(config?: EngineRegistryConfig);
|
|
33
|
+
/**
|
|
34
|
+
* Register default built-in engines
|
|
35
|
+
*/
|
|
36
|
+
private registerDefaultEngines;
|
|
37
|
+
/**
|
|
38
|
+
* Register a template engine
|
|
39
|
+
*/
|
|
40
|
+
register(type: string, engine: TemplateEngine): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get a template engine by type
|
|
43
|
+
*/
|
|
44
|
+
get(type: string): TemplateEngine;
|
|
45
|
+
/**
|
|
46
|
+
* Check if an engine type is registered
|
|
47
|
+
*/
|
|
48
|
+
has(type: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Get all registered engine types
|
|
51
|
+
*/
|
|
52
|
+
getRegisteredTypes(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Render a template using the appropriate engine
|
|
55
|
+
*/
|
|
56
|
+
render(template: CodeTemplate, context: TemplateContext, options?: {
|
|
57
|
+
basePath?: string;
|
|
58
|
+
}): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Render multiple templates in parallel
|
|
61
|
+
*/
|
|
62
|
+
renderMany(templates: Array<{
|
|
63
|
+
template: CodeTemplate;
|
|
64
|
+
context: TemplateContext;
|
|
65
|
+
}>): Promise<string[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Clear all engine caches
|
|
68
|
+
*/
|
|
69
|
+
clearCaches(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Get statistics about registered engines
|
|
72
|
+
*/
|
|
73
|
+
getStats(): {
|
|
74
|
+
registeredEngines: string[];
|
|
75
|
+
engineStats: Record<string, any>;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a default template engine registry
|
|
80
|
+
*/
|
|
81
|
+
export declare function createDefaultRegistry(config?: EngineRegistryConfig): TemplateEngineRegistry;
|
|
82
|
+
/**
|
|
83
|
+
* Get the global template engine registry
|
|
84
|
+
*/
|
|
85
|
+
export declare function getGlobalRegistry(): TemplateEngineRegistry;
|
|
86
|
+
/**
|
|
87
|
+
* Set the global template engine registry
|
|
88
|
+
*/
|
|
89
|
+
export declare function setGlobalRegistry(registry: TemplateEngineRegistry): void;
|
|
90
|
+
/**
|
|
91
|
+
* Reset the global registry to null
|
|
92
|
+
*/
|
|
93
|
+
export declare function resetGlobalRegistry(): void;
|
|
94
|
+
//# sourceMappingURL=engine-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-registry.d.ts","sourceRoot":"","sources":["../../src/engines/engine-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,oCAAoC;IACpC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IACzB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAItC;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,GAAE,oBAAyB;IAc7C;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAQjC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAI9B;;OAEG;IACG,MAAM,CACV,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,eAAe,EACxB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,OAAO,CAAC,MAAM,CAAC;IAiBlB;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,GACrE,OAAO,CAAC,MAAM,EAAE,CAAC;IAOpB;;OAEG;IACH,WAAW,IAAI,IAAI;IAQnB;;OAEG;IACH,QAAQ,IAAI;QACV,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClC;CAgBF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,sBAAsB,CAE3F;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,sBAAsB,CAK1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template Engine Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages multiple template engines and provides a unified
|
|
5
|
+
* interface for rendering templates.
|
|
6
|
+
*/
|
|
7
|
+
import { TypeScriptTemplateEngine } from './typescript-engine.js';
|
|
8
|
+
/**
|
|
9
|
+
* Engine not found error
|
|
10
|
+
*/
|
|
11
|
+
export class EngineNotFoundError extends Error {
|
|
12
|
+
engineType;
|
|
13
|
+
constructor(engineType) {
|
|
14
|
+
super(`Template engine "${engineType}" not found in registry`);
|
|
15
|
+
this.engineType = engineType;
|
|
16
|
+
this.name = 'EngineNotFoundError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Template engine registry
|
|
21
|
+
*/
|
|
22
|
+
export class TemplateEngineRegistry {
|
|
23
|
+
engines = new Map();
|
|
24
|
+
config;
|
|
25
|
+
constructor(config = {}) {
|
|
26
|
+
this.config = config;
|
|
27
|
+
// Register built-in engines
|
|
28
|
+
this.registerDefaultEngines();
|
|
29
|
+
// Register custom engines if provided
|
|
30
|
+
if (config.customEngines) {
|
|
31
|
+
for (const [type, engine] of config.customEngines.entries()) {
|
|
32
|
+
this.register(type, engine);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Register default built-in engines
|
|
38
|
+
*/
|
|
39
|
+
registerDefaultEngines() {
|
|
40
|
+
// Register TypeScript engine
|
|
41
|
+
const tsEngine = new TypeScriptTemplateEngine({
|
|
42
|
+
baseDir: this.config.baseDir,
|
|
43
|
+
enableCache: this.config.enableCache
|
|
44
|
+
});
|
|
45
|
+
this.register('typescript', tsEngine);
|
|
46
|
+
// Handlebars and AI engines will be registered in future phases
|
|
47
|
+
// this.register('handlebars', new HandlebarsTemplateEngine(...));
|
|
48
|
+
// this.register('ai', new AITemplateEngine(...));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Register a template engine
|
|
52
|
+
*/
|
|
53
|
+
register(type, engine) {
|
|
54
|
+
this.engines.set(type, engine);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a template engine by type
|
|
58
|
+
*/
|
|
59
|
+
get(type) {
|
|
60
|
+
const engine = this.engines.get(type);
|
|
61
|
+
if (!engine) {
|
|
62
|
+
throw new EngineNotFoundError(type);
|
|
63
|
+
}
|
|
64
|
+
return engine;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if an engine type is registered
|
|
68
|
+
*/
|
|
69
|
+
has(type) {
|
|
70
|
+
return this.engines.has(type);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get all registered engine types
|
|
74
|
+
*/
|
|
75
|
+
getRegisteredTypes() {
|
|
76
|
+
return Array.from(this.engines.keys());
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Render a template using the appropriate engine
|
|
80
|
+
*/
|
|
81
|
+
async render(template, context, options) {
|
|
82
|
+
const engine = this.get(template.engine);
|
|
83
|
+
// If basePath is provided and engine is TypeScript, temporarily override baseDir
|
|
84
|
+
if (options?.basePath && 'baseDir' in engine) {
|
|
85
|
+
const originalBaseDir = engine.baseDir;
|
|
86
|
+
engine.baseDir = options.basePath;
|
|
87
|
+
try {
|
|
88
|
+
return await engine.render(template, context);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
engine.baseDir = originalBaseDir;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return await engine.render(template, context);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Render multiple templates in parallel
|
|
98
|
+
*/
|
|
99
|
+
async renderMany(templates) {
|
|
100
|
+
const promises = templates.map(({ template, context }) => this.render(template, context));
|
|
101
|
+
return await Promise.all(promises);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Clear all engine caches
|
|
105
|
+
*/
|
|
106
|
+
clearCaches() {
|
|
107
|
+
for (const engine of this.engines.values()) {
|
|
108
|
+
if ('clearCache' in engine && typeof engine.clearCache === 'function') {
|
|
109
|
+
engine.clearCache();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get statistics about registered engines
|
|
115
|
+
*/
|
|
116
|
+
getStats() {
|
|
117
|
+
const engineStats = {};
|
|
118
|
+
for (const [type, engine] of this.engines.entries()) {
|
|
119
|
+
if ('getCacheStats' in engine && typeof engine.getCacheStats === 'function') {
|
|
120
|
+
engineStats[type] = engine.getCacheStats();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
engineStats[type] = { cached: false };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
registeredEngines: this.getRegisteredTypes(),
|
|
128
|
+
engineStats
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create a default template engine registry
|
|
134
|
+
*/
|
|
135
|
+
export function createDefaultRegistry(config) {
|
|
136
|
+
return new TemplateEngineRegistry(config);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Global singleton registry (lazy-initialized)
|
|
140
|
+
*/
|
|
141
|
+
let globalRegistry = null;
|
|
142
|
+
/**
|
|
143
|
+
* Get the global template engine registry
|
|
144
|
+
*/
|
|
145
|
+
export function getGlobalRegistry() {
|
|
146
|
+
if (!globalRegistry) {
|
|
147
|
+
globalRegistry = createDefaultRegistry();
|
|
148
|
+
}
|
|
149
|
+
return globalRegistry;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Set the global template engine registry
|
|
153
|
+
*/
|
|
154
|
+
export function setGlobalRegistry(registry) {
|
|
155
|
+
globalRegistry = registry;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Reset the global registry to null
|
|
159
|
+
*/
|
|
160
|
+
export function resetGlobalRegistry() {
|
|
161
|
+
globalRegistry = null;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=engine-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-registry.js","sourceRoot":"","sources":["../../src/engines/engine-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecVerse Template Engines
|
|
3
|
+
*
|
|
4
|
+
* Template engines for generating code from implementation types.
|
|
5
|
+
*/
|
|
6
|
+
export { TypeScriptTemplateEngine, TemplateEngineError, type GeneratorFunction, type ValidatorFunction, type PostProcessorFunction } from './typescript-engine.js';
|
|
7
|
+
export { TemplateEngineRegistry, EngineNotFoundError, createDefaultRegistry, getGlobalRegistry, setGlobalRegistry, resetGlobalRegistry, type EngineRegistryConfig } from './engine-registry.js';
|
|
8
|
+
export { CodeGenerator, createCodeGenerator, type GeneratedOutput, type CodeGenerationOptions } from './code-generator.js';
|
|
9
|
+
export type { TemplateEngine, CodeTemplate, TemplateContext, ValidationResult } from '../types/index.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,gBAAgB,EACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecVerse Template Engines
|
|
3
|
+
*
|
|
4
|
+
* Template engines for generating code from implementation types.
|
|
5
|
+
*/
|
|
6
|
+
// TypeScript template engine
|
|
7
|
+
export { TypeScriptTemplateEngine, TemplateEngineError } from './typescript-engine.js';
|
|
8
|
+
// Engine registry
|
|
9
|
+
export { TemplateEngineRegistry, EngineNotFoundError, createDefaultRegistry, getGlobalRegistry, setGlobalRegistry, resetGlobalRegistry } from './engine-registry.js';
|
|
10
|
+
// Code generator
|
|
11
|
+
export { CodeGenerator, createCodeGenerator } from './code-generator.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6BAA6B;AAC7B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EAIpB,MAAM,wBAAwB,CAAC;AAEhC,kBAAkB;AAClB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,sBAAsB,CAAC;AAE9B,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Template Engine
|
|
3
|
+
*
|
|
4
|
+
* Executes TypeScript generator functions to produce code.
|
|
5
|
+
* This is the primary template engine for Phase 1.
|
|
6
|
+
*/
|
|
7
|
+
import type { TemplateEngine, CodeTemplate, TemplateContext, ValidationResult } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Generator function signature
|
|
10
|
+
*/
|
|
11
|
+
export type GeneratorFunction = (context: TemplateContext) => string | Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Validator function signature
|
|
14
|
+
*/
|
|
15
|
+
export type ValidatorFunction = (code: string, context: TemplateContext) => ValidationResult | Promise<ValidationResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Post-processor function signature
|
|
18
|
+
*/
|
|
19
|
+
export type PostProcessorFunction = (code: string, context: TemplateContext) => string | Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Template engine error
|
|
22
|
+
*/
|
|
23
|
+
export declare class TemplateEngineError extends Error {
|
|
24
|
+
templateName?: string | undefined;
|
|
25
|
+
cause?: Error | undefined;
|
|
26
|
+
constructor(message: string, templateName?: string | undefined, cause?: Error | undefined);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* TypeScript template engine implementation
|
|
30
|
+
*/
|
|
31
|
+
export declare class TypeScriptTemplateEngine implements TemplateEngine {
|
|
32
|
+
private generatorCache;
|
|
33
|
+
private validatorCache;
|
|
34
|
+
private postProcessorCache;
|
|
35
|
+
private baseDir;
|
|
36
|
+
private tsxRegistered;
|
|
37
|
+
constructor(options?: {
|
|
38
|
+
baseDir?: string;
|
|
39
|
+
enableCache?: boolean;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Register tsx to enable TypeScript imports (lazy-loaded)
|
|
43
|
+
*/
|
|
44
|
+
private ensureTsxRegistered;
|
|
45
|
+
/**
|
|
46
|
+
* Render a template with the given context
|
|
47
|
+
*/
|
|
48
|
+
render(template: CodeTemplate, context: TemplateContext): Promise<string>;
|
|
49
|
+
/**
|
|
50
|
+
* Load a generator function from a file path
|
|
51
|
+
*/
|
|
52
|
+
private loadGenerator;
|
|
53
|
+
/**
|
|
54
|
+
* Load a validator function from a file path
|
|
55
|
+
*/
|
|
56
|
+
private loadValidator;
|
|
57
|
+
/**
|
|
58
|
+
* Load a post-processor function from a file path
|
|
59
|
+
*/
|
|
60
|
+
private loadPostProcessor;
|
|
61
|
+
/**
|
|
62
|
+
* Clear all caches
|
|
63
|
+
*/
|
|
64
|
+
clearCache(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Get cache statistics
|
|
67
|
+
*/
|
|
68
|
+
getCacheStats(): {
|
|
69
|
+
generators: number;
|
|
70
|
+
validators: number;
|
|
71
|
+
postProcessors: number;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=typescript-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-engine.d.ts","sourceRoot":"","sources":["../../src/engines/typescript-engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,KACrB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,KACrB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9B;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAGnC,YAAY,CAAC,EAAE,MAAM;IACrB,KAAK,CAAC,EAAE,KAAK;gBAFpB,OAAO,EAAE,MAAM,EACR,YAAY,CAAC,EAAE,MAAM,YAAA,EACrB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKvB;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,cAAc;IAC7D,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,kBAAkB,CAAiD;IAC3E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAkB;gBAE3B,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO;IAIrE;;OAEG;YACW,mBAAmB;IA0CjC;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA6D/E;;OAEG;YACW,aAAa;IA0F3B;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,iBAAiB;IAsC/B;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;OAEG;IACH,aAAa,IAAI;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Template Engine
|
|
3
|
+
*
|
|
4
|
+
* Executes TypeScript generator functions to produce code.
|
|
5
|
+
* This is the primary template engine for Phase 1.
|
|
6
|
+
*/
|
|
7
|
+
import { pathToFileURL, fileURLToPath } from 'url';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
/**
|
|
11
|
+
* Template engine error
|
|
12
|
+
*/
|
|
13
|
+
export class TemplateEngineError extends Error {
|
|
14
|
+
templateName;
|
|
15
|
+
cause;
|
|
16
|
+
constructor(message, templateName, cause) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.templateName = templateName;
|
|
19
|
+
this.cause = cause;
|
|
20
|
+
this.name = 'TemplateEngineError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* TypeScript template engine implementation
|
|
25
|
+
*/
|
|
26
|
+
export class TypeScriptTemplateEngine {
|
|
27
|
+
generatorCache = new Map();
|
|
28
|
+
validatorCache = new Map();
|
|
29
|
+
postProcessorCache = new Map();
|
|
30
|
+
baseDir;
|
|
31
|
+
tsxRegistered = false;
|
|
32
|
+
constructor(options = {}) {
|
|
33
|
+
this.baseDir = options.baseDir || process.cwd();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register tsx to enable TypeScript imports (lazy-loaded)
|
|
37
|
+
*/
|
|
38
|
+
async ensureTsxRegistered() {
|
|
39
|
+
if (!this.tsxRegistered) {
|
|
40
|
+
try {
|
|
41
|
+
// Find tsx — search multiple locations
|
|
42
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
43
|
+
const __dirname = path.dirname(__filename);
|
|
44
|
+
const tsxSubpath = 'tsx/dist/esm/api/index.mjs';
|
|
45
|
+
const candidates = [
|
|
46
|
+
path.resolve(__dirname, '../../..', 'node_modules', tsxSubpath), // Package root
|
|
47
|
+
path.resolve(__dirname, '../../../..', 'node_modules', tsxSubpath), // Workspace root
|
|
48
|
+
path.resolve(__dirname, '../../../../..', 'node_modules', tsxSubpath), // Parent workspace
|
|
49
|
+
path.join(process.cwd(), 'node_modules', tsxSubpath), // CWD
|
|
50
|
+
];
|
|
51
|
+
// Also try global npm location
|
|
52
|
+
try {
|
|
53
|
+
const { execSync } = await import('child_process');
|
|
54
|
+
const globalPrefix = execSync('npm prefix -g', { encoding: 'utf8' }).trim();
|
|
55
|
+
candidates.push(path.join(globalPrefix, 'lib/node_modules', tsxSubpath));
|
|
56
|
+
}
|
|
57
|
+
catch { /* no global npm */ }
|
|
58
|
+
let tsxPath = null;
|
|
59
|
+
const { existsSync } = await import('fs');
|
|
60
|
+
for (const candidate of candidates) {
|
|
61
|
+
if (existsSync(candidate)) {
|
|
62
|
+
tsxPath = candidate;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (!tsxPath)
|
|
67
|
+
throw new Error('tsx not found in any location');
|
|
68
|
+
const tsx = await import(pathToFileURL(tsxPath).href);
|
|
69
|
+
// Register tsx with options to allow node_modules processing
|
|
70
|
+
tsx.register({
|
|
71
|
+
namespace: Math.random().toString(),
|
|
72
|
+
onImport: () => { }
|
|
73
|
+
});
|
|
74
|
+
this.tsxRegistered = true;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// tsx not available, .ts imports will fail
|
|
78
|
+
console.warn('tsx not available, TypeScript template files may not load');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Render a template with the given context
|
|
84
|
+
*/
|
|
85
|
+
async render(template, context) {
|
|
86
|
+
// Validate template
|
|
87
|
+
if (template.engine !== 'typescript') {
|
|
88
|
+
throw new TemplateEngineError(`TypeScript engine cannot render template with engine type "${template.engine}"`);
|
|
89
|
+
}
|
|
90
|
+
if (!template.generator) {
|
|
91
|
+
throw new TemplateEngineError('TypeScript template requires "generator" path to be specified');
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
// Load and execute generator
|
|
95
|
+
const generator = await this.loadGenerator(template.generator);
|
|
96
|
+
let code = await generator(context);
|
|
97
|
+
// Run validators if specified
|
|
98
|
+
if (template.validators && template.validators.length > 0) {
|
|
99
|
+
for (const validatorPath of template.validators) {
|
|
100
|
+
const validator = await this.loadValidator(validatorPath);
|
|
101
|
+
const result = await validator(code, context);
|
|
102
|
+
if (!result.valid) {
|
|
103
|
+
throw new TemplateEngineError(`Validation failed:\n${(result.errors || []).map(e => ` - ${e}`).join('\n')}`, template.generator);
|
|
104
|
+
}
|
|
105
|
+
// Log warnings if any
|
|
106
|
+
if (result.warnings && result.warnings.length > 0) {
|
|
107
|
+
console.warn(`Validation warnings:\n${result.warnings.map(w => ` - ${w}`).join('\n')}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Run post-processors if specified
|
|
112
|
+
if (template.postProcessors && template.postProcessors.length > 0) {
|
|
113
|
+
for (const processorPath of template.postProcessors) {
|
|
114
|
+
const processor = await this.loadPostProcessor(processorPath);
|
|
115
|
+
code = await processor(code, context);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return code;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (error instanceof TemplateEngineError) {
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
throw new TemplateEngineError(`Failed to render template: ${error instanceof Error ? error.message : String(error)}`, template.generator, error instanceof Error ? error : undefined);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Load a generator function from a file path
|
|
129
|
+
*/
|
|
130
|
+
async loadGenerator(generatorPath) {
|
|
131
|
+
// Check cache
|
|
132
|
+
if (this.generatorCache.has(generatorPath)) {
|
|
133
|
+
return this.generatorCache.get(generatorPath);
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
// Resolve path
|
|
137
|
+
let fullPath = path.isAbsolute(generatorPath)
|
|
138
|
+
? generatorPath
|
|
139
|
+
: path.join(this.baseDir, generatorPath);
|
|
140
|
+
const DEBUG = process.env.SPECVERSE_DEBUG === 'true';
|
|
141
|
+
if (DEBUG) {
|
|
142
|
+
console.log(`[typescript-engine] Loading generator:`);
|
|
143
|
+
console.log(` generatorPath: ${generatorPath}`);
|
|
144
|
+
console.log(` baseDir: ${this.baseDir}`);
|
|
145
|
+
console.log(` fullPath: ${fullPath}`);
|
|
146
|
+
}
|
|
147
|
+
let module;
|
|
148
|
+
// If path is a TypeScript file in libs/, try to load compiled JS from dist/libs/ first
|
|
149
|
+
if (fullPath.includes('/libs/') && (fullPath.endsWith('.ts') || fullPath.endsWith('.tsx'))) {
|
|
150
|
+
const jsPath = fullPath.replace('/libs/', '/dist/libs/').replace(/\.tsx?$/, '.js');
|
|
151
|
+
if (DEBUG)
|
|
152
|
+
console.log(`[typescript-engine] Checking for compiled JS: ${jsPath}`);
|
|
153
|
+
if (existsSync(jsPath)) {
|
|
154
|
+
if (DEBUG)
|
|
155
|
+
console.log(`[typescript-engine] ✅ Using compiled JS instead of TS`);
|
|
156
|
+
fullPath = jsPath;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
if (DEBUG)
|
|
160
|
+
console.log(`[typescript-engine] ❌ Compiled JS not found, will use TS (may fail in node_modules)`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
if (DEBUG)
|
|
165
|
+
console.log(`[typescript-engine] Skipping JS check (not a libs/ TypeScript file)`);
|
|
166
|
+
}
|
|
167
|
+
// Try using tsx.tsImport for TypeScript files (bypasses node_modules restriction)
|
|
168
|
+
if (fullPath.endsWith('.ts') || fullPath.endsWith('.tsx')) {
|
|
169
|
+
try {
|
|
170
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
171
|
+
const __dirname = path.dirname(__filename);
|
|
172
|
+
const packageRoot = path.resolve(__dirname, '../../..');
|
|
173
|
+
const tsxPath = path.join(packageRoot, 'node_modules/tsx/dist/esm/api/index.mjs');
|
|
174
|
+
const tsx = await import(pathToFileURL(tsxPath).href);
|
|
175
|
+
// Use tsImport to load TypeScript files from node_modules
|
|
176
|
+
if (tsx.tsImport) {
|
|
177
|
+
module = await tsx.tsImport(fullPath, import.meta.url);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Fallback to regular import for tsx versions without tsImport
|
|
181
|
+
await this.ensureTsxRegistered();
|
|
182
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
183
|
+
module = await import(fileUrl);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (tsxError) {
|
|
187
|
+
// If tsx fails, try regular import
|
|
188
|
+
await this.ensureTsxRegistered();
|
|
189
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
190
|
+
module = await import(fileUrl);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Regular JavaScript file
|
|
195
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
196
|
+
module = await import(fileUrl);
|
|
197
|
+
}
|
|
198
|
+
// Get the generator function (default export or named export)
|
|
199
|
+
const generator = module.default || module.generate || module.generator;
|
|
200
|
+
if (typeof generator !== 'function') {
|
|
201
|
+
throw new Error(`Generator module must export a function as default export or named "generate" or "generator"`);
|
|
202
|
+
}
|
|
203
|
+
// Cache it
|
|
204
|
+
this.generatorCache.set(generatorPath, generator);
|
|
205
|
+
return generator;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
throw new TemplateEngineError(`Failed to load generator from "${generatorPath}": ${error instanceof Error ? error.message : String(error)}`, generatorPath, error instanceof Error ? error : undefined);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Load a validator function from a file path
|
|
213
|
+
*/
|
|
214
|
+
async loadValidator(validatorPath) {
|
|
215
|
+
// Check cache
|
|
216
|
+
if (this.validatorCache.has(validatorPath)) {
|
|
217
|
+
return this.validatorCache.get(validatorPath);
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
// Resolve path
|
|
221
|
+
const fullPath = path.isAbsolute(validatorPath)
|
|
222
|
+
? validatorPath
|
|
223
|
+
: path.join(this.baseDir, validatorPath);
|
|
224
|
+
// Import the module
|
|
225
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
226
|
+
const module = await import(fileUrl);
|
|
227
|
+
// Get the validator function
|
|
228
|
+
const validator = module.default || module.validate || module.validator;
|
|
229
|
+
if (typeof validator !== 'function') {
|
|
230
|
+
throw new Error(`Validator module must export a function as default export or named "validate" or "validator"`);
|
|
231
|
+
}
|
|
232
|
+
// Cache it
|
|
233
|
+
this.validatorCache.set(validatorPath, validator);
|
|
234
|
+
return validator;
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
throw new TemplateEngineError(`Failed to load validator from "${validatorPath}": ${error instanceof Error ? error.message : String(error)}`, validatorPath, error instanceof Error ? error : undefined);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Load a post-processor function from a file path
|
|
242
|
+
*/
|
|
243
|
+
async loadPostProcessor(processorPath) {
|
|
244
|
+
// Check cache
|
|
245
|
+
if (this.postProcessorCache.has(processorPath)) {
|
|
246
|
+
return this.postProcessorCache.get(processorPath);
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
// Resolve path
|
|
250
|
+
const fullPath = path.isAbsolute(processorPath)
|
|
251
|
+
? processorPath
|
|
252
|
+
: path.join(this.baseDir, processorPath);
|
|
253
|
+
// Import the module
|
|
254
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
255
|
+
const module = await import(fileUrl);
|
|
256
|
+
// Get the processor function
|
|
257
|
+
const processor = module.default || module.process || module.postProcess;
|
|
258
|
+
if (typeof processor !== 'function') {
|
|
259
|
+
throw new Error(`Post-processor module must export a function as default export or named "process" or "postProcess"`);
|
|
260
|
+
}
|
|
261
|
+
// Cache it
|
|
262
|
+
this.postProcessorCache.set(processorPath, processor);
|
|
263
|
+
return processor;
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
throw new TemplateEngineError(`Failed to load post-processor from "${processorPath}": ${error instanceof Error ? error.message : String(error)}`, processorPath, error instanceof Error ? error : undefined);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Clear all caches
|
|
271
|
+
*/
|
|
272
|
+
clearCache() {
|
|
273
|
+
this.generatorCache.clear();
|
|
274
|
+
this.validatorCache.clear();
|
|
275
|
+
this.postProcessorCache.clear();
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get cache statistics
|
|
279
|
+
*/
|
|
280
|
+
getCacheStats() {
|
|
281
|
+
return {
|
|
282
|
+
generators: this.generatorCache.size,
|
|
283
|
+
validators: this.validatorCache.size,
|
|
284
|
+
postProcessors: this.postProcessorCache.size
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=typescript-engine.js.map
|