@specverse/engines 4.1.30 → 4.2.0
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/manifests/frontend-only.yaml +3 -6
- package/assets/examples/manifests/fullstack-app.yaml +5 -7
- package/assets/examples/manifests/fullstack-monorepo.yaml +3 -6
- package/dist/inference/comprehensive-engine.d.ts.map +1 -1
- package/dist/inference/comprehensive-engine.js +3 -19
- package/dist/inference/comprehensive-engine.js.map +1 -1
- package/dist/inference/core/rule-engine.d.ts +31 -0
- package/dist/inference/core/rule-engine.d.ts.map +1 -1
- package/dist/inference/core/rule-engine.js +117 -33
- package/dist/inference/core/rule-engine.js.map +1 -1
- package/dist/inference/core/rule-file-types.d.ts +0 -2
- package/dist/inference/core/rule-file-types.d.ts.map +1 -1
- package/dist/inference/core/rule-file-types.js +3 -6
- package/dist/inference/core/rule-file-types.js.map +1 -1
- package/dist/inference/core/rule-loader.d.ts +5 -15
- package/dist/inference/core/rule-loader.d.ts.map +1 -1
- package/dist/inference/core/rule-loader.js +43 -132
- package/dist/inference/core/rule-loader.js.map +1 -1
- package/dist/inference/core/types.d.ts +0 -6
- package/dist/inference/core/types.d.ts.map +1 -1
- package/dist/inference/core/types.js +0 -4
- package/dist/inference/core/types.js.map +1 -1
- package/dist/inference/logical/generators/component-type-resolver.d.ts +0 -26
- package/dist/inference/logical/generators/component-type-resolver.d.ts.map +1 -1
- package/dist/inference/logical/generators/component-type-resolver.js +0 -19
- package/dist/inference/logical/generators/component-type-resolver.js.map +1 -1
- package/dist/inference/logical/generators/specialist-view-expander.d.ts +1 -17
- package/dist/inference/logical/generators/specialist-view-expander.d.ts.map +1 -1
- package/dist/inference/logical/generators/specialist-view-expander.js +0 -15
- package/dist/inference/logical/generators/specialist-view-expander.js.map +1 -1
- package/dist/inference/logical/generators/view-generator.d.ts +4 -14
- package/dist/inference/logical/generators/view-generator.d.ts.map +1 -1
- package/dist/inference/logical/generators/view-generator.js +6 -26
- package/dist/inference/logical/generators/view-generator.js.map +1 -1
- package/dist/inference/logical/index.d.ts +2 -2
- package/dist/inference/logical/index.d.ts.map +1 -1
- package/dist/inference/logical/logical-engine.d.ts.map +1 -1
- package/dist/inference/logical/logical-engine.js +17 -80
- package/dist/inference/logical/logical-engine.js.map +1 -1
- package/dist/inference/quint-transpiler.d.ts +5 -3
- package/dist/inference/quint-transpiler.d.ts.map +1 -1
- package/dist/inference/quint-transpiler.js +11 -6
- package/dist/inference/quint-transpiler.js.map +1 -1
- package/dist/libs/instance-factories/applications/templates/react-starter/app-tsx-generator.js +110 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/dashboard-body-composer.js +121 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/detail-body-composer.js +78 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/form-body-composer.js +190 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/helpers-emitter.js +45 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/html-to-jsx.js +192 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/list-body-composer.js +46 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/orchestrator.js +30 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/package-json-generator.js +38 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/regen-safety.js +89 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/view-emitter.js +56 -0
- package/dist/libs/instance-factories/applications/templates/react-starter/views-generator.js +66 -0
- package/dist/libs/instance-factories/cli/templates/commander/command-generator.js +14 -11
- package/dist/realize/index.d.ts.map +1 -1
- package/dist/realize/index.js +15 -22
- package/dist/realize/index.js.map +1 -1
- package/dist/registry/utils/manifest-adapter.d.ts +8 -1
- package/dist/registry/utils/manifest-adapter.d.ts.map +1 -1
- package/dist/registry/utils/manifest-adapter.js +8 -1
- package/dist/registry/utils/manifest-adapter.js.map +1 -1
- package/libs/instance-factories/applications/react-app-starter.yaml +150 -0
- package/libs/instance-factories/applications/templates/react-starter/README.md +211 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/dashboard-body-composer.test.ts +153 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/detail-body-composer.test.ts +145 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/form-body-composer.test.ts +175 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/helpers-emitter.test.ts +55 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/html-to-jsx.test.ts +140 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/list-body-composer.test.ts +146 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/orchestrator.test.ts +163 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/parity-p2-factory-imports.test.ts +116 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/parity-p3-rendered-output.test.ts +183 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/regen-safety.test.ts +144 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/starter-generators.test.ts +114 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/view-emitter.test.ts +107 -0
- package/libs/instance-factories/applications/templates/react-starter/__tests__/views-generator.test.ts +139 -0
- package/libs/instance-factories/applications/templates/react-starter/app-tsx-generator.ts +141 -0
- package/libs/instance-factories/applications/templates/react-starter/dashboard-body-composer.ts +174 -0
- package/libs/instance-factories/applications/templates/react-starter/detail-body-composer.ts +135 -0
- package/libs/instance-factories/applications/templates/react-starter/form-body-composer.ts +306 -0
- package/libs/instance-factories/applications/templates/react-starter/helpers-emitter.ts +60 -0
- package/libs/instance-factories/applications/templates/react-starter/html-to-jsx.ts +334 -0
- package/libs/instance-factories/applications/templates/react-starter/list-body-composer.ts +120 -0
- package/libs/instance-factories/applications/templates/react-starter/orchestrator.ts +80 -0
- package/libs/instance-factories/applications/templates/react-starter/package-json-generator.ts +57 -0
- package/libs/instance-factories/applications/templates/react-starter/regen-safety.ts +157 -0
- package/libs/instance-factories/applications/templates/react-starter/skeletons/dashboard.tsx.template +47 -0
- package/libs/instance-factories/applications/templates/react-starter/skeletons/detail.tsx.template +94 -0
- package/libs/instance-factories/applications/templates/react-starter/skeletons/form.tsx.template +114 -0
- package/libs/instance-factories/applications/templates/react-starter/skeletons/list.tsx.template +72 -0
- package/libs/instance-factories/applications/templates/react-starter/view-emitter.ts +151 -0
- package/libs/instance-factories/applications/templates/react-starter/views-generator.ts +137 -0
- package/libs/instance-factories/cli/templates/commander/command-generator.ts +14 -11
- package/package.json +3 -3
- package/dist/libs/instance-factories/applications/templates/react/_view-components-source.js +0 -530
- package/dist/libs/instance-factories/applications/templates/react/app-tsx-generator.js +0 -73
- package/dist/libs/instance-factories/applications/templates/react/field-helpers-generator.js +0 -99
- package/dist/libs/instance-factories/applications/templates/react/package-json-generator.js +0 -49
- package/dist/libs/instance-factories/applications/templates/react/pattern-adapter-generator.js +0 -156
- package/dist/libs/instance-factories/applications/templates/react/react-pattern-adapter.js +0 -935
- package/dist/libs/instance-factories/applications/templates/react/relationship-field-generator.js +0 -143
- package/dist/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.js +0 -646
- package/dist/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.js +0 -65
- package/dist/libs/instance-factories/applications/templates/react/view-dashboard-generator.js +0 -143
- package/dist/libs/instance-factories/applications/templates/react/view-detail-generator.js +0 -143
- package/dist/libs/instance-factories/applications/templates/react/view-form-generator.js +0 -355
- package/dist/libs/instance-factories/applications/templates/react/view-list-generator.js +0 -91
- package/dist/libs/instance-factories/applications/templates/react/view-router-generator.js +0 -79
- package/dist/libs/instance-factories/views/index.js +0 -48
- package/dist/libs/instance-factories/views/templates/react/adapters/antd-adapter.js +0 -742
- package/dist/libs/instance-factories/views/templates/react/adapters/mui-adapter.js +0 -824
- package/dist/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.js +0 -719
- package/dist/libs/instance-factories/views/templates/react/app-generator.js +0 -45
- package/dist/libs/instance-factories/views/templates/react/components-generator.js +0 -820
- package/dist/libs/instance-factories/views/templates/react/forms-generator.js +0 -275
- package/dist/libs/instance-factories/views/templates/react/frontend-package-json-generator.js +0 -46
- package/dist/libs/instance-factories/views/templates/react/hooks-generator.js +0 -81
- package/dist/libs/instance-factories/views/templates/react/index-css-generator.js +0 -9
- package/dist/libs/instance-factories/views/templates/react/index-html-generator.js +0 -23
- package/dist/libs/instance-factories/views/templates/react/main-tsx-generator.js +0 -21
- package/dist/libs/instance-factories/views/templates/react/react-component-generator.js +0 -299
- package/dist/libs/instance-factories/views/templates/react/router-generator.js +0 -136
- package/dist/libs/instance-factories/views/templates/react/router-generic-generator.js +0 -107
- package/dist/libs/instance-factories/views/templates/react/shared-utils-generator.js +0 -187
- package/dist/libs/instance-factories/views/templates/react/spec-json-generator.js +0 -7
- package/dist/libs/instance-factories/views/templates/react/types-generator.js +0 -56
- package/dist/libs/instance-factories/views/templates/react/views-metadata-generator.js +0 -27
- package/dist/libs/instance-factories/views/templates/react/vite-config-generator.js +0 -29
- package/dist/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js +0 -261
- package/dist/libs/instance-factories/views/templates/shared/adapter-types.js +0 -34
- package/dist/libs/instance-factories/views/templates/shared/atomic-components-registry.js +0 -800
- package/dist/libs/instance-factories/views/templates/shared/base-generator.js +0 -305
- package/dist/libs/instance-factories/views/templates/shared/component-metadata.js +0 -517
- package/dist/libs/instance-factories/views/templates/shared/composite-pattern-types.js +0 -0
- package/dist/libs/instance-factories/views/templates/shared/composite-patterns.js +0 -445
- package/dist/libs/instance-factories/views/templates/shared/index.js +0 -80
- package/dist/libs/instance-factories/views/templates/shared/pattern-validator.js +0 -210
- package/dist/libs/instance-factories/views/templates/shared/property-mapper.js +0 -492
- package/dist/libs/instance-factories/views/templates/shared/syntax-mapper.js +0 -321
- package/dist/realize/index.js.bak +0 -758
- package/libs/instance-factories/applications/react-app.yaml +0 -186
- package/libs/instance-factories/applications/templates/react/_view-components-source.ts +0 -555
- package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +0 -94
- package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +0 -106
- package/libs/instance-factories/applications/templates/react/package-json-generator.ts +0 -57
- package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +0 -179
- package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +0 -1347
- package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +0 -150
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +0 -704
- package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +0 -84
- package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +0 -150
- package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +0 -150
- package/libs/instance-factories/applications/templates/react/view-form-generator.ts +0 -362
- package/libs/instance-factories/applications/templates/react/view-list-generator.ts +0 -98
- package/libs/instance-factories/applications/templates/react/view-router-generator.ts +0 -89
- package/libs/instance-factories/views/README.md +0 -62
- package/libs/instance-factories/views/index.d.ts +0 -13
- package/libs/instance-factories/views/index.d.ts.map +0 -1
- package/libs/instance-factories/views/index.js +0 -18
- package/libs/instance-factories/views/index.js.map +0 -1
- package/libs/instance-factories/views/index.ts +0 -45
- package/libs/instance-factories/views/react-components.yaml +0 -129
- package/libs/instance-factories/views/templates/ARCHITECTURE.md +0 -198
- package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +0 -869
- package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +0 -953
- package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +0 -806
- package/libs/instance-factories/views/templates/react/app-generator.ts +0 -55
- package/libs/instance-factories/views/templates/react/components-generator.ts +0 -938
- package/libs/instance-factories/views/templates/react/forms-generator.ts +0 -325
- package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +0 -57
- package/libs/instance-factories/views/templates/react/hooks-generator.ts +0 -106
- package/libs/instance-factories/views/templates/react/index-css-generator.ts +0 -14
- package/libs/instance-factories/views/templates/react/index-html-generator.ts +0 -34
- package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +0 -29
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +0 -152
- package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/react/react-component-generator.js +0 -398
- package/libs/instance-factories/views/templates/react/react-component-generator.js.map +0 -1
- package/libs/instance-factories/views/templates/react/react-component-generator.ts +0 -533
- package/libs/instance-factories/views/templates/react/router-generator.ts +0 -197
- package/libs/instance-factories/views/templates/react/router-generic-generator.ts +0 -132
- package/libs/instance-factories/views/templates/react/shared-utils-generator.ts +0 -196
- package/libs/instance-factories/views/templates/react/spec-json-generator.ts +0 -17
- package/libs/instance-factories/views/templates/react/types-generator.ts +0 -76
- package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +0 -42
- package/libs/instance-factories/views/templates/react/vite-config-generator.ts +0 -38
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +0 -1
- package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +0 -474
- package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +0 -242
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +0 -77
- package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/adapter-types.js +0 -47
- package/libs/instance-factories/views/templates/shared/adapter-types.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/adapter-types.ts +0 -142
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +0 -63
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +0 -822
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +0 -908
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts +0 -247
- package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/base-generator.js +0 -363
- package/libs/instance-factories/views/templates/shared/base-generator.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/base-generator.ts +0 -608
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +0 -254
- package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/component-metadata.js +0 -602
- package/libs/instance-factories/views/templates/shared/component-metadata.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/component-metadata.ts +0 -803
- package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +0 -250
- package/libs/instance-factories/views/templates/shared/composite-patterns.ts +0 -535
- package/libs/instance-factories/views/templates/shared/index.ts +0 -68
- package/libs/instance-factories/views/templates/shared/pattern-validator.ts +0 -279
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +0 -149
- package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/property-mapper.js +0 -580
- package/libs/instance-factories/views/templates/shared/property-mapper.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/property-mapper.ts +0 -700
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +0 -143
- package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +0 -1
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js +0 -420
- package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +0 -1
- package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +0 -539
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite Configuration Generator
|
|
3
|
-
*
|
|
4
|
-
* Generates vite.config.ts for React application with backend proxy
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { TemplateContext } from '@specverse/types';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Generate vite.config.ts
|
|
11
|
-
*/
|
|
12
|
-
export default function generateViteConfig(context: TemplateContext): string {
|
|
13
|
-
const { backendPort = 3000 } = context;
|
|
14
|
-
|
|
15
|
-
return `import { defineConfig } from 'vite';
|
|
16
|
-
import react from '@vitejs/plugin-react';
|
|
17
|
-
|
|
18
|
-
// https://vitejs.dev/config/
|
|
19
|
-
export default defineConfig({
|
|
20
|
-
plugins: [react()],
|
|
21
|
-
server: {
|
|
22
|
-
port: 5173,
|
|
23
|
-
host: true,
|
|
24
|
-
proxy: {
|
|
25
|
-
'/api': {
|
|
26
|
-
target: 'http://localhost:${backendPort}',
|
|
27
|
-
changeOrigin: true,
|
|
28
|
-
rewrite: (path) => path
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
build: {
|
|
33
|
-
outDir: 'dist',
|
|
34
|
-
sourcemap: true
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
`;
|
|
38
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-view-renderer.d.ts","sourceRoot":"","sources":["runtime-view-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-view-renderer.js","sourceRoot":"","sources":["runtime-view-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime View Renderer
|
|
3
|
-
*
|
|
4
|
-
* Dynamically renders SpecVerse views at runtime using React.createElement.
|
|
5
|
-
* Used by app-demo for live view rendering without code generation.
|
|
6
|
-
*
|
|
7
|
-
* Architecture:
|
|
8
|
-
* - No code generation - creates React elements directly
|
|
9
|
-
* - Uses component-metadata for runtime hints
|
|
10
|
-
* - Integrates with BaseComponentGenerator for shared logic
|
|
11
|
-
* - Supports dynamic state and event binding
|
|
12
|
-
* - Real-time view updates
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import React, { createElement, useState, useEffect, useMemo } from 'react';
|
|
16
|
-
import {
|
|
17
|
-
BaseComponentGenerator,
|
|
18
|
-
ViewSpec,
|
|
19
|
-
StateDefinition,
|
|
20
|
-
EventDefinition,
|
|
21
|
-
UIComponent,
|
|
22
|
-
RenderContext,
|
|
23
|
-
GeneratorConfig
|
|
24
|
-
} from '../shared/base-generator.js';
|
|
25
|
-
import { mapProperties } from '../shared/property-mapper.js';
|
|
26
|
-
import { getComponentMetadata } from '../shared/component-metadata.js';
|
|
27
|
-
import type { ComponentAdapter } from '../shared/adapter-types.js';
|
|
28
|
-
|
|
29
|
-
// ============================================================================
|
|
30
|
-
// Types
|
|
31
|
-
// ============================================================================
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Runtime renderer configuration
|
|
35
|
-
*/
|
|
36
|
-
export interface RuntimeRendererConfig extends GeneratorConfig {
|
|
37
|
-
framework: 'runtime';
|
|
38
|
-
target: 'runtime';
|
|
39
|
-
/**
|
|
40
|
-
* Enable live reload on spec changes
|
|
41
|
-
*/
|
|
42
|
-
liveReload?: boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Debug mode with console logging
|
|
45
|
-
*/
|
|
46
|
-
debug?: boolean;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Runtime component props
|
|
51
|
-
*/
|
|
52
|
-
export interface RuntimeComponentProps {
|
|
53
|
-
[key: string]: any;
|
|
54
|
-
children?: React.ReactNode;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Runtime state manager
|
|
59
|
-
*/
|
|
60
|
-
export interface RuntimeState {
|
|
61
|
-
[key: string]: any;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Runtime event handlers
|
|
66
|
-
*/
|
|
67
|
-
export interface RuntimeEventHandlers {
|
|
68
|
-
[key: string]: (...args: any[]) => void;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Runtime view context
|
|
73
|
-
*/
|
|
74
|
-
export interface RuntimeViewContext {
|
|
75
|
-
state: RuntimeState;
|
|
76
|
-
setState: (updates: Partial<RuntimeState>) => void;
|
|
77
|
-
handlers: RuntimeEventHandlers;
|
|
78
|
-
data: Record<string, any[]>; // Model data for lists
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// ============================================================================
|
|
82
|
-
// Runtime View Renderer
|
|
83
|
-
// ============================================================================
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Renders SpecVerse views dynamically at runtime
|
|
87
|
-
*
|
|
88
|
-
* Unlike code generators, this creates React elements directly without
|
|
89
|
-
* generating .tsx files. Used by app-demo for live view rendering.
|
|
90
|
-
*/
|
|
91
|
-
export class RuntimeViewRenderer extends BaseComponentGenerator {
|
|
92
|
-
private readonly runtimeConfig: RuntimeRendererConfig;
|
|
93
|
-
private viewContext?: RuntimeViewContext;
|
|
94
|
-
|
|
95
|
-
constructor(adapter: ComponentAdapter, config: RuntimeRendererConfig) {
|
|
96
|
-
super(adapter, config);
|
|
97
|
-
this.runtimeConfig = config;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// ============================================================================
|
|
101
|
-
// Public API - Runtime Rendering
|
|
102
|
-
// ============================================================================
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Render view as React element (runtime)
|
|
106
|
-
*
|
|
107
|
-
* @param viewSpec - View specification
|
|
108
|
-
* @param context - Runtime context (state, data, handlers)
|
|
109
|
-
* @returns React element
|
|
110
|
-
*/
|
|
111
|
-
public renderRuntime(
|
|
112
|
-
viewSpec: ViewSpec,
|
|
113
|
-
context?: Partial<RuntimeViewContext>
|
|
114
|
-
): React.ReactElement {
|
|
115
|
-
// Initialize runtime context
|
|
116
|
-
this.viewContext = this.initializeContext(viewSpec, context);
|
|
117
|
-
|
|
118
|
-
// Create root element
|
|
119
|
-
const components = this.renderComponentsRuntime(viewSpec.components);
|
|
120
|
-
|
|
121
|
-
return createElement(
|
|
122
|
-
'div',
|
|
123
|
-
{ className: 'specverse-runtime-view', 'data-view': viewSpec.name },
|
|
124
|
-
components
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Create a React component from view spec
|
|
130
|
-
*
|
|
131
|
-
* Returns a React component function that can be used directly
|
|
132
|
-
*
|
|
133
|
-
* @param viewSpec - View specification
|
|
134
|
-
* @returns React component function
|
|
135
|
-
*/
|
|
136
|
-
public createRuntimeComponent(viewSpec: ViewSpec): React.FC<any> {
|
|
137
|
-
const renderer = this;
|
|
138
|
-
|
|
139
|
-
return function RuntimeViewComponent(props: any) {
|
|
140
|
-
// Initialize state from view spec
|
|
141
|
-
const [state, setState] = useState<RuntimeState>(() =>
|
|
142
|
-
renderer.initializeState(viewSpec.state)
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
// Initialize event handlers
|
|
146
|
-
const handlers = useMemo(() =>
|
|
147
|
-
renderer.createEventHandlers(viewSpec.events, state, setState),
|
|
148
|
-
[state]
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// Create runtime context
|
|
152
|
-
const context: RuntimeViewContext = {
|
|
153
|
-
state,
|
|
154
|
-
setState: (updates) => setState(prev => ({ ...prev, ...updates })),
|
|
155
|
-
handlers,
|
|
156
|
-
data: props.data || {}
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
// Render view
|
|
160
|
-
return renderer.renderRuntime(viewSpec, context);
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// ============================================================================
|
|
165
|
-
// Abstract Method Implementations (Not Used in Runtime)
|
|
166
|
-
// ============================================================================
|
|
167
|
-
|
|
168
|
-
protected generateImports(viewSpec: ViewSpec): string {
|
|
169
|
-
// Runtime doesn't generate code
|
|
170
|
-
return '';
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
protected generateComponent(parts: any): string {
|
|
174
|
-
// Runtime doesn't generate code
|
|
175
|
-
return '';
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
protected generateState(state: Record<string, StateDefinition>): string {
|
|
179
|
-
// Runtime doesn't generate code
|
|
180
|
-
return '';
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
protected generateEvents(events: Record<string, EventDefinition>): string {
|
|
184
|
-
// Runtime doesn't generate code
|
|
185
|
-
return '';
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
public getFileExtension(): string {
|
|
189
|
-
return ''; // No files generated
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
public getAdditionalFiles(viewSpec: ViewSpec): Record<string, string> {
|
|
193
|
-
return {}; // No files generated
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// ============================================================================
|
|
197
|
-
// Runtime-Specific Methods
|
|
198
|
-
// ============================================================================
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Initialize runtime context
|
|
202
|
-
*/
|
|
203
|
-
private initializeContext(
|
|
204
|
-
viewSpec: ViewSpec,
|
|
205
|
-
context?: Partial<RuntimeViewContext>
|
|
206
|
-
): RuntimeViewContext {
|
|
207
|
-
return {
|
|
208
|
-
state: context?.state || this.initializeState(viewSpec.state),
|
|
209
|
-
setState: context?.setState || (() => {}),
|
|
210
|
-
handlers: context?.handlers || this.createEventHandlers(viewSpec.events),
|
|
211
|
-
data: context?.data || {}
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* Initialize state from view spec
|
|
217
|
-
*/
|
|
218
|
-
private initializeState(state?: Record<string, StateDefinition>): RuntimeState {
|
|
219
|
-
if (!state) return {};
|
|
220
|
-
|
|
221
|
-
const initialState: RuntimeState = {};
|
|
222
|
-
|
|
223
|
-
for (const [name, def] of Object.entries(state)) {
|
|
224
|
-
initialState[name] = def.initial;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return initialState;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Create event handlers from view spec
|
|
232
|
-
*/
|
|
233
|
-
private createEventHandlers(
|
|
234
|
-
events?: Record<string, EventDefinition>,
|
|
235
|
-
state?: RuntimeState,
|
|
236
|
-
setState?: (updates: Partial<RuntimeState>) => void
|
|
237
|
-
): RuntimeEventHandlers {
|
|
238
|
-
if (!events) return {};
|
|
239
|
-
|
|
240
|
-
const handlers: RuntimeEventHandlers = {};
|
|
241
|
-
|
|
242
|
-
for (const [name, def] of Object.entries(events)) {
|
|
243
|
-
// Create handler function
|
|
244
|
-
handlers[`handle${this.capitalize(name)}`] = (...args: any[]) => {
|
|
245
|
-
if (this.runtimeConfig.debug) {
|
|
246
|
-
console.log(`[RuntimeView] Event: ${name}`, args);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// Execute event body
|
|
250
|
-
try {
|
|
251
|
-
// Create function from body
|
|
252
|
-
const fn = new Function('state', 'setState', 'args', def.body);
|
|
253
|
-
fn(state, setState, args);
|
|
254
|
-
} catch (error) {
|
|
255
|
-
console.error(`[RuntimeView] Event handler error (${name}):`, error);
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
return handlers;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Render components as React elements
|
|
265
|
-
*/
|
|
266
|
-
private renderComponentsRuntime(components: Record<string, UIComponent>): React.ReactNode[] {
|
|
267
|
-
return Object.entries(components).map(([name, component]) =>
|
|
268
|
-
this.renderComponentRuntime(component, {
|
|
269
|
-
depth: 0,
|
|
270
|
-
path: [name]
|
|
271
|
-
})
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Render single component as React element
|
|
277
|
-
*/
|
|
278
|
-
private renderComponentRuntime(
|
|
279
|
-
component: UIComponent,
|
|
280
|
-
context: RenderContext
|
|
281
|
-
): React.ReactElement | null {
|
|
282
|
-
// Depth enforcement
|
|
283
|
-
if (context.depth > this.MAX_DEPTH) {
|
|
284
|
-
if (this.runtimeConfig.debug) {
|
|
285
|
-
console.warn(`[RuntimeView] Max depth exceeded at ${context.path.join('.')}`);
|
|
286
|
-
}
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// Get component metadata
|
|
291
|
-
const metadata = getComponentMetadata(component.type);
|
|
292
|
-
if (!metadata) {
|
|
293
|
-
console.warn(`[RuntimeView] Unknown component type: ${component.type}`);
|
|
294
|
-
return null;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// Map properties
|
|
298
|
-
const mappedProps = component.properties
|
|
299
|
-
? mapProperties(component.type, component.properties, 'runtime')
|
|
300
|
-
: {};
|
|
301
|
-
|
|
302
|
-
// Add key for React
|
|
303
|
-
const props: RuntimeComponentProps = {
|
|
304
|
-
...mappedProps,
|
|
305
|
-
key: context.path.join('-')
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
// Handle conditional rendering
|
|
309
|
-
if (component.condition && this.viewContext) {
|
|
310
|
-
const condition = this.evaluateCondition(component.condition, this.viewContext);
|
|
311
|
-
if (!condition) return null;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Handle list rendering
|
|
315
|
-
if (component.dataSource && this.viewContext) {
|
|
316
|
-
return this.renderListRuntime(component, props, context);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Render children
|
|
320
|
-
let children: React.ReactNode = null;
|
|
321
|
-
if (component.children && component.children.length > 0) {
|
|
322
|
-
children = component.children.map((child, index) =>
|
|
323
|
-
this.renderComponentRuntime(child, {
|
|
324
|
-
...context,
|
|
325
|
-
depth: context.depth + 1,
|
|
326
|
-
path: [...context.path, `child_${index}`]
|
|
327
|
-
})
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Get adapter component render function
|
|
332
|
-
const adapterComponent = this.adapter.components[component.type];
|
|
333
|
-
if (!adapterComponent) {
|
|
334
|
-
console.warn(`[RuntimeView] No adapter for component: ${component.type}`);
|
|
335
|
-
return null;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
// For runtime, we need to create actual React elements
|
|
339
|
-
// The adapter render function returns JSX string, so we need to convert it
|
|
340
|
-
// For now, create a simple wrapper
|
|
341
|
-
return this.createElementFromAdapter(component.type, props, children);
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* Render list of items
|
|
346
|
-
*/
|
|
347
|
-
private renderListRuntime(
|
|
348
|
-
component: UIComponent,
|
|
349
|
-
props: RuntimeComponentProps,
|
|
350
|
-
context: RenderContext
|
|
351
|
-
): React.ReactElement | null {
|
|
352
|
-
if (!this.viewContext) return null;
|
|
353
|
-
|
|
354
|
-
const dataArray = this.viewContext.data[component.dataSource!];
|
|
355
|
-
if (!Array.isArray(dataArray)) {
|
|
356
|
-
console.warn(`[RuntimeView] Data source not found: ${component.dataSource}`);
|
|
357
|
-
return null;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
const items = dataArray.map((item, index) => {
|
|
361
|
-
const itemProps = {
|
|
362
|
-
...props,
|
|
363
|
-
...item,
|
|
364
|
-
key: `${context.path.join('-')}-${index}`
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
return this.createElementFromAdapter(component.type, itemProps, null);
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
return createElement(React.Fragment, null, ...items);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Create React element from adapter component
|
|
375
|
-
*/
|
|
376
|
-
private createElementFromAdapter(
|
|
377
|
-
type: string,
|
|
378
|
-
props: RuntimeComponentProps,
|
|
379
|
-
children: React.ReactNode
|
|
380
|
-
): React.ReactElement {
|
|
381
|
-
// For runtime, we create a simple div wrapper with className
|
|
382
|
-
// In actual implementation, this would integrate with a component library
|
|
383
|
-
return createElement(
|
|
384
|
-
'div',
|
|
385
|
-
{
|
|
386
|
-
...props,
|
|
387
|
-
className: `specverse-runtime-${type} ${props.className || ''}`.trim(),
|
|
388
|
-
'data-component': type
|
|
389
|
-
},
|
|
390
|
-
children
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
/**
|
|
395
|
-
* Evaluate condition expression
|
|
396
|
-
*/
|
|
397
|
-
private evaluateCondition(condition: string, context: RuntimeViewContext): boolean {
|
|
398
|
-
try {
|
|
399
|
-
const fn = new Function('state', 'data', `return ${condition}`);
|
|
400
|
-
return fn(context.state, context.data);
|
|
401
|
-
} catch (error) {
|
|
402
|
-
console.error(`[RuntimeView] Condition evaluation error:`, error);
|
|
403
|
-
return false;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Capitalize first letter
|
|
409
|
-
*/
|
|
410
|
-
private capitalize(str: string): string {
|
|
411
|
-
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
// ============================================================================
|
|
416
|
-
// Factory Functions
|
|
417
|
-
// ============================================================================
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Create a RuntimeViewRenderer instance
|
|
421
|
-
*
|
|
422
|
-
* @param adapter - Component adapter (runtime adapter)
|
|
423
|
-
* @param config - Optional configuration
|
|
424
|
-
* @returns RuntimeViewRenderer instance
|
|
425
|
-
*/
|
|
426
|
-
export function createRuntimeRenderer(
|
|
427
|
-
adapter: ComponentAdapter,
|
|
428
|
-
config?: Partial<RuntimeRendererConfig>
|
|
429
|
-
): RuntimeViewRenderer {
|
|
430
|
-
const defaultConfig: RuntimeRendererConfig = {
|
|
431
|
-
framework: 'runtime',
|
|
432
|
-
target: 'runtime',
|
|
433
|
-
liveReload: false,
|
|
434
|
-
debug: false,
|
|
435
|
-
maxDepth: 3,
|
|
436
|
-
enableWarnings: true
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
const finalConfig = { ...defaultConfig, ...config } as RuntimeRendererConfig;
|
|
440
|
-
|
|
441
|
-
return new RuntimeViewRenderer(adapter, finalConfig);
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
/**
|
|
445
|
-
* Render view at runtime (convenience function)
|
|
446
|
-
*
|
|
447
|
-
* @param viewSpec - View specification
|
|
448
|
-
* @param adapter - Component adapter
|
|
449
|
-
* @param context - Runtime context
|
|
450
|
-
* @returns React element
|
|
451
|
-
*/
|
|
452
|
-
export function renderView(
|
|
453
|
-
viewSpec: ViewSpec,
|
|
454
|
-
adapter: ComponentAdapter,
|
|
455
|
-
context?: Partial<RuntimeViewContext>
|
|
456
|
-
): React.ReactElement {
|
|
457
|
-
const renderer = createRuntimeRenderer(adapter);
|
|
458
|
-
return renderer.renderRuntime(viewSpec, context);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
/**
|
|
462
|
-
* Create runtime component (convenience function)
|
|
463
|
-
*
|
|
464
|
-
* @param viewSpec - View specification
|
|
465
|
-
* @param adapter - Component adapter
|
|
466
|
-
* @returns React component function
|
|
467
|
-
*/
|
|
468
|
-
export function createViewComponent(
|
|
469
|
-
viewSpec: ViewSpec,
|
|
470
|
-
adapter: ComponentAdapter
|
|
471
|
-
): React.FC<any> {
|
|
472
|
-
const renderer = createRuntimeRenderer(adapter);
|
|
473
|
-
return renderer.createRuntimeComponent(viewSpec);
|
|
474
|
-
}
|