@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,89 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Base generator
3
+ *
4
+ * Abstract base class for all code generators.
5
+ */
6
+ /** Abstract base generator that concrete generators extend */
7
+ export class BaseGenerator {
8
+ templateEngine;
9
+ constructor(templateEngine) {
10
+ this.templateEngine = templateEngine;
11
+ }
12
+ async generate(config) {
13
+ const start = Date.now();
14
+ const errors = [];
15
+ const warnings = [];
16
+ // Validate first
17
+ const validation = this.validate(config);
18
+ if (!validation.valid) {
19
+ return {
20
+ success: false,
21
+ files: [],
22
+ generator: this.meta,
23
+ durationMs: Date.now() - start,
24
+ errors: validation.errors.map((e) => ({
25
+ message: `${e.field}: ${e.message}`,
26
+ })),
27
+ warnings,
28
+ };
29
+ }
30
+ try {
31
+ const files = await this.generateFiles(config);
32
+ return {
33
+ success: true,
34
+ files,
35
+ generator: this.meta,
36
+ durationMs: Date.now() - start,
37
+ errors,
38
+ warnings,
39
+ };
40
+ }
41
+ catch (error) {
42
+ errors.push({
43
+ message: error instanceof Error ? error.message : String(error),
44
+ });
45
+ return {
46
+ success: false,
47
+ files: [],
48
+ generator: this.meta,
49
+ durationMs: Date.now() - start,
50
+ errors,
51
+ warnings,
52
+ };
53
+ }
54
+ }
55
+ validate(config) {
56
+ const errors = [];
57
+ // Common validations
58
+ if (!config.name || config.name.trim() === '') {
59
+ errors.push({ field: 'name', message: 'Name is required' });
60
+ }
61
+ if (!config.outputDir || config.outputDir.trim() === '') {
62
+ errors.push({ field: 'outputDir', message: 'Output directory is required' });
63
+ }
64
+ if (config.name && !/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(config.name)) {
65
+ errors.push({
66
+ field: 'name',
67
+ message: 'Name must start with a letter and contain only alphanumeric characters, hyphens, or underscores',
68
+ });
69
+ }
70
+ // Generator-specific validations
71
+ errors.push(...this.validateConfig(config));
72
+ return { valid: errors.length === 0, errors };
73
+ }
74
+ /**
75
+ * Helper to render a template source with context.
76
+ */
77
+ renderTemplate(source, context) {
78
+ const result = this.templateEngine.renderSource(source, context);
79
+ return result.content;
80
+ }
81
+ /**
82
+ * Helper to render a registered template by ID.
83
+ */
84
+ renderRegisteredTemplate(templateId, context) {
85
+ const result = this.templateEngine.render(templateId, context);
86
+ return result.content;
87
+ }
88
+ }
89
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/generators/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - React Component Generator
3
+ */
4
+ import type { GeneratorMeta, GeneratorConfig, GeneratedFile, ValidationError } from '../types/index.js';
5
+ import { BaseGenerator } from './base.js';
6
+ import type { TemplateEngine } from '../templates/engine.js';
7
+ export declare class ComponentGenerator extends BaseGenerator {
8
+ readonly meta: GeneratorMeta;
9
+ constructor(templateEngine: TemplateEngine);
10
+ protected validateConfig(config: GeneratorConfig): ValidationError[];
11
+ protected generateFiles(config: GeneratorConfig): Promise<GeneratedFile[]>;
12
+ private generateTest;
13
+ }
14
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/generators/component.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAK1B;gBAEU,cAAc,EAAE,cAAc;IAK1C,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE;cAmBpD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAsChF,OAAO,CAAC,YAAY;CAWrB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - React Component Generator
3
+ */
4
+ import { BaseGenerator } from './base.js';
5
+ import { toPascalCase, toKebabCase } from '../lib/strings.js';
6
+ import { REACT_COMPONENT_TEMPLATE } from '../templates/builtins.js';
7
+ export class ComponentGenerator extends BaseGenerator {
8
+ meta = {
9
+ name: 'component',
10
+ description: 'Generate a React functional component with TypeScript',
11
+ category: 'component',
12
+ version: '1.0.0',
13
+ };
14
+ constructor(templateEngine) {
15
+ super(templateEngine);
16
+ this.templateEngine.registerTemplate(REACT_COMPONENT_TEMPLATE);
17
+ }
18
+ validateConfig(config) {
19
+ const errors = [];
20
+ const opts = (config.options ?? {});
21
+ if (opts.props && !Array.isArray(opts.props)) {
22
+ errors.push({ field: 'options.props', message: 'Props must be an array' });
23
+ }
24
+ if (opts.props) {
25
+ for (const prop of opts.props) {
26
+ if (!prop.name || !prop.type) {
27
+ errors.push({ field: 'options.props', message: 'Each prop must have name and type' });
28
+ }
29
+ }
30
+ }
31
+ return errors;
32
+ }
33
+ async generateFiles(config) {
34
+ const opts = (config.options ?? {});
35
+ const componentName = toPascalCase(config.name);
36
+ const fileName = toKebabCase(config.name);
37
+ const files = [];
38
+ // Main component file
39
+ const componentContent = this.renderRegisteredTemplate('react-component', {
40
+ name: config.name,
41
+ props: opts.props ?? [],
42
+ hasChildren: opts.hasChildren ?? false,
43
+ useClient: opts.useClient ?? false,
44
+ description: opts.description,
45
+ });
46
+ files.push({
47
+ path: `${config.outputDir}/${fileName}/${fileName}.tsx`,
48
+ content: componentContent,
49
+ });
50
+ // Optional test file
51
+ if (opts.withTest) {
52
+ const testContent = this.generateTest(componentName, fileName);
53
+ files.push({
54
+ path: `${config.outputDir}/${fileName}/${fileName}.test.tsx`,
55
+ content: testContent,
56
+ });
57
+ }
58
+ // Barrel export
59
+ files.push({
60
+ path: `${config.outputDir}/${fileName}/index.ts`,
61
+ content: `export { ${componentName} } from './${fileName}.js';\n`,
62
+ });
63
+ return files;
64
+ }
65
+ generateTest(componentName, _fileName) {
66
+ return `import { describe, it, expect } from 'vitest';
67
+
68
+ describe('${componentName}', () => {
69
+ it('should be defined', () => {
70
+ // TODO: Implement component tests
71
+ expect(true).toBe(true);
72
+ });
73
+ });
74
+ `;
75
+ }
76
+ }
77
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/generators/component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Generator module exports
3
+ */
4
+ export { BaseGenerator } from './base.js';
5
+ export { ComponentGenerator } from './component.js';
6
+ export { ApiRouteGenerator } from './api-route.js';
7
+ export { ModelGenerator } from './model.js';
8
+ export { TestGenerator } from './test.js';
9
+ export { GeneratorRegistry, createGeneratorRegistry } from './registry.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Generator module exports
3
+ */
4
+ export { BaseGenerator } from './base.js';
5
+ export { ComponentGenerator } from './component.js';
6
+ export { ApiRouteGenerator } from './api-route.js';
7
+ export { ModelGenerator } from './model.js';
8
+ export { TestGenerator } from './test.js';
9
+ export { GeneratorRegistry, createGeneratorRegistry } from './registry.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Data Model Generator
3
+ */
4
+ import type { GeneratorMeta, GeneratorConfig, GeneratedFile, ValidationError } from '../types/index.js';
5
+ import { BaseGenerator } from './base.js';
6
+ import type { TemplateEngine } from '../templates/engine.js';
7
+ export declare class ModelGenerator extends BaseGenerator {
8
+ readonly meta: GeneratorMeta;
9
+ constructor(templateEngine: TemplateEngine);
10
+ protected validateConfig(config: GeneratorConfig): ValidationError[];
11
+ protected generateFiles(config: GeneratorConfig): Promise<GeneratedFile[]>;
12
+ private generateTest;
13
+ }
14
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/generators/model.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAe7D,qBAAa,cAAe,SAAQ,aAAa;IAC/C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAK1B;gBAEU,cAAc,EAAE,cAAc;IAK1C,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,EAAE;cAsBpD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmChF,OAAO,CAAC,YAAY;CAqBrB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Data Model Generator
3
+ */
4
+ import { BaseGenerator } from './base.js';
5
+ import { toPascalCase, toKebabCase } from '../lib/strings.js';
6
+ import { DATA_MODEL_TEMPLATE } from '../templates/builtins.js';
7
+ export class ModelGenerator extends BaseGenerator {
8
+ meta = {
9
+ name: 'model',
10
+ description: 'Generate a TypeScript data model with Zod schema validation',
11
+ category: 'model',
12
+ version: '1.0.0',
13
+ };
14
+ constructor(templateEngine) {
15
+ super(templateEngine);
16
+ this.templateEngine.registerTemplate(DATA_MODEL_TEMPLATE);
17
+ }
18
+ validateConfig(config) {
19
+ const errors = [];
20
+ const opts = (config.options ?? {});
21
+ if (opts.fields) {
22
+ if (!Array.isArray(opts.fields)) {
23
+ errors.push({ field: 'options.fields', message: 'Fields must be an array' });
24
+ }
25
+ else {
26
+ for (const field of opts.fields) {
27
+ if (!field.name) {
28
+ errors.push({ field: 'options.fields', message: 'Each field must have a name' });
29
+ }
30
+ if (!field.zodType) {
31
+ errors.push({ field: 'options.fields', message: 'Each field must have a zodType' });
32
+ }
33
+ }
34
+ }
35
+ }
36
+ return errors;
37
+ }
38
+ async generateFiles(config) {
39
+ const opts = (config.options ?? {});
40
+ const fileName = toKebabCase(config.name);
41
+ const files = [];
42
+ const fields = opts.fields ?? [
43
+ { name: 'name', zodType: 'string' },
44
+ { name: 'email', zodType: 'string' },
45
+ ];
46
+ // Main model file
47
+ const modelContent = this.renderRegisteredTemplate('data-model', {
48
+ name: config.name,
49
+ fields,
50
+ hasTimestamps: opts.hasTimestamps ?? true,
51
+ description: opts.description,
52
+ });
53
+ files.push({
54
+ path: `${config.outputDir}/${fileName}.ts`,
55
+ content: modelContent,
56
+ });
57
+ // Optional test file
58
+ if (opts.withTest) {
59
+ const testContent = this.generateTest(toPascalCase(config.name), fileName);
60
+ files.push({
61
+ path: `${config.outputDir}/${fileName}.test.ts`,
62
+ content: testContent,
63
+ });
64
+ }
65
+ return files;
66
+ }
67
+ generateTest(modelName, fileName) {
68
+ return `import { describe, it, expect } from 'vitest';
69
+ import { ${modelName.charAt(0).toLowerCase() + modelName.slice(1)}Schema, create${modelName} } from './${fileName}.js';
70
+
71
+ describe('${modelName}', () => {
72
+ describe('schema', () => {
73
+ it('should validate valid input', () => {
74
+ // TODO: Add schema validation tests
75
+ expect(${modelName.charAt(0).toLowerCase() + modelName.slice(1)}Schema).toBeDefined();
76
+ });
77
+ });
78
+
79
+ describe('create${modelName}', () => {
80
+ it('should create a new instance', () => {
81
+ // TODO: Add creation tests
82
+ expect(create${modelName}).toBeDefined();
83
+ });
84
+ });
85
+ });
86
+ `;
87
+ }
88
+ }
89
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/generators/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Generator registry
3
+ *
4
+ * Central registry for discovering and running generators.
5
+ */
6
+ import type { Generator, GeneratorConfig, GenerationResult, GeneratorMeta } from '../types/index.js';
7
+ import { TemplateEngine } from '../templates/engine.js';
8
+ /** Generator registry for managing available generators */
9
+ export declare class GeneratorRegistry {
10
+ private readonly generators;
11
+ private readonly templateEngine;
12
+ constructor(templateEngine?: TemplateEngine);
13
+ /**
14
+ * Register a generator.
15
+ */
16
+ register(generator: Generator): void;
17
+ /**
18
+ * Get a generator by name.
19
+ */
20
+ get(name: string): Generator | undefined;
21
+ /**
22
+ * Check if a generator is registered.
23
+ */
24
+ has(name: string): boolean;
25
+ /**
26
+ * List all registered generators.
27
+ */
28
+ list(): GeneratorMeta[];
29
+ /**
30
+ * Run a generator by name with the given config.
31
+ */
32
+ run(name: string, config: GeneratorConfig): Promise<GenerationResult>;
33
+ /**
34
+ * Get the underlying template engine.
35
+ */
36
+ getTemplateEngine(): TemplateEngine;
37
+ }
38
+ /**
39
+ * Create a registry with all built-in generators pre-registered.
40
+ */
41
+ export declare function createGeneratorRegistry(templateEngine?: TemplateEngine): GeneratorRegistry;
42
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/generators/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOxD,2DAA2D;AAC3D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;gBAEpC,cAAc,CAAC,EAAE,cAAc;IAI3C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIpC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIxC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,aAAa,EAAE;IAIvB;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgB3E;;OAEG;IACH,iBAAiB,IAAI,cAAc;CAGpC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAgB1F"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Generator registry
3
+ *
4
+ * Central registry for discovering and running generators.
5
+ */
6
+ import { TemplateEngine } from '../templates/engine.js';
7
+ import { BUILTIN_TEMPLATES } from '../templates/builtins.js';
8
+ import { ComponentGenerator } from './component.js';
9
+ import { ApiRouteGenerator } from './api-route.js';
10
+ import { ModelGenerator } from './model.js';
11
+ import { TestGenerator } from './test.js';
12
+ /** Generator registry for managing available generators */
13
+ export class GeneratorRegistry {
14
+ generators = new Map();
15
+ templateEngine;
16
+ constructor(templateEngine) {
17
+ this.templateEngine = templateEngine ?? new TemplateEngine();
18
+ }
19
+ /**
20
+ * Register a generator.
21
+ */
22
+ register(generator) {
23
+ this.generators.set(generator.meta.name, generator);
24
+ }
25
+ /**
26
+ * Get a generator by name.
27
+ */
28
+ get(name) {
29
+ return this.generators.get(name);
30
+ }
31
+ /**
32
+ * Check if a generator is registered.
33
+ */
34
+ has(name) {
35
+ return this.generators.has(name);
36
+ }
37
+ /**
38
+ * List all registered generators.
39
+ */
40
+ list() {
41
+ return Array.from(this.generators.values()).map((g) => g.meta);
42
+ }
43
+ /**
44
+ * Run a generator by name with the given config.
45
+ */
46
+ async run(name, config) {
47
+ const generator = this.generators.get(name);
48
+ if (!generator) {
49
+ return {
50
+ success: false,
51
+ files: [],
52
+ generator: { name, description: '', category: 'custom', version: '0.0.0' },
53
+ durationMs: 0,
54
+ errors: [{ message: `Generator '${name}' not found` }],
55
+ warnings: [],
56
+ };
57
+ }
58
+ return generator.generate(config);
59
+ }
60
+ /**
61
+ * Get the underlying template engine.
62
+ */
63
+ getTemplateEngine() {
64
+ return this.templateEngine;
65
+ }
66
+ }
67
+ /**
68
+ * Create a registry with all built-in generators pre-registered.
69
+ */
70
+ export function createGeneratorRegistry(templateEngine) {
71
+ const engine = templateEngine ?? new TemplateEngine();
72
+ const registry = new GeneratorRegistry(engine);
73
+ // Register built-in templates
74
+ for (const template of BUILTIN_TEMPLATES) {
75
+ engine.registerTemplate(template);
76
+ }
77
+ // Register built-in generators
78
+ registry.register(new ComponentGenerator(engine));
79
+ registry.register(new ApiRouteGenerator(engine));
80
+ registry.register(new ModelGenerator(engine));
81
+ registry.register(new TestGenerator(engine));
82
+ return registry;
83
+ }
84
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/generators/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Test File Generator
3
+ */
4
+ import type { GeneratorMeta, GeneratorConfig, GeneratedFile, ValidationError } from '../types/index.js';
5
+ import { BaseGenerator } from './base.js';
6
+ import type { TemplateEngine } from '../templates/engine.js';
7
+ export declare class TestGenerator extends BaseGenerator {
8
+ readonly meta: GeneratorMeta;
9
+ constructor(templateEngine: TemplateEngine);
10
+ protected validateConfig(_config: GeneratorConfig): ValidationError[];
11
+ protected generateFiles(config: GeneratorConfig): Promise<GeneratedFile[]>;
12
+ }
13
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/generators/test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAQ7D,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAK1B;gBAEU,cAAc,EAAE,cAAc;IAK1C,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,EAAE;cAIrD,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAmBjF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Test File Generator
3
+ */
4
+ import { BaseGenerator } from './base.js';
5
+ import { toKebabCase } from '../lib/strings.js';
6
+ import { TEST_FILE_TEMPLATE } from '../templates/builtins.js';
7
+ export class TestGenerator extends BaseGenerator {
8
+ meta = {
9
+ name: 'test',
10
+ description: 'Generate a Vitest test file for a module',
11
+ category: 'test',
12
+ version: '1.0.0',
13
+ };
14
+ constructor(templateEngine) {
15
+ super(templateEngine);
16
+ this.templateEngine.registerTemplate(TEST_FILE_TEMPLATE);
17
+ }
18
+ validateConfig(_config) {
19
+ return [];
20
+ }
21
+ async generateFiles(config) {
22
+ const opts = (config.options ?? {});
23
+ const fileName = toKebabCase(config.name);
24
+ const importPath = opts.importPath ?? `./${fileName}.js`;
25
+ const testContent = this.renderRegisteredTemplate('test-file', {
26
+ name: config.name,
27
+ importPath,
28
+ functions: opts.functions ?? [],
29
+ description: opts.description,
30
+ });
31
+ return [
32
+ {
33
+ path: `${config.outputDir}/${fileName}.test.ts`,
34
+ content: testContent,
35
+ },
36
+ ];
37
+ }
38
+ }
39
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/generators/test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAS9D,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAkB;QAC7B,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC;IAEF,YAAY,cAA8B;QACxC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAES,cAAc,CAAC,OAAwB;QAC/C,OAAO,EAAE,CAAC;IACZ,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,MAAuB;QACnD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAgB,CAAC;QACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,QAAQ,KAAK,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;YAC7D,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU;YACV,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,OAAO;YACL;gBACE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,QAAQ,UAAU;gBAC/C,OAAO,EAAE,WAAW;aACrB;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Main library entry point
3
+ *
4
+ * Public API for the code generation toolkit.
5
+ */
6
+ export type { Generator, GeneratorMeta, GeneratorConfig, GeneratedFile, GenerationResult, GenerationError, GeneratorCategory, TemplateDefinition, TemplateVariable, TemplateContext, TemplateRenderResult, ASTNode, ASTNodeKind, ImportInfo, ExportInfo, AnalysisResult, CodeMetrics, TransformOperation, TransformResult, TransformError, AddImportTransform, RemoveImportTransform, AddExportTransform, AddPropertyTransform, AddMethodTransform, RenameTransform, WrapTransform, AIProviderConfig, AICodeRequest, AICodeResponse, ReviewFinding, ReviewResult, RefactorSuggestion, ValidationResult, ValidationError, CodeGenConfig, CLIOptions, } from './types/index.js';
7
+ export { TemplateEngine, createTemplateEngine, validateTemplateVariables } from './templates/index.js';
8
+ export { BUILTIN_TEMPLATES, REACT_COMPONENT_TEMPLATE, API_ROUTE_TEMPLATE, DATA_MODEL_TEMPLATE, TEST_FILE_TEMPLATE, BARREL_EXPORT_TEMPLATE, } from './templates/index.js';
9
+ export { BaseGenerator, ComponentGenerator, ApiRouteGenerator, ModelGenerator, TestGenerator, GeneratorRegistry, createGeneratorRegistry, } from './generators/index.js';
10
+ export { parseSource, parseFile, transform, analyzeCode, compareStructure, formatTypeScript, addLicenseHeader, generateJsDoc, generateImport, generateExport, } from './ast/index.js';
11
+ export type { AnalysisIssue, AnalysisReport } from './ast/index.js';
12
+ export { AICodeGenerator, createAICodeGenerator, MockAIProvider, createAIProvider, generateCodePrompt, reviewCodePrompt, refactorCodePrompt, generateDocsPrompt, } from './ai/index.js';
13
+ export type { AIProvider } from './ai/index.js';
14
+ export { loadConfig, validateConfig } from './lib/config.js';
15
+ export { createLogger, createSilentLogger } from './lib/logger.js';
16
+ export type { Logger, LogLevel } from './lib/logger.js';
17
+ export { ensureDir, writeGeneratedFile, readFileContents, fileExists, listTypeScriptFiles, getRelativePath, } from './lib/file-system.js';
18
+ export { toPascalCase, toCamelCase, toKebabCase, toSnakeCase, toConstantCase, pluralize, indent, dedent, } from './lib/strings.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,UAAU,GACX,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,GACP,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Main library entry point
3
+ *
4
+ * Public API for the code generation toolkit.
5
+ */
6
+ // Template engine
7
+ export { TemplateEngine, createTemplateEngine, validateTemplateVariables } from './templates/index.js';
8
+ export { BUILTIN_TEMPLATES, REACT_COMPONENT_TEMPLATE, API_ROUTE_TEMPLATE, DATA_MODEL_TEMPLATE, TEST_FILE_TEMPLATE, BARREL_EXPORT_TEMPLATE, } from './templates/index.js';
9
+ // Generators
10
+ export { BaseGenerator, ComponentGenerator, ApiRouteGenerator, ModelGenerator, TestGenerator, GeneratorRegistry, createGeneratorRegistry, } from './generators/index.js';
11
+ // AST
12
+ export { parseSource, parseFile, transform, analyzeCode, compareStructure, formatTypeScript, addLicenseHeader, generateJsDoc, generateImport, generateExport, } from './ast/index.js';
13
+ // AI
14
+ export { AICodeGenerator, createAICodeGenerator, MockAIProvider, createAIProvider, generateCodePrompt, reviewCodePrompt, refactorCodePrompt, generateDocsPrompt, } from './ai/index.js';
15
+ // Utilities
16
+ export { loadConfig, validateConfig } from './lib/config.js';
17
+ export { createLogger, createSilentLogger } from './lib/logger.js';
18
+ export { ensureDir, writeGeneratedFile, readFileContents, fileExists, listTypeScriptFiles, getRelativePath, } from './lib/file-system.js';
19
+ export { toPascalCase, toCamelCase, toKebabCase, toSnakeCase, toConstantCase, pluralize, indent, dedent, } from './lib/strings.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,aAAa;AACb,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAE/B,MAAM;AACN,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,KAAK;AACL,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,YAAY;AACZ,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,GACP,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @dcyfr/ai-code-gen - Configuration management
3
+ */
4
+ import type { CodeGenConfig } from '../types/index.js';
5
+ /**
6
+ * Load configuration from a partial config object, merging with defaults.
7
+ */
8
+ export declare function loadConfig(partial?: Partial<CodeGenConfig>): CodeGenConfig;
9
+ /**
10
+ * Validate configuration.
11
+ */
12
+ export declare function validateConfig(config: CodeGenConfig): {
13
+ valid: boolean;
14
+ errors: string[];
15
+ };
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWvD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,CAU9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA0B1F"}