mycontext-cli 4.2.7 → 4.2.10

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.
Files changed (98) hide show
  1. package/dist/commands/agent.d.ts.map +1 -1
  2. package/dist/commands/agent.js +10 -1
  3. package/dist/commands/agent.js.map +1 -1
  4. package/dist/commands/generate.d.ts.map +1 -1
  5. package/dist/commands/generate.js +19 -60
  6. package/dist/commands/generate.js.map +1 -1
  7. package/dist/commands/init-interactive.d.ts +20 -0
  8. package/dist/commands/init-interactive.d.ts.map +1 -1
  9. package/dist/commands/init-interactive.js +168 -5
  10. package/dist/commands/init-interactive.js.map +1 -1
  11. package/dist/config/shadcn-catalog.json +93 -0
  12. package/dist/core/brain/BrainClient.d.ts +1 -1
  13. package/dist/core/brain/BrainClient.d.ts.map +1 -1
  14. package/dist/core/brain/BrainClient.js +5 -5
  15. package/dist/core/brain/BrainClient.js.map +1 -1
  16. package/dist/doctor/DoctorEngine.d.ts.map +1 -1
  17. package/dist/doctor/DoctorEngine.js +21 -11
  18. package/dist/doctor/DoctorEngine.js.map +1 -1
  19. package/dist/doctor/rules/dead-code-rules.d.ts.map +1 -1
  20. package/dist/doctor/rules/dead-code-rules.js +33 -0
  21. package/dist/doctor/rules/dead-code-rules.js.map +1 -1
  22. package/dist/doctor/rules/instantdb-rules.d.ts.map +1 -1
  23. package/dist/doctor/rules/instantdb-rules.js +278 -69
  24. package/dist/doctor/rules/instantdb-rules.js.map +1 -1
  25. package/dist/doctor/rules/nextjs-rules.d.ts.map +1 -1
  26. package/dist/doctor/rules/nextjs-rules.js +53 -3
  27. package/dist/doctor/rules/nextjs-rules.js.map +1 -1
  28. package/dist/package.json +4 -2
  29. package/dist/services/ComponentInferenceEngine.d.ts +66 -0
  30. package/dist/services/ComponentInferenceEngine.d.ts.map +1 -0
  31. package/dist/services/ComponentInferenceEngine.js +302 -0
  32. package/dist/services/ComponentInferenceEngine.js.map +1 -0
  33. package/dist/services/ComponentRegistry.d.ts +61 -0
  34. package/dist/services/ComponentRegistry.d.ts.map +1 -0
  35. package/dist/services/ComponentRegistry.js +128 -0
  36. package/dist/services/ComponentRegistry.js.map +1 -0
  37. package/dist/services/InferenceEngine.js +1 -1
  38. package/dist/services/ProjectScanner.d.ts.map +1 -1
  39. package/dist/services/ProjectScanner.js +18 -1
  40. package/dist/services/ProjectScanner.js.map +1 -1
  41. package/dist/services/ScaffoldEngine.d.ts +87 -0
  42. package/dist/services/ScaffoldEngine.d.ts.map +1 -0
  43. package/dist/services/ScaffoldEngine.js +409 -0
  44. package/dist/services/ScaffoldEngine.js.map +1 -0
  45. package/dist/services/ScaffoldPreview.d.ts +62 -0
  46. package/dist/services/ScaffoldPreview.d.ts.map +1 -0
  47. package/dist/services/ScaffoldPreview.js +292 -0
  48. package/dist/services/ScaffoldPreview.js.map +1 -0
  49. package/dist/services/TemplateEngine.d.ts +136 -0
  50. package/dist/services/TemplateEngine.d.ts.map +1 -0
  51. package/dist/services/TemplateEngine.js +483 -0
  52. package/dist/services/TemplateEngine.js.map +1 -0
  53. package/dist/services/TemplateHelpers.d.ts +9 -0
  54. package/dist/services/TemplateHelpers.d.ts.map +1 -0
  55. package/dist/services/TemplateHelpers.js +212 -0
  56. package/dist/services/TemplateHelpers.js.map +1 -0
  57. package/dist/templates/actions/auth-actions.ts.hbs +140 -0
  58. package/dist/templates/actions/crud-actions.ts.hbs +113 -0
  59. package/dist/templates/components/auth/login-form.tsx.hbs +67 -0
  60. package/dist/templates/components/auth/login-skeleton.tsx.hbs +24 -0
  61. package/dist/templates/components/auth/register-form.tsx.hbs +116 -0
  62. package/dist/templates/components/crud/entity-card.tsx.hbs +71 -0
  63. package/dist/templates/components/crud/entity-form.tsx.hbs +158 -0
  64. package/dist/templates/components/crud/entity-skeleton.tsx.hbs +90 -0
  65. package/dist/templates/components/crud/entity-table.tsx.hbs +129 -0
  66. package/dist/templates/components/ui/button.tsx.hbs +53 -0
  67. package/dist/templates/components/ui/card.tsx.hbs +68 -0
  68. package/dist/templates/components/ui/input.tsx.hbs +33 -0
  69. package/dist/templates/components/ui/label.tsx.hbs +20 -0
  70. package/dist/templates/components/ui/skeleton.tsx.hbs +15 -0
  71. package/dist/templates/components/ui/theme-provider.tsx.hbs +66 -0
  72. package/dist/templates/components/ui/theme-toggle.tsx.hbs +30 -0
  73. package/dist/templates/config/app.css.hbs +150 -0
  74. package/dist/templates/layouts/dashboard-layout.tsx.hbs +69 -0
  75. package/dist/templates/layouts/error.tsx.hbs +51 -0
  76. package/dist/templates/layouts/loading.tsx.hbs +22 -0
  77. package/dist/templates/layouts/not-found.tsx.hbs +24 -0
  78. package/dist/templates/layouts/root-layout.tsx.hbs +40 -0
  79. package/dist/templates/lib/instant.ts.hbs +19 -0
  80. package/dist/templates/lib/utils.ts.hbs +24 -0
  81. package/dist/templates/pages/auth/login-page.tsx.hbs +30 -0
  82. package/dist/templates/pages/auth/register-page.tsx.hbs +38 -0
  83. package/dist/templates/pages/crud/create-page.tsx.hbs +42 -0
  84. package/dist/templates/pages/crud/detail-page.tsx.hbs +90 -0
  85. package/dist/templates/pages/crud/list-page.tsx.hbs +60 -0
  86. package/dist/templates/pages/crud/loading.tsx.hbs +13 -0
  87. package/dist/templates/pages/landing-page.tsx.hbs +111 -0
  88. package/dist/types/asl.d.ts +1 -1
  89. package/dist/types/asl.d.ts.map +1 -1
  90. package/dist/types/living-context.d.ts +1 -1
  91. package/dist/types/living-context.d.ts.map +1 -1
  92. package/dist/utils/FileGenerator.js +3 -3
  93. package/dist/utils/FileGenerator.js.map +1 -1
  94. package/dist/utils/generateTypesFromSchema.d.ts +47 -0
  95. package/dist/utils/generateTypesFromSchema.d.ts.map +1 -0
  96. package/dist/utils/generateTypesFromSchema.js +298 -0
  97. package/dist/utils/generateTypesFromSchema.js.map +1 -0
  98. package/package.json +4 -2
@@ -0,0 +1,483 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TemplateEngine = void 0;
37
+ const TemplateHelpers_1 = require("./TemplateHelpers");
38
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs-extra"));
40
+ /**
41
+ * TemplateEngine - Generate code from templates
42
+ *
43
+ * Uses Handlebars templates to generate production-ready:
44
+ * - Auth pages and components
45
+ * - RBAC guards and middleware
46
+ * - Entity CRUD pages and components
47
+ * - UI components with CVA variants
48
+ * - Server Actions with validation
49
+ *
50
+ * Templates are in src/templates/ directory
51
+ */
52
+ class TemplateEngine {
53
+ constructor() {
54
+ this.helpers = new TemplateHelpers_1.TemplateHelpers();
55
+ this.templatesDir = path.join(__dirname, "../templates");
56
+ }
57
+ /**
58
+ * Generate authentication pages (login, register)
59
+ */
60
+ async generateAuthPages(projectPath, auth) {
61
+ // Create auth directory
62
+ const authPath = path.join(projectPath, 'app', '(auth)');
63
+ await fs.ensureDir(authPath);
64
+ // Generate login page
65
+ const loginPage = this.generateLoginPage(auth);
66
+ const loginPath = path.join(authPath, 'login');
67
+ await fs.ensureDir(loginPath);
68
+ await fs.writeFile(path.join(loginPath, 'page.tsx'), loginPage);
69
+ // Generate register page
70
+ const registerPage = this.generateRegisterPage(auth);
71
+ const registerPath = path.join(authPath, 'register');
72
+ await fs.ensureDir(registerPath);
73
+ await fs.writeFile(path.join(registerPath, 'page.tsx'), registerPage);
74
+ // Generate auth components
75
+ await this.generateAuthComponents(projectPath, auth);
76
+ }
77
+ /**
78
+ * Generate auth components (LoginForm, RegisterForm)
79
+ */
80
+ async generateAuthComponents(projectPath, auth) {
81
+ const componentsPath = path.join(projectPath, 'components', 'auth');
82
+ await fs.ensureDir(componentsPath);
83
+ // LoginForm (placeholder)
84
+ const loginForm = this.generateLoginForm(auth);
85
+ await fs.writeFile(path.join(componentsPath, 'LoginForm.tsx'), loginForm);
86
+ }
87
+ /**
88
+ * Generate RBAC guards (withAuth, withRole)
89
+ */
90
+ async generateGuards(projectPath, permissions) {
91
+ const guardsPath = path.join(projectPath, 'lib', 'guards');
92
+ await fs.ensureDir(guardsPath);
93
+ // withAuth HOC
94
+ const withAuth = this.generateWithAuthGuard();
95
+ await fs.writeFile(path.join(guardsPath, 'withAuth.tsx'), withAuth);
96
+ // withRole HOC
97
+ const roles = [...new Set(permissions.map(p => p.role))];
98
+ const withRole = this.generateWithRoleGuard(roles);
99
+ await fs.writeFile(path.join(guardsPath, 'withRole.tsx'), withRole);
100
+ }
101
+ /**
102
+ * Generate route protection middleware
103
+ */
104
+ async generateMiddleware(projectPath, permissions) {
105
+ const middleware = this.generateMiddlewareCode(permissions);
106
+ await fs.writeFile(path.join(projectPath, 'middleware.ts'), middleware);
107
+ }
108
+ // ===== Template Generation Methods (Placeholders) =====
109
+ generateLoginPage(auth) {
110
+ return `'use client';
111
+
112
+ import { LoginForm } from '@/components/auth/LoginForm';
113
+
114
+ export default function LoginPage() {
115
+ return (
116
+ <div className="container flex items-center justify-center min-h-screen">
117
+ <div className="w-full max-w-md">
118
+ <h1 className="text-3xl font-bold mb-6">Login</h1>
119
+ <LoginForm />
120
+ </div>
121
+ </div>
122
+ );
123
+ }
124
+ `;
125
+ }
126
+ generateRegisterPage(auth) {
127
+ return `'use client';
128
+
129
+ export default function RegisterPage() {
130
+ return (
131
+ <div className="container flex items-center justify-center min-h-screen">
132
+ <div className="w-full max-w-md">
133
+ <h1 className="text-3xl font-bold mb-6">Register</h1>
134
+ {/* RegisterForm component */}
135
+ </div>
136
+ </div>
137
+ );
138
+ }
139
+ `;
140
+ }
141
+ generateLoginForm(auth) {
142
+ return `'use client';
143
+
144
+ import { Button } from '@/components/ui/button';
145
+ import { Input } from '@/components/ui/input';
146
+ import { Label } from '@/components/ui/label';
147
+
148
+ export function LoginForm() {
149
+ return (
150
+ <form className="space-y-4">
151
+ <div>
152
+ <Label htmlFor="email">Email</Label>
153
+ <Input id="email" type="email" placeholder="you@example.com" />
154
+ </div>
155
+ <div>
156
+ <Label htmlFor="password">Password</Label>
157
+ <Input id="password" type="password" />
158
+ </div>
159
+ <Button type="submit" className="w-full">
160
+ Sign In
161
+ </Button>
162
+ </form>
163
+ );
164
+ }
165
+ `;
166
+ }
167
+ generateWithAuthGuard() {
168
+ return `'use client';
169
+
170
+ import { useEffect } from 'react';
171
+ import { useRouter } from 'next/navigation';
172
+
173
+ export function withAuth<P extends object>(
174
+ Component: React.ComponentType<P>
175
+ ) {
176
+ return function AuthenticatedComponent(props: P) {
177
+ const router = useRouter();
178
+
179
+ useEffect(() => {
180
+ // Check auth status
181
+ const isAuthenticated = false; // TODO: Check InstantDB auth
182
+ if (!isAuthenticated) {
183
+ router.push('/login');
184
+ }
185
+ }, [router]);
186
+
187
+ return <Component {...props} />;
188
+ };
189
+ }
190
+ `;
191
+ }
192
+ generateWithRoleGuard(roles) {
193
+ return `'use client';
194
+
195
+ import { useEffect } from 'react';
196
+ import { useRouter } from 'next/navigation';
197
+
198
+ export function withRole<P extends object>(
199
+ Component: React.ComponentType<P>,
200
+ requiredRole: string
201
+ ) {
202
+ return function RoleProtectedComponent(props: P) {
203
+ const router = useRouter();
204
+
205
+ useEffect(() => {
206
+ // Check role
207
+ const userRole = 'user'; // TODO: Get from InstantDB
208
+ if (userRole !== requiredRole) {
209
+ router.push('/unauthorized');
210
+ }
211
+ }, [router]);
212
+
213
+ return <Component {...props} />;
214
+ };
215
+ }
216
+ `;
217
+ }
218
+ generateMiddlewareCode(permissions) {
219
+ return `import { NextResponse } from 'next/server';
220
+ import type { NextRequest } from 'next/server';
221
+
222
+ export function middleware(request: NextRequest) {
223
+ // TODO: Implement route protection based on permissions
224
+ return NextResponse.next();
225
+ }
226
+
227
+ export const config = {
228
+ matcher: ['/dashboard/:path*', '/admin/:path*']
229
+ };
230
+ `;
231
+ }
232
+ // ===== NEW: Production-Ready Template Methods =====
233
+ /**
234
+ * Generate root layout with font optimization and theme provider
235
+ */
236
+ async generateRootLayout(projectPath, projectName, projectDescription) {
237
+ const templatePath = path.join(this.templatesDir, "layouts/root-layout.tsx.hbs");
238
+ const content = await this.helpers.render(templatePath, {
239
+ projectName,
240
+ projectDescription,
241
+ });
242
+ const outputPath = path.join(projectPath, "app/layout.tsx");
243
+ await fs.writeFile(outputPath, content, "utf-8");
244
+ }
245
+ /**
246
+ * Generate utility files (utils.ts with cn helper)
247
+ */
248
+ async generateUtils(projectPath) {
249
+ const templatePath = path.join(this.templatesDir, "lib/utils.ts.hbs");
250
+ const content = await this.helpers.render(templatePath, {});
251
+ const libDir = path.join(projectPath, "lib");
252
+ await fs.ensureDir(libDir);
253
+ await fs.writeFile(path.join(libDir, "utils.ts"), content, "utf-8");
254
+ }
255
+ /**
256
+ * Generate InstantDB client setup
257
+ */
258
+ async generateInstantClient(projectPath) {
259
+ const templatePath = path.join(this.templatesDir, "lib/instant.ts.hbs");
260
+ const content = await this.helpers.render(templatePath, {});
261
+ const libDir = path.join(projectPath, "lib");
262
+ await fs.ensureDir(libDir);
263
+ await fs.writeFile(path.join(libDir, "instant.ts"), content, "utf-8");
264
+ }
265
+ /**
266
+ * Generate global CSS with Tailwind v4 and design tokens
267
+ */
268
+ async generateGlobalCSS(projectPath) {
269
+ const templatePath = path.join(this.templatesDir, "config/app.css.hbs");
270
+ const content = await this.helpers.render(templatePath, {});
271
+ const appDir = path.join(projectPath, "app");
272
+ await fs.writeFile(path.join(appDir, "app.css"), content, "utf-8");
273
+ }
274
+ /**
275
+ * Generate theme provider component
276
+ */
277
+ async generateThemeProvider(projectPath) {
278
+ const templatePath = path.join(this.templatesDir, "components/ui/theme-provider.tsx.hbs");
279
+ const content = await this.helpers.render(templatePath, {});
280
+ const uiDir = path.join(projectPath, "components/ui");
281
+ await fs.ensureDir(uiDir);
282
+ await fs.writeFile(path.join(uiDir, "theme-provider.tsx"), content, "utf-8");
283
+ }
284
+ /**
285
+ * Generate button component with CVA variants
286
+ */
287
+ async generateButton(projectPath) {
288
+ const templatePath = path.join(this.templatesDir, "components/ui/button.tsx.hbs");
289
+ const content = await this.helpers.render(templatePath, {});
290
+ const uiDir = path.join(projectPath, "components/ui");
291
+ await fs.ensureDir(uiDir);
292
+ await fs.writeFile(path.join(uiDir, "button.tsx"), content, "utf-8");
293
+ }
294
+ /**
295
+ * Generate all UI components (Card, Input, Label, Skeleton, ThemeToggle)
296
+ */
297
+ async generateUIComponents(projectPath) {
298
+ const components = ["card", "input", "label", "skeleton", "theme-toggle"];
299
+ const uiDir = path.join(projectPath, "components/ui");
300
+ await fs.ensureDir(uiDir);
301
+ for (const component of components) {
302
+ const templatePath = path.join(this.templatesDir, `components/ui/${component}.tsx.hbs`);
303
+ const content = await this.helpers.render(templatePath, {});
304
+ await fs.writeFile(path.join(uiDir, `${component}.tsx`), content, "utf-8");
305
+ }
306
+ }
307
+ /**
308
+ * Generate production login page with Suspense
309
+ */
310
+ async generateProductionLoginPage(projectPath) {
311
+ const templatePath = path.join(this.templatesDir, "pages/auth/login-page.tsx.hbs");
312
+ const content = await this.helpers.render(templatePath, {});
313
+ const loginDir = path.join(projectPath, "app/(auth)/login");
314
+ await fs.ensureDir(loginDir);
315
+ await fs.writeFile(path.join(loginDir, "page.tsx"), content, "utf-8");
316
+ }
317
+ /**
318
+ * Generate production login form with useTransition
319
+ */
320
+ async generateProductionLoginForm(projectPath) {
321
+ const templatePath = path.join(this.templatesDir, "components/auth/login-form.tsx.hbs");
322
+ const content = await this.helpers.render(templatePath, {});
323
+ const authComponentsDir = path.join(projectPath, "components/auth");
324
+ await fs.ensureDir(authComponentsDir);
325
+ await fs.writeFile(path.join(authComponentsDir, "LoginForm.tsx"), content, "utf-8");
326
+ }
327
+ /**
328
+ * Generate login skeleton component
329
+ */
330
+ async generateLoginSkeleton(projectPath) {
331
+ const templatePath = path.join(this.templatesDir, "components/auth/login-skeleton.tsx.hbs");
332
+ const content = await this.helpers.render(templatePath, {});
333
+ const authComponentsDir = path.join(projectPath, "components/auth");
334
+ await fs.ensureDir(authComponentsDir);
335
+ await fs.writeFile(path.join(authComponentsDir, "LoginSkeleton.tsx"), content, "utf-8");
336
+ }
337
+ /**
338
+ * Generate register page
339
+ */
340
+ async generateProductionRegisterPage(projectPath) {
341
+ const templatePath = path.join(this.templatesDir, "pages/auth/register-page.tsx.hbs");
342
+ const content = await this.helpers.render(templatePath, {});
343
+ const registerDir = path.join(projectPath, "app/(auth)/register");
344
+ await fs.ensureDir(registerDir);
345
+ await fs.writeFile(path.join(registerDir, "page.tsx"), content, "utf-8");
346
+ }
347
+ /**
348
+ * Generate register form component
349
+ */
350
+ async generateRegisterForm(projectPath) {
351
+ const templatePath = path.join(this.templatesDir, "components/auth/register-form.tsx.hbs");
352
+ const content = await this.helpers.render(templatePath, {});
353
+ const authComponentsDir = path.join(projectPath, "components/auth");
354
+ await fs.ensureDir(authComponentsDir);
355
+ await fs.writeFile(path.join(authComponentsDir, "RegisterForm.tsx"), content, "utf-8");
356
+ }
357
+ /**
358
+ * Generate auth Server Actions
359
+ */
360
+ async generateAuthActions(projectPath) {
361
+ const templatePath = path.join(this.templatesDir, "actions/auth-actions.ts.hbs");
362
+ const content = await this.helpers.render(templatePath, {});
363
+ const actionsDir = path.join(projectPath, "app/actions");
364
+ await fs.ensureDir(actionsDir);
365
+ await fs.writeFile(path.join(actionsDir, "auth.ts"), content, "utf-8");
366
+ }
367
+ /**
368
+ * Generate dashboard layout with navigation
369
+ */
370
+ async generateDashboardLayout(projectPath, projectName, entities) {
371
+ const templatePath = path.join(this.templatesDir, "layouts/dashboard-layout.tsx.hbs");
372
+ const content = await this.helpers.render(templatePath, {
373
+ projectName,
374
+ entities,
375
+ });
376
+ const dashboardDir = path.join(projectPath, "app/dashboard");
377
+ await fs.ensureDir(dashboardDir);
378
+ await fs.writeFile(path.join(dashboardDir, "layout.tsx"), content, "utf-8");
379
+ }
380
+ /**
381
+ * Generate error boundary
382
+ */
383
+ async generateErrorBoundary(projectPath) {
384
+ const templatePath = path.join(this.templatesDir, "layouts/error.tsx.hbs");
385
+ const content = await this.helpers.render(templatePath, {});
386
+ await fs.writeFile(path.join(projectPath, "app/error.tsx"), content, "utf-8");
387
+ }
388
+ /**
389
+ * Generate loading boundary
390
+ */
391
+ async generateLoadingBoundary(projectPath) {
392
+ const templatePath = path.join(this.templatesDir, "layouts/loading.tsx.hbs");
393
+ const content = await this.helpers.render(templatePath, {});
394
+ await fs.writeFile(path.join(projectPath, "app/loading.tsx"), content, "utf-8");
395
+ }
396
+ /**
397
+ * Generate not-found page
398
+ */
399
+ async generateNotFoundPage(projectPath) {
400
+ const templatePath = path.join(this.templatesDir, "layouts/not-found.tsx.hbs");
401
+ const content = await this.helpers.render(templatePath, {});
402
+ await fs.writeFile(path.join(projectPath, "app/not-found.tsx"), content, "utf-8");
403
+ }
404
+ /**
405
+ * Generate landing page
406
+ */
407
+ async generateLandingPage(projectPath, projectName, projectDescription) {
408
+ const templatePath = path.join(this.templatesDir, "pages/landing-page.tsx.hbs");
409
+ const content = await this.helpers.render(templatePath, {
410
+ projectName,
411
+ projectDescription,
412
+ });
413
+ await fs.writeFile(path.join(projectPath, "app/page.tsx"), content, "utf-8");
414
+ }
415
+ /**
416
+ * Generate CRUD pages for an entity
417
+ */
418
+ async generateEntityCRUDPages(projectPath, entityName, fields) {
419
+ const entityLower = entityName.toLowerCase();
420
+ const data = {
421
+ entityName,
422
+ entityLower,
423
+ fields: fields.map((f) => ({
424
+ ...f,
425
+ label: f.label || f.name.charAt(0).toUpperCase() + f.name.slice(1),
426
+ })),
427
+ };
428
+ // List page
429
+ const listTemplate = path.join(this.templatesDir, "pages/crud/list-page.tsx.hbs");
430
+ const listContent = await this.helpers.render(listTemplate, data);
431
+ const listDir = path.join(projectPath, `app/${entityLower}s`);
432
+ await fs.ensureDir(listDir);
433
+ await fs.writeFile(path.join(listDir, "page.tsx"), listContent, "utf-8");
434
+ // Detail page
435
+ const detailTemplate = path.join(this.templatesDir, "pages/crud/detail-page.tsx.hbs");
436
+ const detailContent = await this.helpers.render(detailTemplate, data);
437
+ const detailDir = path.join(projectPath, `app/${entityLower}s/[id]`);
438
+ await fs.ensureDir(detailDir);
439
+ await fs.writeFile(path.join(detailDir, "page.tsx"), detailContent, "utf-8");
440
+ // Create page
441
+ const createTemplate = path.join(this.templatesDir, "pages/crud/create-page.tsx.hbs");
442
+ const createContent = await this.helpers.render(createTemplate, data);
443
+ const createDir = path.join(projectPath, `app/${entityLower}s/new`);
444
+ await fs.ensureDir(createDir);
445
+ await fs.writeFile(path.join(createDir, "page.tsx"), createContent, "utf-8");
446
+ // Loading page
447
+ const loadingTemplate = path.join(this.templatesDir, "pages/crud/loading.tsx.hbs");
448
+ const loadingContent = await this.helpers.render(loadingTemplate, data);
449
+ await fs.writeFile(path.join(listDir, "loading.tsx"), loadingContent, "utf-8");
450
+ }
451
+ /**
452
+ * Generate CRUD Server Actions for an entity
453
+ */
454
+ async generateEntityActions(projectPath, entityName, fields) {
455
+ const templatePath = path.join(this.templatesDir, "actions/crud-actions.ts.hbs");
456
+ const content = await this.helpers.render(templatePath, {
457
+ entityName,
458
+ entityLower: entityName.toLowerCase(),
459
+ fields,
460
+ });
461
+ const actionsDir = path.join(projectPath, "app/actions");
462
+ await fs.ensureDir(actionsDir);
463
+ await fs.writeFile(path.join(actionsDir, "crud.ts"), content, "utf-8");
464
+ }
465
+ /**
466
+ * Generate CRUD components for an entity
467
+ */
468
+ async generateEntityComponents(projectPath, entityName) {
469
+ const entityLower = entityName.toLowerCase();
470
+ const componentsDir = path.join(projectPath, `components/${entityLower}s`);
471
+ await fs.ensureDir(componentsDir);
472
+ // Generate entity-specific components using generic CRUD templates
473
+ const components = ["entity-card", "entity-form", "entity-table", "entity-skeleton"];
474
+ for (const component of components) {
475
+ const templatePath = path.join(this.templatesDir, `components/crud/${component}.tsx.hbs`);
476
+ const content = await this.helpers.render(templatePath, {});
477
+ const outputName = component.replace("entity", entityLower);
478
+ await fs.writeFile(path.join(componentsDir, `${outputName}.tsx`), content, "utf-8");
479
+ }
480
+ }
481
+ }
482
+ exports.TemplateEngine = TemplateEngine;
483
+ //# sourceMappingURL=TemplateEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../src/services/TemplateEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class TemplateHelpers {
2
+ private handlebars;
3
+ constructor();
4
+ private registerHelpers;
5
+ render(templatePath: string, data: any): Promise<string>;
6
+ renderFromString(templateString: string, data: any): Promise<string>;
7
+ getOutputExtension(templatePath: string): string;
8
+ }
9
+ //# sourceMappingURL=TemplateHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateHelpers.d.ts","sourceRoot":"","sources":["../../src/services/TemplateHelpers.ts"],"names":[],"mappings":"AAIA,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAmB;;IAOrC,OAAO,CAAC,eAAe;IAoKjB,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAMxD,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAM1E,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;CAKjD"}