@tpitre/story-ui 2.2.0 → 2.3.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/.env.sample +82 -11
- package/README.md +89 -0
- package/dist/cli/deploy.d.ts +17 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +696 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +26 -2
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +437 -110
- package/dist/mcp-server/index.d.ts +2 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +120 -2
- package/dist/mcp-server/mcp-stdio-server.d.ts +3 -0
- package/dist/mcp-server/mcp-stdio-server.d.ts.map +1 -0
- package/dist/mcp-server/mcp-stdio-server.js +8 -1
- package/dist/mcp-server/routes/claude.d.ts +3 -0
- package/dist/mcp-server/routes/claude.d.ts.map +1 -0
- package/dist/mcp-server/routes/claude.js +60 -23
- package/dist/mcp-server/routes/components.d.ts +4 -0
- package/dist/mcp-server/routes/components.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.d.ts +38 -0
- package/dist/mcp-server/routes/frameworks.d.ts.map +1 -0
- package/dist/mcp-server/routes/frameworks.js +183 -0
- package/dist/mcp-server/routes/generateStory.d.ts +3 -0
- package/dist/mcp-server/routes/generateStory.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStory.js +160 -76
- package/dist/mcp-server/routes/generateStoryStream.d.ts +12 -0
- package/dist/mcp-server/routes/generateStoryStream.d.ts.map +1 -0
- package/dist/mcp-server/routes/generateStoryStream.js +947 -0
- package/dist/mcp-server/routes/hybridStories.d.ts +18 -0
- package/dist/mcp-server/routes/hybridStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts +14 -0
- package/dist/mcp-server/routes/mcpRemote.d.ts.map +1 -0
- package/dist/mcp-server/routes/mcpRemote.js +489 -0
- package/dist/mcp-server/routes/memoryStories.d.ts +26 -0
- package/dist/mcp-server/routes/memoryStories.d.ts.map +1 -0
- package/dist/mcp-server/routes/providers.d.ts +89 -0
- package/dist/mcp-server/routes/providers.d.ts.map +1 -0
- package/dist/mcp-server/routes/providers.js +369 -0
- package/dist/mcp-server/routes/storySync.d.ts +26 -0
- package/dist/mcp-server/routes/storySync.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.d.ts +110 -0
- package/dist/mcp-server/routes/streamTypes.d.ts.map +1 -0
- package/dist/mcp-server/routes/streamTypes.js +18 -0
- package/dist/mcp-server/sessionManager.d.ts +50 -0
- package/dist/mcp-server/sessionManager.d.ts.map +1 -0
- package/dist/story-generator/componentBlacklist.d.ts +21 -0
- package/dist/story-generator/componentBlacklist.d.ts.map +1 -0
- package/dist/story-generator/componentDiscovery.d.ts +28 -0
- package/dist/story-generator/componentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts +49 -0
- package/dist/story-generator/componentRegistryGenerator.d.ts.map +1 -0
- package/dist/story-generator/componentRegistryGenerator.js +205 -0
- package/dist/story-generator/configLoader.d.ts +33 -0
- package/dist/story-generator/configLoader.d.ts.map +1 -0
- package/dist/story-generator/considerationsLoader.d.ts +32 -0
- package/dist/story-generator/considerationsLoader.d.ts.map +1 -0
- package/dist/story-generator/documentation-sources.d.ts +28 -0
- package/dist/story-generator/documentation-sources.d.ts.map +1 -0
- package/dist/story-generator/documentationLoader.d.ts +64 -0
- package/dist/story-generator/documentationLoader.d.ts.map +1 -0
- package/dist/story-generator/dynamicPackageDiscovery.d.ts +97 -0
- package/dist/story-generator/dynamicPackageDiscovery.d.ts.map +1 -0
- package/dist/story-generator/enhancedComponentDiscovery.d.ts +125 -0
- package/dist/story-generator/enhancedComponentDiscovery.d.ts.map +1 -0
- package/dist/story-generator/enhancedComponentDiscovery.js +111 -11
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/angular-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/angular-adapter.js +427 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts +75 -0
- package/dist/story-generator/framework-adapters/base-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/base-adapter.js +147 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts +55 -0
- package/dist/story-generator/framework-adapters/framework-detector.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/framework-detector.js +323 -0
- package/dist/story-generator/framework-adapters/index.d.ts +97 -0
- package/dist/story-generator/framework-adapters/index.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/index.js +198 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/react-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/react-adapter.js +316 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts +40 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/svelte-adapter.js +372 -0
- package/dist/story-generator/framework-adapters/types.d.ts +182 -0
- package/dist/story-generator/framework-adapters/types.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/types.js +8 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts +36 -0
- package/dist/story-generator/framework-adapters/vue-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/vue-adapter.js +336 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts +54 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.d.ts.map +1 -0
- package/dist/story-generator/framework-adapters/web-components-adapter.js +387 -0
- package/dist/story-generator/generateStory.d.ts +7 -0
- package/dist/story-generator/generateStory.d.ts.map +1 -0
- package/dist/story-generator/gitignoreManager.d.ts +50 -0
- package/dist/story-generator/gitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/imageProcessor.d.ts +80 -0
- package/dist/story-generator/imageProcessor.d.ts.map +1 -0
- package/dist/story-generator/imageProcessor.js +391 -0
- package/dist/story-generator/inMemoryStoryService.d.ts +89 -0
- package/dist/story-generator/inMemoryStoryService.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts +36 -0
- package/dist/story-generator/llm-providers/base-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/base-provider.js +135 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts +23 -0
- package/dist/story-generator/llm-providers/claude-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/claude-provider.js +414 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/gemini-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/gemini-provider.js +406 -0
- package/dist/story-generator/llm-providers/index.d.ts +63 -0
- package/dist/story-generator/llm-providers/index.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/index.js +169 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts +24 -0
- package/dist/story-generator/llm-providers/openai-provider.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/openai-provider.js +458 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts +75 -0
- package/dist/story-generator/llm-providers/settings-manager.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/settings-manager.js +173 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts +79 -0
- package/dist/story-generator/llm-providers/story-llm-service.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/story-llm-service.js +240 -0
- package/dist/story-generator/llm-providers/types.d.ts +153 -0
- package/dist/story-generator/llm-providers/types.d.ts.map +1 -0
- package/dist/story-generator/llm-providers/types.js +8 -0
- package/dist/story-generator/logger.d.ts +14 -0
- package/dist/story-generator/logger.d.ts.map +1 -0
- package/dist/story-generator/logger.js +96 -29
- package/dist/story-generator/postProcessStory.d.ts +6 -0
- package/dist/story-generator/postProcessStory.d.ts.map +1 -0
- package/dist/story-generator/productionGitignoreManager.d.ts +91 -0
- package/dist/story-generator/productionGitignoreManager.d.ts.map +1 -0
- package/dist/story-generator/promptGenerator.d.ts +48 -0
- package/dist/story-generator/promptGenerator.d.ts.map +1 -0
- package/dist/story-generator/promptGenerator.js +186 -1
- package/dist/story-generator/storyHistory.d.ts +44 -0
- package/dist/story-generator/storyHistory.d.ts.map +1 -0
- package/dist/story-generator/storySync.d.ts +68 -0
- package/dist/story-generator/storySync.d.ts.map +1 -0
- package/dist/story-generator/storyTracker.d.ts +48 -0
- package/dist/story-generator/storyTracker.d.ts.map +1 -0
- package/dist/story-generator/storyValidator.d.ts +6 -0
- package/dist/story-generator/storyValidator.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts +68 -0
- package/dist/story-generator/universalDesignSystemAdapter.d.ts.map +1 -0
- package/dist/story-generator/universalDesignSystemAdapter.js +138 -1
- package/dist/story-generator/urlRedirectService.d.ts +21 -0
- package/dist/story-generator/urlRedirectService.d.ts.map +1 -0
- package/dist/story-generator/validateStory.d.ts +19 -0
- package/dist/story-generator/validateStory.d.ts.map +1 -0
- package/dist/story-generator/validateStory.js +6 -2
- package/dist/story-generator/visionPrompts.d.ts +88 -0
- package/dist/story-generator/visionPrompts.d.ts.map +1 -0
- package/dist/story-generator/visionPrompts.js +462 -0
- package/dist/story-ui.config.d.ts +78 -0
- package/dist/story-ui.config.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts +4 -0
- package/dist/templates/StoryUI/StoryUIPanel.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.js +1874 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts +18 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.d.ts.map +1 -0
- package/dist/templates/StoryUI/StoryUIPanel.stories.js +37 -0
- package/dist/templates/StoryUI/index.d.ts +3 -0
- package/dist/templates/StoryUI/index.d.ts.map +1 -0
- package/dist/templates/StoryUI/index.js +2 -0
- package/package.json +17 -3
- package/templates/StoryUI/StoryUIPanel.tsx +1960 -384
- package/templates/StoryUI/index.tsx +1 -1
- package/templates/StoryUI/manager.tsx +264 -0
- package/templates/production-app/.env.example +11 -0
- package/templates/production-app/index.html +66 -0
- package/templates/production-app/package.json +30 -0
- package/templates/production-app/public/favicon.svg +5 -0
- package/templates/production-app/src/App.tsx +1157 -0
- package/templates/production-app/src/LivePreviewRenderer.tsx +420 -0
- package/templates/production-app/src/componentRegistry.ts +315 -0
- package/templates/production-app/src/considerations.ts +16 -0
- package/templates/production-app/src/index.css +284 -0
- package/templates/production-app/src/main.tsx +25 -0
- package/templates/production-app/tsconfig.json +32 -0
- package/templates/production-app/tsconfig.node.json +11 -0
- package/templates/production-app/vite.config.ts +83 -0
- package/templates/react-import-rule.json +2 -2
- package/dist/index.js +0 -12
- package/dist/story-ui.config.loader.js +0 -205
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../../story-generator/framework-adapters/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;GAEG;AACH,8BAAsB,oBAAqB,YAAW,gBAAgB;IACpE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,EAAE,cAAc,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,oBAAoB,CAC3B,MAAM,EAAE,aAAa,EACrB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM;IAET;;OAEG;IACH,0BAA0B,CACxB,UAAU,EAAE,mBAAmB,EAAE,EACjC,MAAM,EAAE,aAAa,GACpB,MAAM;IAmBT;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAC5B,SAAS,EAAE,mBAAmB,EAC9B,MAAM,EAAE,aAAa,GACpB,MAAM;IAkBT;;OAEG;IACH,SAAS,CAAC,aAAa,CACrB,SAAS,EAAE,mBAAmB,EAC9B,MAAM,EAAE,aAAa,GACpB,MAAM;IAUT;;OAEG;IACH,SAAS,CAAC,wBAAwB,CAChC,UAAU,EAAE,mBAAmB,EAAE,GAChC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAcxC;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IAExD;;OAEG;IACH,QAAQ,CAAC,mBAAmB,CAC1B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,mBAAmB,EAAE,GAChC,MAAM;IAET;;OAEG;IACH,eAAe,CACb,UAAU,EAAE,mBAAmB,EAAE,EACjC,MAAM,EAAE,aAAa,GACpB,MAAM;IAoBT;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQzC;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAkBpE;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM;IAEnE;;OAEG;IACH,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIpE;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,MAAM;CAoBnC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Framework Adapter
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class that provides common functionality for all
|
|
5
|
+
* framework-specific adapters. Subclasses implement framework-specific
|
|
6
|
+
* prompt generation and story templates.
|
|
7
|
+
*/
|
|
8
|
+
import { logger } from '../logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Abstract Base Framework Adapter
|
|
11
|
+
*/
|
|
12
|
+
export class BaseFrameworkAdapter {
|
|
13
|
+
/**
|
|
14
|
+
* Generate component reference documentation
|
|
15
|
+
*/
|
|
16
|
+
generateComponentReference(components, config) {
|
|
17
|
+
if (components.length === 0) {
|
|
18
|
+
return 'No components discovered.';
|
|
19
|
+
}
|
|
20
|
+
const groupedComponents = this.groupComponentsByPackage(components);
|
|
21
|
+
const sections = [];
|
|
22
|
+
for (const [packageName, pkgComponents] of Object.entries(groupedComponents)) {
|
|
23
|
+
const componentList = pkgComponents
|
|
24
|
+
.map(comp => this.formatComponentEntry(comp, config))
|
|
25
|
+
.join('\n');
|
|
26
|
+
sections.push(`## ${packageName}\n${componentList}`);
|
|
27
|
+
}
|
|
28
|
+
return `# Available Components\n\n${sections.join('\n\n')}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Format a single component entry
|
|
32
|
+
*/
|
|
33
|
+
formatComponentEntry(component, config) {
|
|
34
|
+
const importPath = this.getImportPath(component, config);
|
|
35
|
+
let entry = `- **${component.name}** (import from '${importPath}')`;
|
|
36
|
+
if (component.props && component.props.length > 0) {
|
|
37
|
+
const propsList = component.props
|
|
38
|
+
.slice(0, 5) // Limit to first 5 props
|
|
39
|
+
.join(', ');
|
|
40
|
+
entry += `\n Props: ${propsList}${component.props.length > 5 ? '...' : ''}`;
|
|
41
|
+
}
|
|
42
|
+
if (component.description) {
|
|
43
|
+
entry += `\n ${component.description}`;
|
|
44
|
+
}
|
|
45
|
+
return entry;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the import path for a component
|
|
49
|
+
*/
|
|
50
|
+
getImportPath(component, config) {
|
|
51
|
+
// Use component's __componentPath if available
|
|
52
|
+
if (component.__componentPath) {
|
|
53
|
+
return component.__componentPath;
|
|
54
|
+
}
|
|
55
|
+
// Fall back to import path from config
|
|
56
|
+
return config.importPath || 'unknown';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Group components by their category
|
|
60
|
+
*/
|
|
61
|
+
groupComponentsByPackage(components) {
|
|
62
|
+
const grouped = {};
|
|
63
|
+
for (const component of components) {
|
|
64
|
+
const category = component.category || 'other';
|
|
65
|
+
if (!grouped[category]) {
|
|
66
|
+
grouped[category] = [];
|
|
67
|
+
}
|
|
68
|
+
grouped[category].push(component);
|
|
69
|
+
}
|
|
70
|
+
return grouped;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Generate import statements for components
|
|
74
|
+
*/
|
|
75
|
+
generateImports(components, config) {
|
|
76
|
+
const importsByPath = new Map();
|
|
77
|
+
for (const component of components) {
|
|
78
|
+
const importPath = this.getImportPath(component, config);
|
|
79
|
+
if (!importsByPath.has(importPath)) {
|
|
80
|
+
importsByPath.set(importPath, new Set());
|
|
81
|
+
}
|
|
82
|
+
importsByPath.get(importPath).add(component.name);
|
|
83
|
+
}
|
|
84
|
+
const imports = [];
|
|
85
|
+
for (const [path, names] of importsByPath) {
|
|
86
|
+
const namedImports = Array.from(names).sort().join(', ');
|
|
87
|
+
imports.push(`import { ${namedImports} } from '${path}';`);
|
|
88
|
+
}
|
|
89
|
+
return imports.join('\n');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Post-process generated story content
|
|
93
|
+
*/
|
|
94
|
+
postProcess(storyContent) {
|
|
95
|
+
// Default implementation - can be overridden by subclasses
|
|
96
|
+
return storyContent
|
|
97
|
+
.trim()
|
|
98
|
+
.replace(/\r\n/g, '\n')
|
|
99
|
+
.replace(/\n{3,}/g, '\n\n');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate generated story syntax
|
|
103
|
+
*/
|
|
104
|
+
validate(storyContent) {
|
|
105
|
+
const errors = [];
|
|
106
|
+
if (!storyContent || storyContent.trim().length === 0) {
|
|
107
|
+
errors.push('Story content is empty');
|
|
108
|
+
}
|
|
109
|
+
// Check for common issues
|
|
110
|
+
if (!storyContent.includes('export')) {
|
|
111
|
+
errors.push('Story missing exports');
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
valid: errors.length === 0,
|
|
115
|
+
errors,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Log adapter activity
|
|
120
|
+
*/
|
|
121
|
+
log(message, data) {
|
|
122
|
+
logger.debug(`[${this.name}Adapter] ${message}`, data);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get common story structure rules
|
|
126
|
+
*/
|
|
127
|
+
getCommonRules() {
|
|
128
|
+
return `
|
|
129
|
+
GENERAL RULES:
|
|
130
|
+
- Follow the component library's design patterns
|
|
131
|
+
- Use meaningful story names that describe the variant
|
|
132
|
+
- Include multiple stories showing different states/variants
|
|
133
|
+
- Ensure accessibility by using proper ARIA attributes
|
|
134
|
+
- Use realistic placeholder content
|
|
135
|
+
|
|
136
|
+
IMAGE RULES:
|
|
137
|
+
- Use Lorem Picsum for placeholder images: https://picsum.photos/[width]/[height]
|
|
138
|
+
- Always include alt text for images
|
|
139
|
+
- Example: https://picsum.photos/400/300?random=1
|
|
140
|
+
|
|
141
|
+
SPACING RULES:
|
|
142
|
+
- Use the design system's spacing tokens when available
|
|
143
|
+
- Maintain consistent margins and padding
|
|
144
|
+
- Follow the layout grid system if present
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Detection System
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects the component framework and story framework
|
|
5
|
+
* used in a project by analyzing package.json, config files, and
|
|
6
|
+
* file patterns.
|
|
7
|
+
*/
|
|
8
|
+
import { FrameworkType, FrameworkDetectionResult } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Framework Detector Class
|
|
11
|
+
*/
|
|
12
|
+
export declare class FrameworkDetector {
|
|
13
|
+
private projectRoot;
|
|
14
|
+
private packageJson;
|
|
15
|
+
private dependencies;
|
|
16
|
+
private detectedConfigFiles;
|
|
17
|
+
constructor(projectRoot?: string);
|
|
18
|
+
/**
|
|
19
|
+
* Detect frameworks used in the project
|
|
20
|
+
*/
|
|
21
|
+
detect(): Promise<FrameworkDetectionResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Load and parse package.json
|
|
24
|
+
*/
|
|
25
|
+
private loadPackageJson;
|
|
26
|
+
/**
|
|
27
|
+
* Scan for framework configuration files
|
|
28
|
+
*/
|
|
29
|
+
private scanConfigFiles;
|
|
30
|
+
/**
|
|
31
|
+
* Score each framework pattern based on evidence
|
|
32
|
+
*/
|
|
33
|
+
private scoreFrameworks;
|
|
34
|
+
/**
|
|
35
|
+
* Get framework version from dependencies
|
|
36
|
+
*/
|
|
37
|
+
private getFrameworkVersion;
|
|
38
|
+
/**
|
|
39
|
+
* Get framework-specific configuration
|
|
40
|
+
*/
|
|
41
|
+
private getFrameworkConfig;
|
|
42
|
+
/**
|
|
43
|
+
* Quick check for a specific framework
|
|
44
|
+
*/
|
|
45
|
+
hasFramework(framework: FrameworkType): boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Factory function for framework detection
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectFramework(projectRoot?: string): Promise<FrameworkDetectionResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Get framework detector instance
|
|
53
|
+
*/
|
|
54
|
+
export declare function getFrameworkDetector(projectRoot?: string): FrameworkDetector;
|
|
55
|
+
//# sourceMappingURL=framework-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-detector.d.ts","sourceRoot":"","sources":["../../../story-generator/framework-adapters/framework-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,aAAa,EAGb,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAmGpB;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,mBAAmB,CAAgB;gBAE/B,WAAW,GAAE,MAAsB;IAI/C;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAkDjD;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwD1B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;CAchD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAGvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE5E"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Detection System
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects the component framework and story framework
|
|
5
|
+
* used in a project by analyzing package.json, config files, and
|
|
6
|
+
* file patterns.
|
|
7
|
+
*/
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { logger } from '../logger.js';
|
|
11
|
+
const FRAMEWORK_PATTERNS = [
|
|
12
|
+
// React
|
|
13
|
+
{
|
|
14
|
+
framework: 'react',
|
|
15
|
+
storyFramework: 'storybook-react',
|
|
16
|
+
packageIndicators: ['react', 'react-dom', '@storybook/react', '@storybook/react-vite', '@storybook/react-webpack5'],
|
|
17
|
+
configFiles: ['.storybook/main.js', '.storybook/main.ts', '.storybook/preview.js'],
|
|
18
|
+
filePatterns: ['*.jsx', '*.tsx', '*.stories.tsx', '*.stories.jsx'],
|
|
19
|
+
weight: 10,
|
|
20
|
+
},
|
|
21
|
+
// Vue 3
|
|
22
|
+
{
|
|
23
|
+
framework: 'vue',
|
|
24
|
+
storyFramework: 'storybook-vue3',
|
|
25
|
+
packageIndicators: ['vue', '@vue/runtime-core', '@storybook/vue3', '@storybook/vue3-vite'],
|
|
26
|
+
configFiles: ['vite.config.ts', 'vue.config.js', 'nuxt.config.ts'],
|
|
27
|
+
filePatterns: ['*.vue', '*.stories.ts'],
|
|
28
|
+
weight: 10,
|
|
29
|
+
},
|
|
30
|
+
// Angular
|
|
31
|
+
{
|
|
32
|
+
framework: 'angular',
|
|
33
|
+
storyFramework: 'storybook-angular',
|
|
34
|
+
packageIndicators: ['@angular/core', '@angular/common', '@storybook/angular'],
|
|
35
|
+
configFiles: ['angular.json', 'ng-package.json'],
|
|
36
|
+
filePatterns: ['*.component.ts', '*.stories.ts'],
|
|
37
|
+
weight: 10,
|
|
38
|
+
},
|
|
39
|
+
// Svelte
|
|
40
|
+
{
|
|
41
|
+
framework: 'svelte',
|
|
42
|
+
storyFramework: 'storybook-svelte',
|
|
43
|
+
packageIndicators: ['svelte', '@sveltejs/kit', '@storybook/svelte', '@storybook/svelte-vite'],
|
|
44
|
+
configFiles: ['svelte.config.js', 'svelte.config.ts'],
|
|
45
|
+
filePatterns: ['*.svelte', '*.stories.svelte'],
|
|
46
|
+
weight: 10,
|
|
47
|
+
},
|
|
48
|
+
// Web Components
|
|
49
|
+
{
|
|
50
|
+
framework: 'web-components',
|
|
51
|
+
storyFramework: 'storybook-web-components',
|
|
52
|
+
packageIndicators: ['lit', 'lit-element', 'lit-html', '@storybook/web-components', '@open-wc/testing'],
|
|
53
|
+
configFiles: ['web-dev-server.config.js', 'custom-elements.json'],
|
|
54
|
+
filePatterns: ['*.element.ts', '*.element.js'],
|
|
55
|
+
weight: 10,
|
|
56
|
+
},
|
|
57
|
+
// Solid
|
|
58
|
+
{
|
|
59
|
+
framework: 'solid',
|
|
60
|
+
storyFramework: 'storybook-react', // Uses React adapter with solid-js
|
|
61
|
+
packageIndicators: ['solid-js', '@solidjs/router'],
|
|
62
|
+
configFiles: ['vite.config.ts'],
|
|
63
|
+
filePatterns: ['*.tsx', '*.jsx'],
|
|
64
|
+
weight: 8,
|
|
65
|
+
},
|
|
66
|
+
// Qwik
|
|
67
|
+
{
|
|
68
|
+
framework: 'qwik',
|
|
69
|
+
storyFramework: 'custom',
|
|
70
|
+
packageIndicators: ['@builder.io/qwik', '@builder.io/qwik-city'],
|
|
71
|
+
configFiles: ['qwik.config.ts'],
|
|
72
|
+
filePatterns: ['*.tsx'],
|
|
73
|
+
weight: 8,
|
|
74
|
+
},
|
|
75
|
+
// Histoire (Vue alternative)
|
|
76
|
+
{
|
|
77
|
+
framework: 'vue',
|
|
78
|
+
storyFramework: 'histoire',
|
|
79
|
+
packageIndicators: ['histoire', '@histoire/plugin-vue'],
|
|
80
|
+
configFiles: ['histoire.config.ts', 'histoire.config.js'],
|
|
81
|
+
filePatterns: ['*.story.vue'],
|
|
82
|
+
weight: 12,
|
|
83
|
+
},
|
|
84
|
+
// Ladle (React alternative)
|
|
85
|
+
{
|
|
86
|
+
framework: 'react',
|
|
87
|
+
storyFramework: 'ladle',
|
|
88
|
+
packageIndicators: ['@ladle/react'],
|
|
89
|
+
configFiles: ['.ladle/config.mjs'],
|
|
90
|
+
filePatterns: ['*.stories.tsx'],
|
|
91
|
+
weight: 12,
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
/**
|
|
95
|
+
* Framework Detector Class
|
|
96
|
+
*/
|
|
97
|
+
export class FrameworkDetector {
|
|
98
|
+
constructor(projectRoot = process.cwd()) {
|
|
99
|
+
this.packageJson = null;
|
|
100
|
+
this.dependencies = {};
|
|
101
|
+
this.detectedConfigFiles = [];
|
|
102
|
+
this.projectRoot = projectRoot;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Detect frameworks used in the project
|
|
106
|
+
*/
|
|
107
|
+
async detect() {
|
|
108
|
+
logger.debug('Starting framework detection', { projectRoot: this.projectRoot });
|
|
109
|
+
// Load package.json
|
|
110
|
+
await this.loadPackageJson();
|
|
111
|
+
// Scan for config files
|
|
112
|
+
this.scanConfigFiles();
|
|
113
|
+
// Score each framework pattern
|
|
114
|
+
const frameworkScores = this.scoreFrameworks();
|
|
115
|
+
// Sort by score descending
|
|
116
|
+
const sortedFrameworks = frameworkScores
|
|
117
|
+
.filter(f => f.score > 0)
|
|
118
|
+
.sort((a, b) => b.score - a.score);
|
|
119
|
+
// Convert to DetectedFramework objects
|
|
120
|
+
const detectedFrameworks = sortedFrameworks.map(f => ({
|
|
121
|
+
componentFramework: f.pattern.framework,
|
|
122
|
+
storyFramework: f.pattern.storyFramework,
|
|
123
|
+
version: this.getFrameworkVersion(f.pattern.framework),
|
|
124
|
+
config: this.getFrameworkConfig(f.pattern.framework),
|
|
125
|
+
confidence: Math.min(f.score / 30, 1), // Normalize to 0-1
|
|
126
|
+
}));
|
|
127
|
+
// Default to React if nothing detected
|
|
128
|
+
const defaultFramework = {
|
|
129
|
+
componentFramework: 'react',
|
|
130
|
+
storyFramework: 'storybook-react',
|
|
131
|
+
config: this.getFrameworkConfig('react'),
|
|
132
|
+
confidence: 0.5,
|
|
133
|
+
};
|
|
134
|
+
const primary = detectedFrameworks[0] || defaultFramework;
|
|
135
|
+
logger.info('Framework detection complete', {
|
|
136
|
+
primary: primary.componentFramework,
|
|
137
|
+
storyFramework: primary.storyFramework,
|
|
138
|
+
confidence: primary.confidence,
|
|
139
|
+
});
|
|
140
|
+
return {
|
|
141
|
+
frameworks: detectedFrameworks.length > 0 ? detectedFrameworks : [defaultFramework],
|
|
142
|
+
primary,
|
|
143
|
+
dependencies: this.dependencies,
|
|
144
|
+
configFiles: this.detectedConfigFiles,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Load and parse package.json
|
|
149
|
+
*/
|
|
150
|
+
async loadPackageJson() {
|
|
151
|
+
const packagePath = path.join(this.projectRoot, 'package.json');
|
|
152
|
+
try {
|
|
153
|
+
if (fs.existsSync(packagePath)) {
|
|
154
|
+
const content = fs.readFileSync(packagePath, 'utf-8');
|
|
155
|
+
this.packageJson = JSON.parse(content);
|
|
156
|
+
// Merge all dependencies
|
|
157
|
+
this.dependencies = {
|
|
158
|
+
...(this.packageJson?.dependencies || {}),
|
|
159
|
+
...(this.packageJson?.devDependencies || {}),
|
|
160
|
+
...(this.packageJson?.peerDependencies || {}),
|
|
161
|
+
};
|
|
162
|
+
logger.debug('Loaded package.json', {
|
|
163
|
+
dependencyCount: Object.keys(this.dependencies).length,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
logger.warn('Failed to load package.json', { error });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Scan for framework configuration files
|
|
173
|
+
*/
|
|
174
|
+
scanConfigFiles() {
|
|
175
|
+
const allConfigFiles = new Set();
|
|
176
|
+
for (const pattern of FRAMEWORK_PATTERNS) {
|
|
177
|
+
for (const configFile of pattern.configFiles) {
|
|
178
|
+
allConfigFiles.add(configFile);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
for (const configFile of allConfigFiles) {
|
|
182
|
+
const fullPath = path.join(this.projectRoot, configFile);
|
|
183
|
+
if (fs.existsSync(fullPath)) {
|
|
184
|
+
this.detectedConfigFiles.push(configFile);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
logger.debug('Config files detected', {
|
|
188
|
+
configFiles: this.detectedConfigFiles,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Score each framework pattern based on evidence
|
|
193
|
+
*/
|
|
194
|
+
scoreFrameworks() {
|
|
195
|
+
return FRAMEWORK_PATTERNS.map(pattern => {
|
|
196
|
+
let score = 0;
|
|
197
|
+
// Check package indicators
|
|
198
|
+
for (const pkg of pattern.packageIndicators) {
|
|
199
|
+
if (this.dependencies[pkg]) {
|
|
200
|
+
score += pattern.weight;
|
|
201
|
+
// Extra weight for Storybook packages
|
|
202
|
+
if (pkg.startsWith('@storybook/')) {
|
|
203
|
+
score += 5;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Check config files
|
|
208
|
+
for (const configFile of pattern.configFiles) {
|
|
209
|
+
if (this.detectedConfigFiles.includes(configFile)) {
|
|
210
|
+
score += pattern.weight / 2;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return { pattern, score };
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get framework version from dependencies
|
|
218
|
+
*/
|
|
219
|
+
getFrameworkVersion(framework) {
|
|
220
|
+
const versionMap = {
|
|
221
|
+
'react': ['react'],
|
|
222
|
+
'vue': ['vue'],
|
|
223
|
+
'angular': ['@angular/core'],
|
|
224
|
+
'svelte': ['svelte'],
|
|
225
|
+
'web-components': ['lit', 'lit-element'],
|
|
226
|
+
'solid': ['solid-js'],
|
|
227
|
+
'qwik': ['@builder.io/qwik'],
|
|
228
|
+
};
|
|
229
|
+
const packages = versionMap[framework] || [];
|
|
230
|
+
for (const pkg of packages) {
|
|
231
|
+
if (this.dependencies[pkg]) {
|
|
232
|
+
return this.dependencies[pkg].replace(/[\^~]/, '');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Get framework-specific configuration
|
|
239
|
+
*/
|
|
240
|
+
getFrameworkConfig(framework) {
|
|
241
|
+
const configs = {
|
|
242
|
+
'react': {
|
|
243
|
+
importStyle: 'named',
|
|
244
|
+
storyExtension: '.stories.tsx',
|
|
245
|
+
typescript: true,
|
|
246
|
+
jsx: true,
|
|
247
|
+
componentExtension: '.tsx',
|
|
248
|
+
},
|
|
249
|
+
'vue': {
|
|
250
|
+
importStyle: 'default',
|
|
251
|
+
storyExtension: '.stories.ts',
|
|
252
|
+
typescript: true,
|
|
253
|
+
jsx: false,
|
|
254
|
+
componentExtension: '.vue',
|
|
255
|
+
},
|
|
256
|
+
'angular': {
|
|
257
|
+
importStyle: 'named',
|
|
258
|
+
storyExtension: '.stories.ts',
|
|
259
|
+
typescript: true,
|
|
260
|
+
jsx: false,
|
|
261
|
+
componentExtension: '.component.ts',
|
|
262
|
+
},
|
|
263
|
+
'svelte': {
|
|
264
|
+
importStyle: 'default',
|
|
265
|
+
storyExtension: '.stories.svelte',
|
|
266
|
+
typescript: true,
|
|
267
|
+
jsx: false,
|
|
268
|
+
componentExtension: '.svelte',
|
|
269
|
+
},
|
|
270
|
+
'web-components': {
|
|
271
|
+
importStyle: 'named',
|
|
272
|
+
storyExtension: '.stories.ts',
|
|
273
|
+
typescript: true,
|
|
274
|
+
jsx: false,
|
|
275
|
+
componentExtension: '.ts',
|
|
276
|
+
},
|
|
277
|
+
'solid': {
|
|
278
|
+
importStyle: 'named',
|
|
279
|
+
storyExtension: '.stories.tsx',
|
|
280
|
+
typescript: true,
|
|
281
|
+
jsx: true,
|
|
282
|
+
componentExtension: '.tsx',
|
|
283
|
+
},
|
|
284
|
+
'qwik': {
|
|
285
|
+
importStyle: 'named',
|
|
286
|
+
storyExtension: '.stories.tsx',
|
|
287
|
+
typescript: true,
|
|
288
|
+
jsx: true,
|
|
289
|
+
componentExtension: '.tsx',
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
return configs[framework] || configs['react'];
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Quick check for a specific framework
|
|
296
|
+
*/
|
|
297
|
+
hasFramework(framework) {
|
|
298
|
+
const packageMap = {
|
|
299
|
+
'react': ['react', 'react-dom'],
|
|
300
|
+
'vue': ['vue'],
|
|
301
|
+
'angular': ['@angular/core'],
|
|
302
|
+
'svelte': ['svelte'],
|
|
303
|
+
'web-components': ['lit', 'lit-element', '@open-wc/testing'],
|
|
304
|
+
'solid': ['solid-js'],
|
|
305
|
+
'qwik': ['@builder.io/qwik'],
|
|
306
|
+
};
|
|
307
|
+
const packages = packageMap[framework] || [];
|
|
308
|
+
return packages.some(pkg => !!this.dependencies[pkg]);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Factory function for framework detection
|
|
313
|
+
*/
|
|
314
|
+
export function detectFramework(projectRoot) {
|
|
315
|
+
const detector = new FrameworkDetector(projectRoot);
|
|
316
|
+
return detector.detect();
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get framework detector instance
|
|
320
|
+
*/
|
|
321
|
+
export function getFrameworkDetector(projectRoot) {
|
|
322
|
+
return new FrameworkDetector(projectRoot);
|
|
323
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework Adapters Module
|
|
3
|
+
*
|
|
4
|
+
* Exports framework detection, adapters, and the adapter registry.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { FrameworkDetector, detectFramework, getFrameworkDetector, } from './framework-detector.js';
|
|
8
|
+
export { BaseFrameworkAdapter } from './base-adapter.js';
|
|
9
|
+
export { ReactAdapter, createReactAdapter } from './react-adapter.js';
|
|
10
|
+
export { WebComponentsAdapter, createWebComponentsAdapter } from './web-components-adapter.js';
|
|
11
|
+
export { VueAdapter, createVueAdapter } from './vue-adapter.js';
|
|
12
|
+
export { AngularAdapter, createAngularAdapter } from './angular-adapter.js';
|
|
13
|
+
export { SvelteAdapter, createSvelteAdapter } from './svelte-adapter.js';
|
|
14
|
+
import { FrameworkType, FrameworkAdapter, DetectedFramework, FrameworkPrompt, StoryGenerationOptions } from './types.js';
|
|
15
|
+
import { StoryUIConfig } from '../../story-ui.config.js';
|
|
16
|
+
import { DiscoveredComponent } from '../componentDiscovery.js';
|
|
17
|
+
/**
|
|
18
|
+
* Framework Adapter Registry
|
|
19
|
+
*
|
|
20
|
+
* Manages available framework adapters and provides
|
|
21
|
+
* automatic framework detection and adapter selection.
|
|
22
|
+
*/
|
|
23
|
+
declare class AdapterRegistry {
|
|
24
|
+
private adapters;
|
|
25
|
+
private defaultAdapter;
|
|
26
|
+
private detectedFramework;
|
|
27
|
+
constructor();
|
|
28
|
+
/**
|
|
29
|
+
* Register built-in framework adapters
|
|
30
|
+
*/
|
|
31
|
+
private registerBuiltInAdapters;
|
|
32
|
+
/**
|
|
33
|
+
* Register a framework adapter
|
|
34
|
+
*/
|
|
35
|
+
register(adapter: FrameworkAdapter): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get adapter by framework type
|
|
38
|
+
*/
|
|
39
|
+
get(type: FrameworkType): FrameworkAdapter | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Get all registered adapters
|
|
42
|
+
*/
|
|
43
|
+
getAll(): FrameworkAdapter[];
|
|
44
|
+
/**
|
|
45
|
+
* Get available framework types
|
|
46
|
+
*/
|
|
47
|
+
getAvailableTypes(): FrameworkType[];
|
|
48
|
+
/**
|
|
49
|
+
* Get available framework types (alias for getAvailableTypes)
|
|
50
|
+
*/
|
|
51
|
+
getAvailableFrameworks(): FrameworkType[];
|
|
52
|
+
/**
|
|
53
|
+
* Get adapter by framework type (alias for get with default fallback)
|
|
54
|
+
*/
|
|
55
|
+
getAdapter(type: FrameworkType): FrameworkAdapter;
|
|
56
|
+
/**
|
|
57
|
+
* Get the default adapter
|
|
58
|
+
*/
|
|
59
|
+
getDefault(): FrameworkAdapter;
|
|
60
|
+
/**
|
|
61
|
+
* Set the default adapter
|
|
62
|
+
*/
|
|
63
|
+
setDefault(type: FrameworkType): void;
|
|
64
|
+
/**
|
|
65
|
+
* Auto-detect framework and return appropriate adapter
|
|
66
|
+
*/
|
|
67
|
+
autoDetect(projectRoot?: string): Promise<FrameworkAdapter>;
|
|
68
|
+
/**
|
|
69
|
+
* Get the last detected framework info
|
|
70
|
+
*/
|
|
71
|
+
getDetectedFramework(): DetectedFramework | null;
|
|
72
|
+
/**
|
|
73
|
+
* Generate prompt using the appropriate adapter
|
|
74
|
+
*/
|
|
75
|
+
generatePrompt(config: StoryUIConfig, components: DiscoveredComponent[], options?: StoryGenerationOptions): Promise<FrameworkPrompt>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the global adapter registry instance
|
|
79
|
+
*/
|
|
80
|
+
export declare function getAdapterRegistry(): AdapterRegistry;
|
|
81
|
+
/**
|
|
82
|
+
* Get adapter for a specific framework
|
|
83
|
+
*/
|
|
84
|
+
export declare function getAdapter(type: FrameworkType): FrameworkAdapter | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Get the default adapter
|
|
87
|
+
*/
|
|
88
|
+
export declare function getDefaultAdapter(): FrameworkAdapter;
|
|
89
|
+
/**
|
|
90
|
+
* Auto-detect framework and get appropriate adapter
|
|
91
|
+
*/
|
|
92
|
+
export declare function autoDetectAdapter(projectRoot?: string): Promise<FrameworkAdapter>;
|
|
93
|
+
/**
|
|
94
|
+
* Generate framework-specific prompt
|
|
95
|
+
*/
|
|
96
|
+
export declare function generateFrameworkPrompt(config: StoryUIConfig, components: DiscoveredComponent[], options?: StoryGenerationOptions): Promise<FrameworkPrompt>;
|
|
97
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../story-generator/framework-adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAOpB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;;;GAKG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,iBAAiB,CAAkC;;IAU3D;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAIzC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS;IAItD;;OAEG;IACH,MAAM,IAAI,gBAAgB,EAAE;IAI5B;;OAEG;IACH,iBAAiB,IAAI,aAAa,EAAE;IAIpC;;OAEG;IACH,sBAAsB,IAAI,aAAa,EAAE;IAIzC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB;IAIjD;;OAEG;IACH,UAAU,IAAI,gBAAgB;IAI9B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAQrC;;OAEG;IACG,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoBjE;;OAEG;IACH,oBAAoB,IAAI,iBAAiB,GAAG,IAAI;IAIhD;;OAEG;IACG,cAAc,CAClB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,eAAe,CAAC;CA8B5B;AAKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,gBAAgB,CAEpD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEvF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAE1B"}
|