mycontext-cli 1.0.95 → 2.0.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/README.md +424 -202
- package/dist/agents/implementations/ClaudeAgentWorkflow.d.ts.map +1 -1
- package/dist/agents/implementations/ClaudeAgentWorkflow.js +38 -3
- package/dist/agents/implementations/ClaudeAgentWorkflow.js.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.d.ts +4 -0
- package/dist/agents/implementations/WorkflowAgent.d.ts.map +1 -1
- package/dist/agents/implementations/WorkflowAgent.js +90 -10
- package/dist/agents/implementations/WorkflowAgent.js.map +1 -1
- package/dist/agents/interfaces/SubAgent.d.ts +5 -0
- package/dist/agents/interfaces/SubAgent.d.ts.map +1 -1
- package/dist/commands/build-app.d.ts +5 -0
- package/dist/commands/build-app.d.ts.map +1 -1
- package/dist/commands/build-app.js +127 -4
- package/dist/commands/build-app.js.map +1 -1
- package/dist/commands/compile-prd.d.ts.map +1 -1
- package/dist/commands/compile-prd.js +18 -54
- package/dist/commands/compile-prd.js.map +1 -1
- package/dist/commands/enhance.d.ts +21 -0
- package/dist/commands/enhance.d.ts.map +1 -1
- package/dist/commands/enhance.js +155 -12
- package/dist/commands/enhance.js.map +1 -1
- package/dist/commands/generate-components.d.ts +43 -0
- package/dist/commands/generate-components.d.ts.map +1 -1
- package/dist/commands/generate-components.js +270 -0
- package/dist/commands/generate-components.js.map +1 -1
- package/dist/constants/fileNames.d.ts +68 -0
- package/dist/constants/fileNames.d.ts.map +1 -0
- package/dist/constants/fileNames.js +102 -0
- package/dist/constants/fileNames.js.map +1 -0
- package/dist/interfaces/AIClient.d.ts +198 -0
- package/dist/interfaces/AIClient.d.ts.map +1 -0
- package/dist/interfaces/AIClient.js +40 -0
- package/dist/interfaces/AIClient.js.map +1 -0
- package/dist/package.json +4 -3
- package/dist/types/index.d.ts +423 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/agentDefinitions.d.ts +60 -0
- package/dist/utils/agentDefinitions.d.ts.map +1 -0
- package/dist/utils/agentDefinitions.js +344 -0
- package/dist/utils/agentDefinitions.js.map +1 -0
- package/dist/utils/aiClientFactory.d.ts +93 -0
- package/dist/utils/aiClientFactory.d.ts.map +1 -0
- package/dist/utils/aiClientFactory.js +290 -0
- package/dist/utils/aiClientFactory.js.map +1 -0
- package/dist/utils/aiClientRouter.d.ts +121 -0
- package/dist/utils/aiClientRouter.d.ts.map +1 -0
- package/dist/utils/aiClientRouter.js +401 -0
- package/dist/utils/aiClientRouter.js.map +1 -0
- package/dist/utils/claudeAgentClient.d.ts +79 -11
- package/dist/utils/claudeAgentClient.d.ts.map +1 -1
- package/dist/utils/claudeAgentClient.js +306 -1
- package/dist/utils/claudeAgentClient.js.map +1 -1
- package/dist/utils/claudeClient.d.ts +7 -3
- package/dist/utils/claudeClient.d.ts.map +1 -1
- package/dist/utils/claudeClient.js +28 -5
- package/dist/utils/claudeClient.js.map +1 -1
- package/dist/utils/completeArchitectureEngine.d.ts +67 -0
- package/dist/utils/completeArchitectureEngine.d.ts.map +1 -0
- package/dist/utils/completeArchitectureEngine.js +329 -0
- package/dist/utils/completeArchitectureEngine.js.map +1 -0
- package/dist/utils/contextLoader.d.ts +1 -12
- package/dist/utils/contextLoader.d.ts.map +1 -1
- package/dist/utils/contextLoader.js +29 -150
- package/dist/utils/contextLoader.js.map +1 -1
- package/dist/utils/contextManager.d.ts +2 -12
- package/dist/utils/contextManager.d.ts.map +1 -1
- package/dist/utils/contextManager.js +11 -6
- package/dist/utils/contextManager.js.map +1 -1
- package/dist/utils/mcpTools.d.ts +164 -0
- package/dist/utils/mcpTools.d.ts.map +1 -0
- package/dist/utils/mcpTools.js +385 -0
- package/dist/utils/mcpTools.js.map +1 -0
- package/dist/utils/routeGenerator.d.ts +56 -0
- package/dist/utils/routeGenerator.d.ts.map +1 -0
- package/dist/utils/routeGenerator.js +231 -0
- package/dist/utils/routeGenerator.js.map +1 -0
- package/dist/utils/serverActionGenerator.d.ts +56 -0
- package/dist/utils/serverActionGenerator.d.ts.map +1 -0
- package/dist/utils/serverActionGenerator.js +258 -0
- package/dist/utils/serverActionGenerator.js.map +1 -0
- package/dist/utils/streamingHandler.d.ts +98 -0
- package/dist/utils/streamingHandler.d.ts.map +1 -0
- package/dist/utils/streamingHandler.js +259 -0
- package/dist/utils/streamingHandler.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RouteDefinition, EnhancedComponent, ServerActionDefinition } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Route Generator
|
|
4
|
+
* Generates Next.js App Router routes based on component hierarchy
|
|
5
|
+
*/
|
|
6
|
+
export declare class RouteGenerator {
|
|
7
|
+
/**
|
|
8
|
+
* Generate routes for a component
|
|
9
|
+
*/
|
|
10
|
+
generateRoutes(component: EnhancedComponent, level: number, parentPath?: string): Promise<RouteDefinition[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Generate root route
|
|
13
|
+
*/
|
|
14
|
+
private generateRootRoute;
|
|
15
|
+
/**
|
|
16
|
+
* Generate feature route
|
|
17
|
+
*/
|
|
18
|
+
private generateFeatureRoute;
|
|
19
|
+
/**
|
|
20
|
+
* Generate form routes (create, edit)
|
|
21
|
+
*/
|
|
22
|
+
private generateFormRoutes;
|
|
23
|
+
/**
|
|
24
|
+
* Generate dynamic route
|
|
25
|
+
*/
|
|
26
|
+
private generateDynamicRoute;
|
|
27
|
+
/**
|
|
28
|
+
* Generate route metadata from component and actions
|
|
29
|
+
*/
|
|
30
|
+
generateRouteMetadata(component: EnhancedComponent, actions: ServerActionDefinition[]): RouteDefinition["metadata"];
|
|
31
|
+
/**
|
|
32
|
+
* Determine if component needs a dynamic route
|
|
33
|
+
*/
|
|
34
|
+
private needsDynamicRoute;
|
|
35
|
+
/**
|
|
36
|
+
* Collect all component names from hierarchy
|
|
37
|
+
*/
|
|
38
|
+
private collectComponentNames;
|
|
39
|
+
/**
|
|
40
|
+
* Extract base name from component name (e.g., "ProductForm" -> "Product")
|
|
41
|
+
*/
|
|
42
|
+
private extractBaseName;
|
|
43
|
+
/**
|
|
44
|
+
* Helper: Convert to kebab-case
|
|
45
|
+
*/
|
|
46
|
+
private toKebabCase;
|
|
47
|
+
/**
|
|
48
|
+
* Generate layout file content for route
|
|
49
|
+
*/
|
|
50
|
+
generateLayoutContent(component: EnhancedComponent, childRoutes: RouteDefinition[]): string;
|
|
51
|
+
/**
|
|
52
|
+
* Generate page file content for route
|
|
53
|
+
*/
|
|
54
|
+
generatePageContent(component: EnhancedComponent, route: RouteDefinition): string;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=routeGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/routeGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EAEjB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC;IA0B7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0C1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,sBAAsB,EAAE,GAChC,eAAe,CAAC,UAAU,CAAC;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM;IAmBT;;OAEG;IACH,mBAAmB,CACjB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,eAAe,GACrB,MAAM;CAmBV"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RouteGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Route Generator
|
|
6
|
+
* Generates Next.js App Router routes based on component hierarchy
|
|
7
|
+
*/
|
|
8
|
+
class RouteGenerator {
|
|
9
|
+
/**
|
|
10
|
+
* Generate routes for a component
|
|
11
|
+
*/
|
|
12
|
+
async generateRoutes(component, level, parentPath = "") {
|
|
13
|
+
const routes = [];
|
|
14
|
+
// Root level components get root route
|
|
15
|
+
if (level === 0) {
|
|
16
|
+
routes.push(this.generateRootRoute(component));
|
|
17
|
+
}
|
|
18
|
+
// Feature-level components get their own routes
|
|
19
|
+
if (component.type === "layout" && level === 1) {
|
|
20
|
+
routes.push(this.generateFeatureRoute(component, parentPath));
|
|
21
|
+
}
|
|
22
|
+
// Form components get specific routes
|
|
23
|
+
if (component.type === "form") {
|
|
24
|
+
routes.push(...this.generateFormRoutes(component, parentPath));
|
|
25
|
+
}
|
|
26
|
+
// Generate dynamic routes if needed
|
|
27
|
+
if (this.needsDynamicRoute(component)) {
|
|
28
|
+
routes.push(this.generateDynamicRoute(component, parentPath));
|
|
29
|
+
}
|
|
30
|
+
return routes;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generate root route
|
|
34
|
+
*/
|
|
35
|
+
generateRootRoute(component) {
|
|
36
|
+
return {
|
|
37
|
+
path: "/",
|
|
38
|
+
type: "page",
|
|
39
|
+
page: component.name,
|
|
40
|
+
layout: "RootLayout",
|
|
41
|
+
components: [component.name],
|
|
42
|
+
actions: [],
|
|
43
|
+
metadata: {
|
|
44
|
+
title: component.description || component.name,
|
|
45
|
+
description: `${component.name} - Main Application`,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generate feature route
|
|
51
|
+
*/
|
|
52
|
+
generateFeatureRoute(component, parentPath) {
|
|
53
|
+
const path = `${parentPath}/${this.toKebabCase(component.name)}`;
|
|
54
|
+
return {
|
|
55
|
+
path,
|
|
56
|
+
type: "page",
|
|
57
|
+
page: component.name,
|
|
58
|
+
layout: `${component.name}Layout`,
|
|
59
|
+
components: this.collectComponentNames(component),
|
|
60
|
+
actions: component.actions?.map((a) => a.name) || [],
|
|
61
|
+
metadata: {
|
|
62
|
+
title: component.description || component.name,
|
|
63
|
+
description: component.description,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate form routes (create, edit)
|
|
69
|
+
*/
|
|
70
|
+
generateFormRoutes(component, parentPath) {
|
|
71
|
+
const routes = [];
|
|
72
|
+
const baseName = this.extractBaseName(component.name);
|
|
73
|
+
// Create route
|
|
74
|
+
routes.push({
|
|
75
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/new`,
|
|
76
|
+
type: "page",
|
|
77
|
+
page: component.name,
|
|
78
|
+
layout: `${baseName}Layout`,
|
|
79
|
+
components: [component.name],
|
|
80
|
+
actions: component.actions
|
|
81
|
+
?.filter((a) => a.type === "form-action")
|
|
82
|
+
.map((a) => a.name) || [],
|
|
83
|
+
metadata: {
|
|
84
|
+
title: `Create ${baseName}`,
|
|
85
|
+
description: `Create new ${baseName}`,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
// Edit route
|
|
89
|
+
routes.push({
|
|
90
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/[id]/edit`,
|
|
91
|
+
type: "dynamic",
|
|
92
|
+
page: component.name,
|
|
93
|
+
layout: `${baseName}Layout`,
|
|
94
|
+
components: [component.name],
|
|
95
|
+
actions: component.actions
|
|
96
|
+
?.filter((a) => a.type === "form-action")
|
|
97
|
+
.map((a) => a.name) || [],
|
|
98
|
+
metadata: {
|
|
99
|
+
title: `Edit ${baseName}`,
|
|
100
|
+
description: `Edit existing ${baseName}`,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
return routes;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate dynamic route
|
|
107
|
+
*/
|
|
108
|
+
generateDynamicRoute(component, parentPath) {
|
|
109
|
+
const baseName = this.extractBaseName(component.name);
|
|
110
|
+
return {
|
|
111
|
+
path: `${parentPath}/${this.toKebabCase(baseName)}/[id]`,
|
|
112
|
+
type: "dynamic",
|
|
113
|
+
page: component.name,
|
|
114
|
+
layout: `${baseName}Layout`,
|
|
115
|
+
components: this.collectComponentNames(component),
|
|
116
|
+
actions: component.actions
|
|
117
|
+
?.filter((a) => a.type === "server-action")
|
|
118
|
+
.map((a) => a.name) || [],
|
|
119
|
+
metadata: {
|
|
120
|
+
title: `${baseName} Details`,
|
|
121
|
+
description: `View ${baseName} details`,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Generate route metadata from component and actions
|
|
127
|
+
*/
|
|
128
|
+
generateRouteMetadata(component, actions) {
|
|
129
|
+
return {
|
|
130
|
+
title: component.description || component.name,
|
|
131
|
+
description: component.description,
|
|
132
|
+
openGraph: {
|
|
133
|
+
title: component.description || component.name,
|
|
134
|
+
description: component.description,
|
|
135
|
+
type: "website",
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Determine if component needs a dynamic route
|
|
141
|
+
*/
|
|
142
|
+
needsDynamicRoute(component) {
|
|
143
|
+
// Components that display individual items need dynamic routes
|
|
144
|
+
if (component.name.includes("Detail"))
|
|
145
|
+
return true;
|
|
146
|
+
if (component.name.includes("View"))
|
|
147
|
+
return true;
|
|
148
|
+
// Components with actions that require an ID
|
|
149
|
+
const hasIdAction = component.actions?.some((a) => a.parameters?.includes("id"));
|
|
150
|
+
if (hasIdAction)
|
|
151
|
+
return true;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Collect all component names from hierarchy
|
|
156
|
+
*/
|
|
157
|
+
collectComponentNames(component) {
|
|
158
|
+
const names = [component.name];
|
|
159
|
+
if (component.children) {
|
|
160
|
+
Object.values(component.children).forEach((child) => {
|
|
161
|
+
names.push(...this.collectComponentNames(child));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
return names;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Extract base name from component name (e.g., "ProductForm" -> "Product")
|
|
168
|
+
*/
|
|
169
|
+
extractBaseName(componentName) {
|
|
170
|
+
return componentName
|
|
171
|
+
.replace(/Form$/, "")
|
|
172
|
+
.replace(/List$/, "")
|
|
173
|
+
.replace(/Grid$/, "")
|
|
174
|
+
.replace(/Detail$/, "")
|
|
175
|
+
.replace(/View$/, "")
|
|
176
|
+
.replace(/Card$/, "");
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Helper: Convert to kebab-case
|
|
180
|
+
*/
|
|
181
|
+
toKebabCase(str) {
|
|
182
|
+
return str
|
|
183
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
184
|
+
.replace(/\s+/g, "-")
|
|
185
|
+
.toLowerCase();
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Generate layout file content for route
|
|
189
|
+
*/
|
|
190
|
+
generateLayoutContent(component, childRoutes) {
|
|
191
|
+
return `
|
|
192
|
+
import { ReactNode } from 'react';
|
|
193
|
+
|
|
194
|
+
export default function ${component.name}Layout({
|
|
195
|
+
children,
|
|
196
|
+
}: {
|
|
197
|
+
children: ReactNode;
|
|
198
|
+
}) {
|
|
199
|
+
return (
|
|
200
|
+
<div className="${this.toKebabCase(component.name)}-layout">
|
|
201
|
+
{/* Add layout-specific UI here */}
|
|
202
|
+
{children}
|
|
203
|
+
</div>
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Generate page file content for route
|
|
210
|
+
*/
|
|
211
|
+
generatePageContent(component, route) {
|
|
212
|
+
const isDynamic = route.type === "dynamic";
|
|
213
|
+
const params = isDynamic ? "{ params }: { params: { id: string } }" : "";
|
|
214
|
+
return `
|
|
215
|
+
import { ${component.name} } from '@/components/${this.toKebabCase(component.name)}';
|
|
216
|
+
${route.actions.map((action) => `import { ${action} } from '@/actions/${this.toKebabCase(action)}';`).join("\n")}
|
|
217
|
+
|
|
218
|
+
export default async function ${component.name}Page(${params}) {
|
|
219
|
+
${isDynamic ? "const data = await " + route.actions[0] + "(params.id);" : ""}
|
|
220
|
+
|
|
221
|
+
return (
|
|
222
|
+
<div className="container">
|
|
223
|
+
<${component.name} ${isDynamic ? "data={data}" : ""} />
|
|
224
|
+
</div>
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
exports.RouteGenerator = RouteGenerator;
|
|
231
|
+
//# sourceMappingURL=routeGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeGenerator.js","sourceRoot":"","sources":["../../src/utils/routeGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ServerActionDefinition, ActionDefinition, EnhancedComponent, HttpMethod } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Server Action Generator
|
|
4
|
+
* Generates Next.js server actions based on component requirements
|
|
5
|
+
*/
|
|
6
|
+
export declare class ServerActionGenerator {
|
|
7
|
+
/**
|
|
8
|
+
* Generate server actions for a component
|
|
9
|
+
*/
|
|
10
|
+
generateServerActions(component: EnhancedComponent): Promise<ServerActionDefinition[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Generate form submission server action
|
|
13
|
+
*/
|
|
14
|
+
private generateFormSubmitAction;
|
|
15
|
+
/**
|
|
16
|
+
* Generate data fetching server action
|
|
17
|
+
*/
|
|
18
|
+
private generateDataFetchAction;
|
|
19
|
+
/**
|
|
20
|
+
* Generate CRUD actions for interactive components
|
|
21
|
+
*/
|
|
22
|
+
private generateCRUDActions;
|
|
23
|
+
/**
|
|
24
|
+
* Generate client actions that connect to server actions
|
|
25
|
+
*/
|
|
26
|
+
generateClientActions(component: EnhancedComponent, serverActions: ServerActionDefinition[]): ActionDefinition[];
|
|
27
|
+
/**
|
|
28
|
+
* Generate API endpoint definition from server action
|
|
29
|
+
*/
|
|
30
|
+
generateApiEndpoint(serverAction: ServerActionDefinition, component: EnhancedComponent): {
|
|
31
|
+
path: string;
|
|
32
|
+
method: HttpMethod;
|
|
33
|
+
action: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Helper: Get database table name from component
|
|
37
|
+
*/
|
|
38
|
+
private getDatabaseTable;
|
|
39
|
+
/**
|
|
40
|
+
* Helper: Convert to kebab-case
|
|
41
|
+
*/
|
|
42
|
+
private toKebabCase;
|
|
43
|
+
/**
|
|
44
|
+
* Helper: Convert to snake_case
|
|
45
|
+
*/
|
|
46
|
+
private toSnakeCase;
|
|
47
|
+
/**
|
|
48
|
+
* Helper: Pluralize word
|
|
49
|
+
*/
|
|
50
|
+
private pluralize;
|
|
51
|
+
/**
|
|
52
|
+
* Helper: Capitalize first letter
|
|
53
|
+
*/
|
|
54
|
+
private capitalize;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=serverActionGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverActionGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/serverActionGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACX,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,qBAAqB;IAChC;;OAEG;IACG,qBAAqB,CACzB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAqBpC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyF3B;;OAEG;IACH,qBAAqB,CACnB,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,sBAAsB,EAAE,GACtC,gBAAgB,EAAE;IAgBrB;;OAEG;IACH,mBAAmB,CACjB,YAAY,EAAE,sBAAsB,EACpC,SAAS,EAAE,iBAAiB,GAC3B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAevD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerActionGenerator = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Server Action Generator
|
|
6
|
+
* Generates Next.js server actions based on component requirements
|
|
7
|
+
*/
|
|
8
|
+
class ServerActionGenerator {
|
|
9
|
+
/**
|
|
10
|
+
* Generate server actions for a component
|
|
11
|
+
*/
|
|
12
|
+
async generateServerActions(component) {
|
|
13
|
+
const actions = [];
|
|
14
|
+
// Form components need submit actions
|
|
15
|
+
if (component.type === "form") {
|
|
16
|
+
actions.push(this.generateFormSubmitAction(component));
|
|
17
|
+
}
|
|
18
|
+
// Display components need data fetching actions
|
|
19
|
+
if (component.type === "display") {
|
|
20
|
+
actions.push(this.generateDataFetchAction(component));
|
|
21
|
+
}
|
|
22
|
+
// Interactive components may need CRUD actions
|
|
23
|
+
if (component.type === "interactive") {
|
|
24
|
+
actions.push(...this.generateCRUDActions(component));
|
|
25
|
+
}
|
|
26
|
+
return actions;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate form submission server action
|
|
30
|
+
*/
|
|
31
|
+
generateFormSubmitAction(component) {
|
|
32
|
+
const actionName = `submit${component.name}`;
|
|
33
|
+
const tableName = this.getDatabaseTable(component);
|
|
34
|
+
return {
|
|
35
|
+
name: actionName,
|
|
36
|
+
description: `Handle ${component.name} form submission`,
|
|
37
|
+
parameters: [
|
|
38
|
+
{
|
|
39
|
+
name: "formData",
|
|
40
|
+
type: "FormData",
|
|
41
|
+
required: true,
|
|
42
|
+
description: "Form data from client submission",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "userId",
|
|
46
|
+
type: "string",
|
|
47
|
+
required: false,
|
|
48
|
+
description: "Optional user ID for authentication",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
returns: `{ success: boolean; data?: ${component.name}; error?: string }`,
|
|
52
|
+
database: tableName,
|
|
53
|
+
validation: `${component.name.toLowerCase()}Schema`,
|
|
54
|
+
middleware: ["auth", "rateLimit"],
|
|
55
|
+
errorHandling: ["ValidationError", "DatabaseError", "AuthError"],
|
|
56
|
+
caching: {
|
|
57
|
+
strategy: "no-cache",
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate data fetching server action
|
|
63
|
+
*/
|
|
64
|
+
generateDataFetchAction(component) {
|
|
65
|
+
const actionName = `get${this.pluralize(component.name)}`;
|
|
66
|
+
const tableName = this.getDatabaseTable(component);
|
|
67
|
+
return {
|
|
68
|
+
name: actionName,
|
|
69
|
+
description: `Fetch data for ${component.name} display`,
|
|
70
|
+
parameters: [
|
|
71
|
+
{
|
|
72
|
+
name: "filters",
|
|
73
|
+
type: "Record<string, any>",
|
|
74
|
+
required: false,
|
|
75
|
+
description: "Optional filters for data fetching",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "pagination",
|
|
79
|
+
type: "{ page: number; limit: number }",
|
|
80
|
+
required: false,
|
|
81
|
+
description: "Pagination parameters",
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
returns: `${component.name}[]`,
|
|
85
|
+
database: tableName,
|
|
86
|
+
middleware: ["auth"],
|
|
87
|
+
caching: {
|
|
88
|
+
strategy: "revalidate",
|
|
89
|
+
revalidate: 60, // 1 minute
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Generate CRUD actions for interactive components
|
|
95
|
+
*/
|
|
96
|
+
generateCRUDActions(component) {
|
|
97
|
+
const tableName = this.getDatabaseTable(component);
|
|
98
|
+
const actions = [];
|
|
99
|
+
// Create
|
|
100
|
+
actions.push({
|
|
101
|
+
name: `create${component.name}`,
|
|
102
|
+
description: `Create new ${component.name}`,
|
|
103
|
+
parameters: [
|
|
104
|
+
{
|
|
105
|
+
name: "data",
|
|
106
|
+
type: `Omit<${component.name}, 'id'>`,
|
|
107
|
+
required: true,
|
|
108
|
+
description: `${component.name} data without ID`,
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
returns: component.name,
|
|
112
|
+
database: tableName,
|
|
113
|
+
validation: `${component.name.toLowerCase()}Schema`,
|
|
114
|
+
middleware: ["auth", "rateLimit"],
|
|
115
|
+
caching: { strategy: "no-cache" },
|
|
116
|
+
});
|
|
117
|
+
// Read
|
|
118
|
+
actions.push({
|
|
119
|
+
name: `get${component.name}`,
|
|
120
|
+
description: `Get ${component.name} by ID`,
|
|
121
|
+
parameters: [
|
|
122
|
+
{
|
|
123
|
+
name: "id",
|
|
124
|
+
type: "string",
|
|
125
|
+
required: true,
|
|
126
|
+
description: `${component.name} ID`,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
returns: `${component.name} | null`,
|
|
130
|
+
database: tableName,
|
|
131
|
+
middleware: ["auth"],
|
|
132
|
+
caching: { strategy: "revalidate", revalidate: 60 },
|
|
133
|
+
});
|
|
134
|
+
// Update
|
|
135
|
+
actions.push({
|
|
136
|
+
name: `update${component.name}`,
|
|
137
|
+
description: `Update existing ${component.name}`,
|
|
138
|
+
parameters: [
|
|
139
|
+
{
|
|
140
|
+
name: "id",
|
|
141
|
+
type: "string",
|
|
142
|
+
required: true,
|
|
143
|
+
description: `${component.name} ID`,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "data",
|
|
147
|
+
type: `Partial<${component.name}>`,
|
|
148
|
+
required: true,
|
|
149
|
+
description: "Fields to update",
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
returns: component.name,
|
|
153
|
+
database: tableName,
|
|
154
|
+
validation: `${component.name.toLowerCase()}UpdateSchema`,
|
|
155
|
+
middleware: ["auth", "rateLimit"],
|
|
156
|
+
caching: { strategy: "no-cache" },
|
|
157
|
+
});
|
|
158
|
+
// Delete
|
|
159
|
+
actions.push({
|
|
160
|
+
name: `delete${component.name}`,
|
|
161
|
+
description: `Delete ${component.name}`,
|
|
162
|
+
parameters: [
|
|
163
|
+
{
|
|
164
|
+
name: "id",
|
|
165
|
+
type: "string",
|
|
166
|
+
required: true,
|
|
167
|
+
description: `${component.name} ID`,
|
|
168
|
+
},
|
|
169
|
+
],
|
|
170
|
+
returns: "boolean",
|
|
171
|
+
database: tableName,
|
|
172
|
+
middleware: ["auth", "rateLimit"],
|
|
173
|
+
caching: { strategy: "no-cache" },
|
|
174
|
+
});
|
|
175
|
+
return actions;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Generate client actions that connect to server actions
|
|
179
|
+
*/
|
|
180
|
+
generateClientActions(component, serverActions) {
|
|
181
|
+
const clientActions = [];
|
|
182
|
+
serverActions.forEach((serverAction) => {
|
|
183
|
+
clientActions.push({
|
|
184
|
+
name: `handle${this.capitalize(serverAction.name)}`,
|
|
185
|
+
type: "client-action",
|
|
186
|
+
description: `Client-side handler for ${serverAction.name}`,
|
|
187
|
+
parameters: serverAction.parameters.map((p) => p.name),
|
|
188
|
+
serverAction: serverAction.name,
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
return clientActions;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Generate API endpoint definition from server action
|
|
195
|
+
*/
|
|
196
|
+
generateApiEndpoint(serverAction, component) {
|
|
197
|
+
const path = `/api/${this.toKebabCase(component.name)}`;
|
|
198
|
+
let method = "GET";
|
|
199
|
+
if (serverAction.name.startsWith("create"))
|
|
200
|
+
method = "POST";
|
|
201
|
+
if (serverAction.name.startsWith("update"))
|
|
202
|
+
method = "PUT";
|
|
203
|
+
if (serverAction.name.startsWith("delete"))
|
|
204
|
+
method = "DELETE";
|
|
205
|
+
return {
|
|
206
|
+
path,
|
|
207
|
+
method,
|
|
208
|
+
action: serverAction.name,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Helper: Get database table name from component
|
|
213
|
+
*/
|
|
214
|
+
getDatabaseTable(component) {
|
|
215
|
+
if (component.database?.table) {
|
|
216
|
+
return component.database.table;
|
|
217
|
+
}
|
|
218
|
+
return this.toSnakeCase(this.pluralize(component.name));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Helper: Convert to kebab-case
|
|
222
|
+
*/
|
|
223
|
+
toKebabCase(str) {
|
|
224
|
+
return str
|
|
225
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
226
|
+
.replace(/\s+/g, "-")
|
|
227
|
+
.toLowerCase();
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Helper: Convert to snake_case
|
|
231
|
+
*/
|
|
232
|
+
toSnakeCase(str) {
|
|
233
|
+
return str
|
|
234
|
+
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
235
|
+
.replace(/\s+/g, "_")
|
|
236
|
+
.toLowerCase();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Helper: Pluralize word
|
|
240
|
+
*/
|
|
241
|
+
pluralize(word) {
|
|
242
|
+
if (word.endsWith("y")) {
|
|
243
|
+
return word.slice(0, -1) + "ies";
|
|
244
|
+
}
|
|
245
|
+
if (word.endsWith("s")) {
|
|
246
|
+
return word + "es";
|
|
247
|
+
}
|
|
248
|
+
return word + "s";
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Helper: Capitalize first letter
|
|
252
|
+
*/
|
|
253
|
+
capitalize(str) {
|
|
254
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.ServerActionGenerator = ServerActionGenerator;
|
|
258
|
+
//# sourceMappingURL=serverActionGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverActionGenerator.js","sourceRoot":"","sources":["../../src/utils/serverActionGenerator.ts"],"names":[],"mappings":"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"}
|