@dcyfr/ai-code-gen 0.1.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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +469 -0
  3. package/dist/ai/code-gen.d.ts +60 -0
  4. package/dist/ai/code-gen.d.ts.map +1 -0
  5. package/dist/ai/code-gen.js +164 -0
  6. package/dist/ai/code-gen.js.map +1 -0
  7. package/dist/ai/index.d.ts +8 -0
  8. package/dist/ai/index.d.ts.map +1 -0
  9. package/dist/ai/index.js +7 -0
  10. package/dist/ai/index.js.map +1 -0
  11. package/dist/ai/prompts.d.ts +32 -0
  12. package/dist/ai/prompts.d.ts.map +1 -0
  13. package/dist/ai/prompts.js +96 -0
  14. package/dist/ai/prompts.js.map +1 -0
  15. package/dist/ai/provider.d.ts +34 -0
  16. package/dist/ai/provider.d.ts.map +1 -0
  17. package/dist/ai/provider.js +76 -0
  18. package/dist/ai/provider.js.map +1 -0
  19. package/dist/ast/analyzer.d.ts +34 -0
  20. package/dist/ast/analyzer.d.ts.map +1 -0
  21. package/dist/ast/analyzer.js +159 -0
  22. package/dist/ast/analyzer.js.map +1 -0
  23. package/dist/ast/index.d.ts +9 -0
  24. package/dist/ast/index.d.ts.map +1 -0
  25. package/dist/ast/index.js +8 -0
  26. package/dist/ast/index.js.map +1 -0
  27. package/dist/ast/parser.d.ts +16 -0
  28. package/dist/ast/parser.d.ts.map +1 -0
  29. package/dist/ast/parser.js +280 -0
  30. package/dist/ast/parser.js.map +1 -0
  31. package/dist/ast/printer.d.ts +51 -0
  32. package/dist/ast/printer.d.ts.map +1 -0
  33. package/dist/ast/printer.js +126 -0
  34. package/dist/ast/printer.js.map +1 -0
  35. package/dist/ast/transformer.d.ts +11 -0
  36. package/dist/ast/transformer.d.ts.map +1 -0
  37. package/dist/ast/transformer.js +194 -0
  38. package/dist/ast/transformer.js.map +1 -0
  39. package/dist/cli.d.ts +15 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +284 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/generators/api-route.d.ts +14 -0
  44. package/dist/generators/api-route.d.ts.map +1 -0
  45. package/dist/generators/api-route.js +82 -0
  46. package/dist/generators/api-route.js.map +1 -0
  47. package/dist/generators/base.d.ts +29 -0
  48. package/dist/generators/base.d.ts.map +1 -0
  49. package/dist/generators/base.js +89 -0
  50. package/dist/generators/base.js.map +1 -0
  51. package/dist/generators/component.d.ts +14 -0
  52. package/dist/generators/component.d.ts.map +1 -0
  53. package/dist/generators/component.js +77 -0
  54. package/dist/generators/component.js.map +1 -0
  55. package/dist/generators/index.d.ts +10 -0
  56. package/dist/generators/index.d.ts.map +1 -0
  57. package/dist/generators/index.js +10 -0
  58. package/dist/generators/index.js.map +1 -0
  59. package/dist/generators/model.d.ts +14 -0
  60. package/dist/generators/model.d.ts.map +1 -0
  61. package/dist/generators/model.js +89 -0
  62. package/dist/generators/model.js.map +1 -0
  63. package/dist/generators/registry.d.ts +42 -0
  64. package/dist/generators/registry.d.ts.map +1 -0
  65. package/dist/generators/registry.js +84 -0
  66. package/dist/generators/registry.js.map +1 -0
  67. package/dist/generators/test.d.ts +13 -0
  68. package/dist/generators/test.d.ts.map +1 -0
  69. package/dist/generators/test.js +39 -0
  70. package/dist/generators/test.js.map +1 -0
  71. package/dist/index.d.ts +19 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +20 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/lib/config.d.ts +16 -0
  76. package/dist/lib/config.d.ts.map +1 -0
  77. package/dist/lib/config.js +52 -0
  78. package/dist/lib/config.js.map +1 -0
  79. package/dist/lib/file-system.d.ts +30 -0
  80. package/dist/lib/file-system.d.ts.map +1 -0
  81. package/dist/lib/file-system.js +71 -0
  82. package/dist/lib/file-system.js.map +1 -0
  83. package/dist/lib/logger.d.ts +17 -0
  84. package/dist/lib/logger.d.ts.map +1 -0
  85. package/dist/lib/logger.js +43 -0
  86. package/dist/lib/logger.js.map +1 -0
  87. package/dist/lib/strings.d.ts +41 -0
  88. package/dist/lib/strings.d.ts.map +1 -0
  89. package/dist/lib/strings.js +92 -0
  90. package/dist/lib/strings.js.map +1 -0
  91. package/dist/templates/builtins.d.ts +13 -0
  92. package/dist/templates/builtins.d.ts.map +1 -0
  93. package/dist/templates/builtins.js +275 -0
  94. package/dist/templates/builtins.js.map +1 -0
  95. package/dist/templates/engine.d.ts +69 -0
  96. package/dist/templates/engine.d.ts.map +1 -0
  97. package/dist/templates/engine.js +154 -0
  98. package/dist/templates/engine.js.map +1 -0
  99. package/dist/templates/index.d.ts +6 -0
  100. package/dist/templates/index.d.ts.map +1 -0
  101. package/dist/templates/index.js +6 -0
  102. package/dist/templates/index.js.map +1 -0
  103. package/dist/types/index.d.ts +401 -0
  104. package/dist/types/index.d.ts.map +1 -0
  105. package/dist/types/index.js +7 -0
  106. package/dist/types/index.js.map +1 -0
  107. package/package.json +80 -0
@@ -0,0 +1,275 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Built-in template definitions
3
+ *
4
+ * Pre-configured templates for common code generation patterns.
5
+ */
6
+ // ─── React Component Template ───────────────────────────────────────
7
+ export const REACT_COMPONENT_TEMPLATE = {
8
+ id: 'react-component',
9
+ name: 'React Component',
10
+ description: 'Generate a React functional component with TypeScript',
11
+ outputExtension: '.tsx',
12
+ variables: [
13
+ { name: 'name', type: 'string', description: 'Component name', required: true },
14
+ { name: 'props', type: 'array', description: 'Component props', required: false, defaultValue: [] },
15
+ { name: 'hasChildren', type: 'boolean', description: 'Include children prop', required: false, defaultValue: false },
16
+ { name: 'useClient', type: 'boolean', description: 'Add "use client" directive', required: false, defaultValue: false },
17
+ { name: 'description', type: 'string', description: 'Component description', required: false },
18
+ ],
19
+ source: `{{#if useClient}}'use client';
20
+
21
+ {{/if}}/**
22
+ * {{pascalCase name}} component
23
+ {{#if description}} * {{description}}
24
+ {{/if}} */
25
+
26
+ {{#if props.length}}interface {{pascalCase name}}Props {
27
+ {{#each props}} {{this.name}}{{#unless this.required}}?{{/unless}}: {{this.type}};
28
+ {{/each}}{{#if hasChildren}} children?: React.ReactNode;
29
+ {{/if}}
30
+ }
31
+ {{else}}{{#if hasChildren}}interface {{pascalCase name}}Props {
32
+ children?: React.ReactNode;
33
+ }
34
+ {{/if}}{{/if}}
35
+ export function {{pascalCase name}}({{#if props.length}}{ {{#each props}}{{this.name}}{{#unless @last}}, {{/unless}}{{/each}}{{#if hasChildren}}, children{{/if}} }: {{pascalCase name}}Props{{else}}{{#if hasChildren}}{ children }: {{pascalCase name}}Props{{/if}}{{/if}}) {
36
+ return (
37
+ <div>
38
+ <h2>{{pascalCase name}}</h2>
39
+ {{#if hasChildren}} {children}
40
+ {{/if}} </div>
41
+ );
42
+ }
43
+ `,
44
+ };
45
+ // ─── API Route Template ─────────────────────────────────────────────
46
+ export const API_ROUTE_TEMPLATE = {
47
+ id: 'api-route',
48
+ name: 'API Route',
49
+ description: 'Generate a Next.js API route handler',
50
+ outputExtension: '.ts',
51
+ variables: [
52
+ { name: 'name', type: 'string', description: 'Route name', required: true },
53
+ { name: 'methods', type: 'array', description: 'HTTP methods', required: false, defaultValue: ['GET'] },
54
+ { name: 'hasAuth', type: 'boolean', description: 'Include auth middleware', required: false, defaultValue: false },
55
+ { name: 'description', type: 'string', description: 'Route description', required: false },
56
+ ],
57
+ source: `/**
58
+ * {{pascalCase name}} API Route
59
+ {{#if description}} * {{description}}
60
+ {{/if}} */
61
+
62
+ import { NextRequest, NextResponse } from 'next/server';
63
+ {{#if hasAuth}}
64
+ // import { requireAuth } from '@/lib/auth';
65
+ {{/if}}
66
+
67
+ {{#each methods}}
68
+ {{#if (eq this "GET")}}
69
+ export async function GET(request: NextRequest) {
70
+ try {
71
+ const { searchParams } = new URL(request.url);
72
+ const id = searchParams.get('id');
73
+
74
+ // TODO: Implement {{../name}} GET logic
75
+ const data = { id, message: '{{../name}} GET endpoint' };
76
+
77
+ return NextResponse.json(data);
78
+ } catch (error) {
79
+ console.error('{{../name}} GET error:', error);
80
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
81
+ }
82
+ }
83
+ {{/if}}
84
+
85
+ {{#if (eq this "POST")}}
86
+ export async function POST(request: NextRequest) {
87
+ try {
88
+ const body = await request.json();
89
+
90
+ // Validate input
91
+ if (!body) {
92
+ return NextResponse.json({ error: 'Request body is required' }, { status: 400 });
93
+ }
94
+
95
+ // TODO: Implement {{../name}} POST logic
96
+ const result = { success: true, data: body };
97
+
98
+ return NextResponse.json(result, { status: 201 });
99
+ } catch (error) {
100
+ console.error('{{../name}} POST error:', error);
101
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
102
+ }
103
+ }
104
+ {{/if}}
105
+
106
+ {{#if (eq this "PUT")}}
107
+ export async function PUT(request: NextRequest) {
108
+ try {
109
+ const body = await request.json();
110
+ const { searchParams } = new URL(request.url);
111
+ const id = searchParams.get('id');
112
+
113
+ if (!id) {
114
+ return NextResponse.json({ error: 'ID is required' }, { status: 400 });
115
+ }
116
+
117
+ // TODO: Implement {{../name}} PUT logic
118
+ const result = { success: true, id, data: body };
119
+
120
+ return NextResponse.json(result);
121
+ } catch (error) {
122
+ console.error('{{../name}} PUT error:', error);
123
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
124
+ }
125
+ }
126
+ {{/if}}
127
+
128
+ {{#if (eq this "DELETE")}}
129
+ export async function DELETE(request: NextRequest) {
130
+ try {
131
+ const { searchParams } = new URL(request.url);
132
+ const id = searchParams.get('id');
133
+
134
+ if (!id) {
135
+ return NextResponse.json({ error: 'ID is required' }, { status: 400 });
136
+ }
137
+
138
+ // TODO: Implement {{../name}} DELETE logic
139
+
140
+ return NextResponse.json({ success: true, id });
141
+ } catch (error) {
142
+ console.error('{{../name}} DELETE error:', error);
143
+ return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
144
+ }
145
+ }
146
+ {{/if}}
147
+ {{/each}}
148
+ `,
149
+ };
150
+ // ─── Data Model Template ────────────────────────────────────────────
151
+ export const DATA_MODEL_TEMPLATE = {
152
+ id: 'data-model',
153
+ name: 'Data Model',
154
+ description: 'Generate a TypeScript data model with Zod schema validation',
155
+ outputExtension: '.ts',
156
+ variables: [
157
+ { name: 'name', type: 'string', description: 'Model name', required: true },
158
+ { name: 'fields', type: 'array', description: 'Model fields', required: true },
159
+ { name: 'hasTimestamps', type: 'boolean', description: 'Include createdAt/updatedAt', required: false, defaultValue: true },
160
+ { name: 'description', type: 'string', description: 'Model description', required: false },
161
+ ],
162
+ source: `/**
163
+ * {{pascalCase name}} data model
164
+ {{#if description}} * {{description}}
165
+ {{/if}} */
166
+
167
+ import { z } from 'zod';
168
+
169
+ // ─── Zod Schema ─────────────────────────────────────────────────────
170
+
171
+ export const {{camelCase name}}Schema = z.object({
172
+ id: z.string().uuid(),
173
+ {{#each fields}} {{this.name}}: z.{{this.zodType}}(){{#if this.optional}}.optional(){{/if}},
174
+ {{/each}}{{#if hasTimestamps}} createdAt: z.date(),
175
+ updatedAt: z.date(),
176
+ {{/if}}
177
+ });
178
+
179
+ export const create{{pascalCase name}}Schema = {{camelCase name}}Schema.omit({
180
+ id: true,
181
+ {{#if hasTimestamps}} createdAt: true,
182
+ updatedAt: true,
183
+ {{/if}}
184
+ });
185
+
186
+ export const update{{pascalCase name}}Schema = create{{pascalCase name}}Schema.partial();
187
+
188
+ // ─── Types ──────────────────────────────────────────────────────────
189
+
190
+ export type {{pascalCase name}} = z.infer<typeof {{camelCase name}}Schema>;
191
+ export type Create{{pascalCase name}} = z.infer<typeof create{{pascalCase name}}Schema>;
192
+ export type Update{{pascalCase name}} = z.infer<typeof update{{pascalCase name}}Schema>;
193
+
194
+ // ─── Factory ────────────────────────────────────────────────────────
195
+
196
+ export function create{{pascalCase name}}(data: Create{{pascalCase name}}): {{pascalCase name}} {
197
+ const now = new Date();
198
+ return {
199
+ id: crypto.randomUUID(),
200
+ ...data,
201
+ {{#if hasTimestamps}} createdAt: now,
202
+ updatedAt: now,
203
+ {{/if}} };
204
+ }
205
+ `,
206
+ };
207
+ // ─── Test File Template ─────────────────────────────────────────────
208
+ export const TEST_FILE_TEMPLATE = {
209
+ id: 'test-file',
210
+ name: 'Test File',
211
+ description: 'Generate a Vitest test file',
212
+ outputExtension: '.test.ts',
213
+ variables: [
214
+ { name: 'name', type: 'string', description: 'Module name to test', required: true },
215
+ { name: 'importPath', type: 'string', description: 'Import path', required: true },
216
+ { name: 'functions', type: 'array', description: 'Functions to test', required: false, defaultValue: [] },
217
+ { name: 'description', type: 'string', description: 'Test description', required: false },
218
+ ],
219
+ source: `/**
220
+ * Tests for {{pascalCase name}}
221
+ */
222
+
223
+ import { describe, it, expect, beforeEach } from 'vitest';
224
+ {{#if functions.length}}import { {{#each functions}}{{this}}{{#unless @last}}, {{/unless}}{{/each}} } from '{{importPath}}';
225
+ {{else}}// import { ... } from '{{importPath}}';
226
+ {{/if}}
227
+
228
+ describe('{{pascalCase name}}', () => {
229
+ {{#each functions}}
230
+ describe('{{this}}', () => {
231
+ it('should exist', () => {
232
+ expect({{this}}).toBeDefined();
233
+ });
234
+
235
+ it('should work correctly', () => {
236
+ // TODO: Implement test for {{this}}
237
+ });
238
+ });
239
+
240
+ {{/each}}{{#unless functions.length}}
241
+ it('should be implemented', () => {
242
+ // TODO: Add tests for {{pascalCase name}}
243
+ expect(true).toBe(true);
244
+ });
245
+ {{/unless}}
246
+ });
247
+ `,
248
+ };
249
+ // ─── Barrel Export Template ─────────────────────────────────────────
250
+ export const BARREL_EXPORT_TEMPLATE = {
251
+ id: 'barrel-export',
252
+ name: 'Barrel Export',
253
+ description: 'Generate an index.ts barrel export file',
254
+ outputExtension: '.ts',
255
+ variables: [
256
+ { name: 'exports', type: 'array', description: 'Modules to export', required: true },
257
+ { name: 'description', type: 'string', description: 'Module description', required: false },
258
+ ],
259
+ source: `/**
260
+ * {{#if description}}{{description}}{{else}}Barrel exports{{/if}}
261
+ */
262
+
263
+ {{#each exports}}export { {{#each this.names}}{{this}}{{#unless @last}}, {{/unless}}{{/each}} } from './{{../exports.[0]}}';
264
+ {{/each}}
265
+ `,
266
+ };
267
+ // ─── Export all built-in templates ──────────────────────────────────
268
+ export const BUILTIN_TEMPLATES = [
269
+ REACT_COMPONENT_TEMPLATE,
270
+ API_ROUTE_TEMPLATE,
271
+ DATA_MODEL_TEMPLATE,
272
+ TEST_FILE_TEMPLATE,
273
+ BARREL_EXPORT_TEMPLATE,
274
+ ];
275
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/templates/builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Template engine
3
+ *
4
+ * Handlebars-based template engine with built-in helpers for code generation.
5
+ */
6
+ import Handlebars from 'handlebars';
7
+ import type { TemplateDefinition, TemplateContext, TemplateRenderResult, TemplateVariable } from '../types/index.js';
8
+ /** Template engine for rendering code templates */
9
+ export declare class TemplateEngine {
10
+ private readonly handlebars;
11
+ private readonly compiledCache;
12
+ private readonly definitions;
13
+ constructor();
14
+ /**
15
+ * Register built-in Handlebars helpers for code generation.
16
+ */
17
+ private registerBuiltinHelpers;
18
+ /**
19
+ * Register a template definition.
20
+ */
21
+ registerTemplate(definition: TemplateDefinition): void;
22
+ /**
23
+ * Register a custom Handlebars helper.
24
+ */
25
+ registerHelper(name: string, fn: Handlebars.HelperDelegate): void;
26
+ /**
27
+ * Register a partial template.
28
+ */
29
+ registerPartial(name: string, source: string): void;
30
+ /**
31
+ * Compile and render a template by ID.
32
+ */
33
+ render(templateId: string, context: TemplateContext): TemplateRenderResult;
34
+ /**
35
+ * Compile and render a raw template string.
36
+ */
37
+ renderSource(source: string, context: TemplateContext, cacheKey?: string): TemplateRenderResult;
38
+ /**
39
+ * Validate template variables against a definition.
40
+ */
41
+ validateVariables(templateId: string, context: TemplateContext): {
42
+ valid: boolean;
43
+ errors: string[];
44
+ };
45
+ /**
46
+ * List all registered templates.
47
+ */
48
+ listTemplates(): TemplateDefinition[];
49
+ /**
50
+ * Get a specific template definition.
51
+ */
52
+ getTemplate(templateId: string): TemplateDefinition | undefined;
53
+ /**
54
+ * Clear all compiled template caches.
55
+ */
56
+ clearCache(): void;
57
+ }
58
+ /**
59
+ * Validate template variables against their definitions.
60
+ */
61
+ export declare function validateTemplateVariables(variables: TemplateVariable[], context: TemplateContext): {
62
+ valid: boolean;
63
+ errors: string[];
64
+ };
65
+ /**
66
+ * Create and return a pre-configured TemplateEngine instance.
67
+ */
68
+ export declare function createTemplateEngine(): TemplateEngine;
69
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAW3B,mDAAmD;AACnD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsD;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;;IAO1E;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4C9B;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAMtD;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,CAAC,cAAc,GAAG,IAAI;IAIjE;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAInD;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,oBAAoB;IAS1E;;OAEG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB;IAqBvB;;OAEG;IACH,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,GACvB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IASvC;;OAEG;IACH,aAAa,IAAI,kBAAkB,EAAE;IAIrC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI/D;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,EAAE,eAAe,GACvB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBtC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Template engine
3
+ *
4
+ * Handlebars-based template engine with built-in helpers for code generation.
5
+ */
6
+ import Handlebars from 'handlebars';
7
+ import { toPascalCase, toCamelCase, toKebabCase, toSnakeCase, toConstantCase, pluralize, indent, } from '../lib/strings.js';
8
+ /** Template engine for rendering code templates */
9
+ export class TemplateEngine {
10
+ handlebars;
11
+ compiledCache = new Map();
12
+ definitions = new Map();
13
+ constructor() {
14
+ this.handlebars = Handlebars.create();
15
+ this.registerBuiltinHelpers();
16
+ }
17
+ /**
18
+ * Register built-in Handlebars helpers for code generation.
19
+ */
20
+ registerBuiltinHelpers() {
21
+ // Case conversion helpers
22
+ this.handlebars.registerHelper('pascalCase', (str) => toPascalCase(str));
23
+ this.handlebars.registerHelper('camelCase', (str) => toCamelCase(str));
24
+ this.handlebars.registerHelper('kebabCase', (str) => toKebabCase(str));
25
+ this.handlebars.registerHelper('snakeCase', (str) => toSnakeCase(str));
26
+ this.handlebars.registerHelper('constantCase', (str) => toConstantCase(str));
27
+ this.handlebars.registerHelper('upperCase', (str) => str.toUpperCase());
28
+ this.handlebars.registerHelper('lowerCase', (str) => str.toLowerCase());
29
+ // Pluralization
30
+ this.handlebars.registerHelper('pluralize', (str) => pluralize(str));
31
+ // Indentation
32
+ this.handlebars.registerHelper('indent', (str, spaces) => typeof spaces === 'number' ? indent(str, spaces) : indent(str, 2));
33
+ // Conditional helpers
34
+ this.handlebars.registerHelper('eq', (a, b) => a === b);
35
+ this.handlebars.registerHelper('neq', (a, b) => a !== b);
36
+ this.handlebars.registerHelper('or', (a, b) => a || b);
37
+ this.handlebars.registerHelper('and', (a, b) => a && b);
38
+ this.handlebars.registerHelper('not', (a) => !a);
39
+ // String helpers
40
+ this.handlebars.registerHelper('join', (arr, sep) => Array.isArray(arr) ? arr.join(typeof sep === 'string' ? sep : ', ') : '');
41
+ // Timestamp
42
+ this.handlebars.registerHelper('timestamp', () => new Date().toISOString());
43
+ this.handlebars.registerHelper('year', () => new Date().getFullYear().toString());
44
+ // Code generation helpers
45
+ this.handlebars.registerHelper('typeAnnotation', (type) => type ? `: ${type}` : '');
46
+ this.handlebars.registerHelper('genericType', (base, param) => param ? `${base}<${param}>` : base);
47
+ }
48
+ /**
49
+ * Register a template definition.
50
+ */
51
+ registerTemplate(definition) {
52
+ this.definitions.set(definition.id, definition);
53
+ // Invalidate cache for this template
54
+ this.compiledCache.delete(definition.id);
55
+ }
56
+ /**
57
+ * Register a custom Handlebars helper.
58
+ */
59
+ registerHelper(name, fn) {
60
+ this.handlebars.registerHelper(name, fn);
61
+ }
62
+ /**
63
+ * Register a partial template.
64
+ */
65
+ registerPartial(name, source) {
66
+ this.handlebars.registerPartial(name, source);
67
+ }
68
+ /**
69
+ * Compile and render a template by ID.
70
+ */
71
+ render(templateId, context) {
72
+ const definition = this.definitions.get(templateId);
73
+ if (!definition) {
74
+ throw new Error(`Template not found: ${templateId}`);
75
+ }
76
+ return this.renderSource(definition.source, context, templateId);
77
+ }
78
+ /**
79
+ * Compile and render a raw template string.
80
+ */
81
+ renderSource(source, context, cacheKey) {
82
+ let compiled;
83
+ if (cacheKey && this.compiledCache.has(cacheKey)) {
84
+ compiled = this.compiledCache.get(cacheKey);
85
+ }
86
+ else {
87
+ compiled = this.handlebars.compile(source, { noEscape: true });
88
+ if (cacheKey) {
89
+ this.compiledCache.set(cacheKey, compiled);
90
+ }
91
+ }
92
+ const content = compiled(context);
93
+ return {
94
+ content,
95
+ templateId: cacheKey ?? 'inline',
96
+ variables: { ...context },
97
+ };
98
+ }
99
+ /**
100
+ * Validate template variables against a definition.
101
+ */
102
+ validateVariables(templateId, context) {
103
+ const definition = this.definitions.get(templateId);
104
+ if (!definition) {
105
+ return { valid: false, errors: [`Template not found: ${templateId}`] };
106
+ }
107
+ return validateTemplateVariables(definition.variables, context);
108
+ }
109
+ /**
110
+ * List all registered templates.
111
+ */
112
+ listTemplates() {
113
+ return Array.from(this.definitions.values());
114
+ }
115
+ /**
116
+ * Get a specific template definition.
117
+ */
118
+ getTemplate(templateId) {
119
+ return this.definitions.get(templateId);
120
+ }
121
+ /**
122
+ * Clear all compiled template caches.
123
+ */
124
+ clearCache() {
125
+ this.compiledCache.clear();
126
+ }
127
+ }
128
+ /**
129
+ * Validate template variables against their definitions.
130
+ */
131
+ export function validateTemplateVariables(variables, context) {
132
+ const errors = [];
133
+ for (const variable of variables) {
134
+ const value = context[variable.name];
135
+ if (variable.required && (value === undefined || value === null)) {
136
+ errors.push(`Required variable '${variable.name}' is missing`);
137
+ continue;
138
+ }
139
+ if (value !== undefined && value !== null) {
140
+ const actualType = Array.isArray(value) ? 'array' : typeof value;
141
+ if (actualType !== variable.type) {
142
+ errors.push(`Variable '${variable.name}' expected type '${variable.type}', got '${actualType}'`);
143
+ }
144
+ }
145
+ }
146
+ return { valid: errors.length === 0, errors };
147
+ }
148
+ /**
149
+ * Create and return a pre-configured TemplateEngine instance.
150
+ */
151
+ export function createTemplateEngine() {
152
+ return new TemplateEngine();
153
+ }
154
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/templates/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Template module exports
3
+ */
4
+ export { TemplateEngine, createTemplateEngine, validateTemplateVariables } from './engine.js';
5
+ export { BUILTIN_TEMPLATES, REACT_COMPONENT_TEMPLATE, API_ROUTE_TEMPLATE, DATA_MODEL_TEMPLATE, TEST_FILE_TEMPLATE, BARREL_EXPORT_TEMPLATE, } from './builtins.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Template module exports
3
+ */
4
+ export { TemplateEngine, createTemplateEngine, validateTemplateVariables } from './engine.js';
5
+ export { BUILTIN_TEMPLATES, REACT_COMPONENT_TEMPLATE, API_ROUTE_TEMPLATE, DATA_MODEL_TEMPLATE, TEST_FILE_TEMPLATE, BARREL_EXPORT_TEMPLATE, } from './builtins.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,eAAe,CAAC"}