genit-all 1.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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const prompts_1 = require("@inquirer/prompts");
41
+ const fs = __importStar(require("fs-extra"));
42
+ const path_1 = __importDefault(require("path"));
43
+ const dotenv_1 = __importDefault(require("dotenv"));
44
+ const ui_util_1 = require("../utils/ui.util");
45
+ const helpers_util_1 = require("../utils/helpers.util");
46
+ const ai_util_1 = require("../utils/ai.util");
47
+ // Load environment variables
48
+ dotenv_1.default.config();
49
+ async function main() {
50
+ try {
51
+ // Show welcome banner
52
+ (0, ui_util_1.showBanner)();
53
+ // Initialize AI Provider
54
+ const spinner = (0, ui_util_1.createSpinner)('Initializing AI provider...');
55
+ spinner.start();
56
+ try {
57
+ (0, ai_util_1.initializeAIProvider)();
58
+ const providerName = process.env.AI_PROVIDER || 'Gemini';
59
+ spinner.succeed(`AI provider initialized (${providerName})`);
60
+ }
61
+ catch (error) {
62
+ spinner.fail('Failed to initialize AI provider');
63
+ process.exit(1);
64
+ }
65
+ (0, ui_util_1.showSectionHeader)('File Generation');
66
+ // Main file type selection
67
+ const fileTypeChoices = [
68
+ { name: '🐳 Docker', value: 'docker', description: 'Docker-related files' },
69
+ { name: '📝 README.md', value: 'readme', description: 'Project documentation' },
70
+ { name: '🚫 .gitignore', value: 'gitignore', description: 'Git ignore file' },
71
+ ];
72
+ const fileType = await (0, prompts_1.select)({
73
+ message: 'Choose file to generate:',
74
+ choices: fileTypeChoices,
75
+ });
76
+ let targetFile;
77
+ let subType;
78
+ let displayName;
79
+ // Handle Docker sub-options
80
+ if (fileType === 'docker') {
81
+ const dockerChoices = [
82
+ { name: '📦 Dockerfile', value: 'dockerfile', description: 'Container image definition' },
83
+ { name: '🔧 docker-compose.yml', value: 'docker-compose', description: 'Multi-container setup' },
84
+ { name: '🚫 .dockerignore', value: 'dockerignore', description: 'Docker ignore file' },
85
+ ];
86
+ const dockerType = await (0, prompts_1.select)({
87
+ message: 'Choose Docker file:',
88
+ choices: dockerChoices,
89
+ });
90
+ subType = dockerType;
91
+ if (dockerType === 'dockerfile') {
92
+ targetFile = 'Dockerfile';
93
+ displayName = 'Dockerfile';
94
+ }
95
+ else if (dockerType === 'docker-compose') {
96
+ targetFile = 'docker-compose.yml';
97
+ displayName = 'docker-compose.yml';
98
+ }
99
+ else {
100
+ targetFile = '.dockerignore';
101
+ displayName = '.dockerignore';
102
+ }
103
+ }
104
+ else if (fileType === 'readme') {
105
+ targetFile = 'README.md';
106
+ displayName = 'README.md';
107
+ }
108
+ else {
109
+ targetFile = '.gitignore';
110
+ displayName = '.gitignore';
111
+ }
112
+ const outputPath = path_1.default.join(process.cwd(), targetFile);
113
+ // Check if file exists
114
+ const fileExists = await fs.pathExists(outputPath);
115
+ if (fileExists) {
116
+ (0, ui_util_1.showWarning)(`File ${(0, ui_util_1.formatFilePath)(targetFile)} already exists`);
117
+ const shouldOverwrite = await (0, prompts_1.confirm)({
118
+ message: 'Do you want to overwrite it?',
119
+ default: false,
120
+ });
121
+ if (!shouldOverwrite) {
122
+ (0, ui_util_1.showInfo)('Generation cancelled');
123
+ process.exit(0);
124
+ }
125
+ }
126
+ (0, ui_util_1.showSectionHeader)('Analyzing Project');
127
+ // Scan project
128
+ const scanSpinner = (0, ui_util_1.createSpinner)('Scanning project structure...');
129
+ scanSpinner.start();
130
+ const projectSummary = await (0, helpers_util_1.getProjectSummary)(process.cwd());
131
+ scanSpinner.succeed('Project structure analyzed');
132
+ (0, ui_util_1.showInfo)(`Found project files and dependencies`);
133
+ (0, ui_util_1.showSectionHeader)('Generating Content');
134
+ // Generate content
135
+ const genSpinner = (0, ui_util_1.createSpinner)(`Generating ${displayName} with AI...`);
136
+ genSpinner.start();
137
+ try {
138
+ const generatedContent = await (0, ai_util_1.generateContent)(fileType === 'docker' ? 'Docker' : fileType === 'readme' ? 'README.md' : '.gitignore', subType, projectSummary);
139
+ genSpinner.succeed(`Content generated successfully`);
140
+ // Write to file
141
+ const writeSpinner = (0, ui_util_1.createSpinner)(`Writing to ${targetFile}...`);
142
+ writeSpinner.start();
143
+ await fs.writeFile(outputPath, generatedContent, 'utf-8');
144
+ writeSpinner.succeed('File written successfully');
145
+ (0, ui_util_1.showSectionHeader)('Success');
146
+ (0, ui_util_1.showSuccess)(`Generated ${(0, ui_util_1.formatFilePath)(targetFile)} successfully!`);
147
+ (0, ui_util_1.showInfo)(`Location: ${(0, ui_util_1.formatFilePath)(outputPath)}`);
148
+ }
149
+ catch (error) {
150
+ genSpinner.fail('Failed to generate content');
151
+ (0, ui_util_1.showError)(`Generation failed: ${error?.message || 'Unknown error'}`);
152
+ process.exit(1);
153
+ }
154
+ }
155
+ catch (error) {
156
+ if (error.name === 'ExitPromptError') {
157
+ // User cancelled with Ctrl+C
158
+ (0, ui_util_1.showInfo)('\nOperation cancelled by user');
159
+ process.exit(0);
160
+ }
161
+ (0, ui_util_1.showError)(`Unexpected error: ${error?.message || 'Unknown error'}`);
162
+ console.error(error);
163
+ process.exit(1);
164
+ }
165
+ }
166
+ // Run the CLI
167
+ main();
168
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface FileGenerationOption {
2
+ type: 'docker' | 'readme' | 'gitignore';
3
+ subType?: 'dockerfile' | 'docker-compose' | 'dockerignore';
4
+ }
5
+ export interface ProjectFile {
6
+ path: string;
7
+ content: string;
8
+ size: number;
9
+ }
10
+ export interface ProjectSummary {
11
+ structure: string[];
12
+ keyFiles: ProjectFile[];
13
+ totalFiles: number;
14
+ }
15
+ export interface GenerationConfig {
16
+ fileType: string;
17
+ subType?: string;
18
+ outputPath: string;
19
+ projectSummary: string;
20
+ }
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACxC,OAAO,CAAC,EAAE,YAAY,GAAG,gBAAgB,GAAG,cAAc,CAAC;CAC5D;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AI Provider interface
3
+ */
4
+ interface AIProvider {
5
+ generateContent(prompt: string): Promise<string>;
6
+ }
7
+ /**
8
+ * Get the appropriate AI provider based on environment configuration
9
+ */
10
+ export declare function initializeAIProvider(): AIProvider;
11
+ /**
12
+ * Get or initialize the AI provider
13
+ */
14
+ export declare function getAIProvider(): AIProvider;
15
+ /**
16
+ * Generate file content using the configured AI provider
17
+ */
18
+ export declare function generateContent(fileType: string, subType: string | undefined, projectSummary: string): Promise<string>;
19
+ export {};
20
+ //# sourceMappingURL=ai.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.util.d.ts","sourceRoot":"","sources":["../../src/utils/ai.util.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,UAAU,UAAU;IAClB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD;AA6BD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,CAqBjD;AAID;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeAIProvider = initializeAIProvider;
4
+ exports.getAIProvider = getAIProvider;
5
+ exports.generateContent = generateContent;
6
+ const generative_ai_1 = require("@google/generative-ai");
7
+ const ui_util_1 = require("./ui.util");
8
+ /**
9
+ * Google Gemini Provider
10
+ */
11
+ class GeminiProvider {
12
+ client;
13
+ model;
14
+ constructor(apiKey, model = 'gemini-2.5-flash') {
15
+ this.client = new generative_ai_1.GoogleGenerativeAI(apiKey);
16
+ this.model = model;
17
+ }
18
+ async generateContent(prompt) {
19
+ try {
20
+ const model = this.client.getGenerativeModel({ model: this.model });
21
+ const result = await model.generateContent(prompt);
22
+ const response = await result.response;
23
+ const text = response.text();
24
+ return text.trim();
25
+ }
26
+ catch (error) {
27
+ (0, ui_util_1.showError)(`Gemini API error: ${error?.message || 'Unknown error'}`);
28
+ throw error;
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Get the appropriate AI provider based on environment configuration
34
+ */
35
+ function initializeAIProvider() {
36
+ const provider = process.env.AI_PROVIDER?.toLowerCase() || 'gemini';
37
+ switch (provider) {
38
+ case 'gemini':
39
+ case 'google':
40
+ const geminiKey = process.env.GEMINI_API_KEY;
41
+ if (!geminiKey || geminiKey === 'your_api_key_here') {
42
+ (0, ui_util_1.showError)('GEMINI_API_KEY not found or invalid');
43
+ (0, ui_util_1.showWarning)('Please add your Google Gemini API key to .env');
44
+ (0, ui_util_1.showInfo)('Get a free key at: https://aistudio.google.com/app/apikey');
45
+ process.exit(1);
46
+ }
47
+ const geminiModel = process.env.GEMINI_MODEL || 'gemini-2.5-flash';
48
+ return new GeminiProvider(geminiKey, geminiModel);
49
+ default:
50
+ (0, ui_util_1.showError)(`Unknown AI provider: ${provider}`);
51
+ (0, ui_util_1.showWarning)('Supported providers: gemini');
52
+ process.exit(1);
53
+ }
54
+ }
55
+ let aiProvider = null;
56
+ /**
57
+ * Get or initialize the AI provider
58
+ */
59
+ function getAIProvider() {
60
+ if (!aiProvider) {
61
+ aiProvider = initializeAIProvider();
62
+ }
63
+ return aiProvider;
64
+ }
65
+ /**
66
+ * Generate file content using the configured AI provider
67
+ */
68
+ async function generateContent(fileType, subType, projectSummary) {
69
+ const provider = getAIProvider();
70
+ const prompt = buildPrompt(fileType, subType, projectSummary);
71
+ try {
72
+ return await provider.generateContent(prompt);
73
+ }
74
+ catch (error) {
75
+ (0, ui_util_1.showError)(`Generation failed: ${error?.message || 'Unknown error'}`);
76
+ throw error;
77
+ }
78
+ }
79
+ /**
80
+ * Build the prompt based on file type
81
+ */
82
+ function buildPrompt(fileType, subType, projectSummary) {
83
+ let prompt = `You are an expert in TypeScript project setups and DevOps. Based on this project summary (structure and key files), generate a high-quality, production-ready `;
84
+ if (fileType === 'Docker') {
85
+ if (subType === 'dockerfile') {
86
+ prompt += `Dockerfile optimized for a Node.js/TypeScript application. Include:
87
+ - Multi-stage builds for production
88
+ - Proper layer caching
89
+ - Security best practices
90
+ - Minimal final image size
91
+ - Health checks if applicable`;
92
+ }
93
+ else if (subType === 'docker-compose') {
94
+ prompt += `docker-compose.yml file. Analyze the package.json dependencies and:
95
+ - Set up the main application service
96
+ - Add any required services (databases, redis, etc.) based on dependencies
97
+ - Configure proper networking
98
+ - Add volume mounts for development
99
+ - Include environment variable examples`;
100
+ }
101
+ else if (subType === 'dockerignore') {
102
+ prompt += `.dockerignore file to exclude unnecessary files from Docker builds. Include:
103
+ - node_modules
104
+ - Build artifacts
105
+ - Development files
106
+ - Git files
107
+ - Documentation that shouldn't be in the image`;
108
+ }
109
+ }
110
+ else if (fileType === 'README.md') {
111
+ prompt += `README.md file with comprehensive documentation including:
112
+ - Project title and description
113
+ - Features list
114
+ - Installation instructions
115
+ - Usage examples
116
+ - Configuration details
117
+ - Scripts available
118
+ - Project structure overview
119
+ - Contributing guidelines (if applicable)
120
+ - License information`;
121
+ }
122
+ else if (fileType === '.gitignore') {
123
+ prompt += `.gitignore file tailored to Node.js/TypeScript projects. Include:
124
+ - node_modules
125
+ - Build outputs (dist, build)
126
+ - Environment files
127
+ - IDE configurations
128
+ - OS-specific files
129
+ - Logs and temporary files
130
+ - Any project-specific patterns based on the structure`;
131
+ }
132
+ prompt += `\n\nProject Summary:\n${projectSummary}\n\nIMPORTANT: Output ONLY the file content, no explanations, no markdown code blocks, no additional text. Just the raw file content ready to be written to disk.`;
133
+ return prompt;
134
+ }
135
+ //# sourceMappingURL=ai.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.util.js","sourceRoot":"","sources":["../../src/utils/ai.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getProjectSummary(rootDir: string): Promise<string>;
2
+ //# sourceMappingURL=helpers.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.util.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.util.ts"],"names":[],"mappings":"AAkBA,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+ExE"}
@@ -0,0 +1,160 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getProjectSummary = getProjectSummary;
40
+ const path_1 = __importDefault(require("path"));
41
+ const fs = __importStar(require("fs-extra"));
42
+ const glob_1 = require("glob");
43
+ const chalk_1 = __importDefault(require("chalk"));
44
+ const MAX_FILE_SIZE = 100 * 1024; // 100KB max per file
45
+ const MAX_TOTAL_SIZE = 500 * 1024; // 500KB total
46
+ const IMPORTANT_FILES = [
47
+ 'package.json',
48
+ 'tsconfig.json',
49
+ 'README.md',
50
+ 'src/index.ts',
51
+ 'src/main.ts',
52
+ 'src/app.ts',
53
+ 'src/server.ts',
54
+ ];
55
+ async function getProjectSummary(rootDir) {
56
+ try {
57
+ // Get list of files to ignore
58
+ const ignorePatterns = await getIgnorePatterns(rootDir);
59
+ // Get all files in project
60
+ const allFiles = await (0, glob_1.glob)('**/*', {
61
+ cwd: rootDir,
62
+ nodir: true,
63
+ ignore: ignorePatterns,
64
+ dot: true,
65
+ });
66
+ // Filter out binary files and large files
67
+ const textFiles = allFiles.filter(file => {
68
+ const ext = path_1.default.extname(file).toLowerCase();
69
+ const binaryExts = ['.png', '.jpg', '.jpeg', '.gif', '.ico', '.pdf', '.zip', '.tar', '.gz'];
70
+ return !binaryExts.includes(ext);
71
+ });
72
+ let summary = '=== PROJECT STRUCTURE ===\n\n';
73
+ summary += `Total files: ${textFiles.length}\n\n`;
74
+ summary += 'File tree:\n';
75
+ textFiles.slice(0, 100).forEach((file) => {
76
+ summary += ` ${file}\n`;
77
+ });
78
+ if (textFiles.length > 100) {
79
+ summary += ` ... and ${textFiles.length - 100} more files\n`;
80
+ }
81
+ summary += '\n=== KEY FILE CONTENTS ===\n\n';
82
+ // Read important files
83
+ let totalSize = 0;
84
+ for (const keyFile of IMPORTANT_FILES) {
85
+ const fullPath = path_1.default.join(rootDir, keyFile);
86
+ if (await fs.pathExists(fullPath)) {
87
+ try {
88
+ const stats = await fs.stat(fullPath);
89
+ if (stats.size < MAX_FILE_SIZE && totalSize + stats.size < MAX_TOTAL_SIZE) {
90
+ const content = await fs.readFile(fullPath, 'utf-8');
91
+ summary += `--- ${keyFile} ---\n${content}\n\n`;
92
+ totalSize += stats.size;
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.log(chalk_1.default.red(`Error reading ${fullPath}: ${error}`));
97
+ }
98
+ }
99
+ }
100
+ // Add some source files if we have room
101
+ const sourceFiles = textFiles.filter(f => f.startsWith('src/') &&
102
+ (f.endsWith('.ts') || f.endsWith('.js')) &&
103
+ !IMPORTANT_FILES.includes(f)).slice(0, 5);
104
+ for (const srcFile of sourceFiles) {
105
+ if (totalSize >= MAX_TOTAL_SIZE)
106
+ break;
107
+ const fullPath = path_1.default.join(rootDir, srcFile);
108
+ try {
109
+ const stats = await fs.stat(fullPath);
110
+ if (stats.size < MAX_FILE_SIZE) {
111
+ const content = await fs.readFile(fullPath, 'utf-8');
112
+ summary += `--- ${srcFile} ---\n${content}\n\n`;
113
+ totalSize += stats.size;
114
+ }
115
+ }
116
+ catch (error) {
117
+ console.log(chalk_1.default.red(`Error reading ${fullPath}: ${error}`));
118
+ }
119
+ }
120
+ return summary;
121
+ }
122
+ catch (error) {
123
+ console.error('Error generating project summary:', error);
124
+ return 'Error: Could not read project structure';
125
+ }
126
+ }
127
+ /**
128
+ * Get ignore patterns from .gitignore and add defaults
129
+ */
130
+ async function getIgnorePatterns(rootDir) {
131
+ const defaultIgnores = [
132
+ 'node_modules/**',
133
+ '.git/**',
134
+ 'dist/**',
135
+ 'build/**',
136
+ '*.log',
137
+ '.env',
138
+ '.env.*',
139
+ 'coverage/**',
140
+ '.next/**',
141
+ '.cache/**',
142
+ ];
143
+ const gitignorePath = path_1.default.join(rootDir, '.gitignore');
144
+ if (await fs.pathExists(gitignorePath)) {
145
+ try {
146
+ const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
147
+ const gitignorePatterns = gitignoreContent
148
+ .split('\n')
149
+ .map(line => line.trim())
150
+ .filter(line => line && !line.startsWith('#'))
151
+ .map(pattern => pattern.endsWith('/') ? `${pattern}**` : pattern);
152
+ return [...defaultIgnores, ...gitignorePatterns];
153
+ }
154
+ catch (error) {
155
+ return defaultIgnores;
156
+ }
157
+ }
158
+ return defaultIgnores;
159
+ }
160
+ //# sourceMappingURL=helpers.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.util.js","sourceRoot":"","sources":["../../src/utils/helpers.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { OpenAI } from 'openai';
2
+ /**
3
+ * Initialize OpenAI client with API key validation
4
+ */
5
+ export declare function initializeOpenAI(): OpenAI;
6
+ /**
7
+ * Get the OpenAI client instance
8
+ */
9
+ export declare function getOpenAIClient(): OpenAI;
10
+ /**
11
+ * Generate file content using GPT-5.2
12
+ */
13
+ export declare function generateContent(fileType: string, subType: string | undefined, projectSummary: string): Promise<string>;
14
+ //# sourceMappingURL=openai.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.util.d.ts","sourceRoot":"","sources":["../../src/utils/openai.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAiBzC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initializeOpenAI = initializeOpenAI;
4
+ exports.getOpenAIClient = getOpenAIClient;
5
+ exports.generateContent = generateContent;
6
+ const openai_1 = require("openai");
7
+ const ui_util_1 = require("./ui.util");
8
+ let openaiClient = null;
9
+ /**
10
+ * Initialize OpenAI client with API key validation
11
+ */
12
+ function initializeOpenAI() {
13
+ const apiKey = process.env.OPENAI_API_KEY;
14
+ if (!apiKey) {
15
+ (0, ui_util_1.showError)('OPENAI_API_KEY not found in environment variables');
16
+ (0, ui_util_1.showWarning)('Please create a .env file with your OpenAI API key');
17
+ process.exit(1);
18
+ }
19
+ if (apiKey.trim() === '' || apiKey === 'your_api_key_here') {
20
+ (0, ui_util_1.showError)('Invalid OPENAI_API_KEY in .env file');
21
+ (0, ui_util_1.showWarning)('Please add a valid OpenAI API key to your .env file');
22
+ process.exit(1);
23
+ }
24
+ openaiClient = new openai_1.OpenAI({ apiKey });
25
+ return openaiClient;
26
+ }
27
+ /**
28
+ * Get the OpenAI client instance
29
+ */
30
+ function getOpenAIClient() {
31
+ if (!openaiClient) {
32
+ return initializeOpenAI();
33
+ }
34
+ return openaiClient;
35
+ }
36
+ /**
37
+ * Generate file content using GPT-5.2
38
+ */
39
+ async function generateContent(fileType, subType, projectSummary) {
40
+ const client = getOpenAIClient();
41
+ let prompt = buildPrompt(fileType, subType, projectSummary);
42
+ try {
43
+ const response = await client.chat.completions.create({
44
+ model: 'gpt-4o', // Using gpt-4o as gpt-5.2 may not be available yet
45
+ messages: [{ role: 'user', content: prompt }],
46
+ max_tokens: 3000,
47
+ temperature: 0.7,
48
+ });
49
+ return response.choices[0]?.message?.content?.trim() || '';
50
+ }
51
+ catch (error) {
52
+ if (error?.status === 429) {
53
+ (0, ui_util_1.showError)('OpenAI API quota exceeded');
54
+ (0, ui_util_1.showWarning)('Please check your OpenAI account billing and quota');
55
+ (0, ui_util_1.showWarning)('Visit: https://platform.openai.com/account/billing');
56
+ }
57
+ else if (error?.status === 401) {
58
+ (0, ui_util_1.showError)('Invalid OpenAI API key');
59
+ (0, ui_util_1.showWarning)('Please check your API key in the .env file');
60
+ }
61
+ else {
62
+ (0, ui_util_1.showError)(`OpenAI API error: ${error?.message || 'Unknown error'}`);
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ /**
68
+ * Build the prompt for GPT based on file type
69
+ */
70
+ function buildPrompt(fileType, subType, projectSummary) {
71
+ let prompt = `You are an expert in TypeScript project setups and DevOps. Based on this project summary (structure and key files), generate a high-quality, production-ready `;
72
+ if (fileType === 'Docker') {
73
+ if (subType === 'Dockerfile') {
74
+ prompt += `Dockerfile optimized for a Node.js/TypeScript application. Include:
75
+ - Multi-stage builds for production
76
+ - Proper layer caching
77
+ - Security best practices
78
+ - Minimal final image size
79
+ - Health checks if applicable`;
80
+ }
81
+ else if (subType === 'docker-compose') {
82
+ prompt += `docker-compose.yml file. Analyze the package.json dependencies and:
83
+ - Set up the main application service
84
+ - Add any required services (databases, redis, etc.) based on dependencies
85
+ - Configure proper networking
86
+ - Add volume mounts for development
87
+ - Include environment variable examples`;
88
+ }
89
+ else if (subType === '.dockerignore') {
90
+ prompt += `.dockerignore file to exclude unnecessary files from Docker builds. Include:
91
+ - node_modules
92
+ - Build artifacts
93
+ - Development files
94
+ - Git files
95
+ - Documentation that shouldn't be in the image`;
96
+ }
97
+ }
98
+ else if (fileType === 'README.md') {
99
+ prompt += `README.md file with comprehensive documentation including:
100
+ - Project title and description
101
+ - Features list
102
+ - Installation instructions
103
+ - Usage examples
104
+ - Configuration details
105
+ - Scripts available
106
+ - Project structure overview
107
+ - Contributing guidelines (if applicable)
108
+ - License information`;
109
+ }
110
+ else if (fileType === '.gitignore') {
111
+ prompt += `.gitignore file tailored to Node.js/TypeScript projects. Include:
112
+ - node_modules
113
+ - Build outputs (dist, build)
114
+ - Environment files
115
+ - IDE configurations
116
+ - OS-specific files
117
+ - Logs and temporary files
118
+ - Any project-specific patterns based on the structure`;
119
+ }
120
+ prompt += `\n\nProject Summary:\n${projectSummary}\n\nIMPORTANT: Output ONLY the file content, no explanations, no markdown code blocks, no additional text. Just the raw file content ready to be written to disk.`;
121
+ return prompt;
122
+ }
123
+ //# sourceMappingURL=openai.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.util.js","sourceRoot":"","sources":["../../src/utils/openai.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Ora } from 'ora';
2
+ /**
3
+ * Display a welcome banner
4
+ */
5
+ export declare function showBanner(): void;
6
+ /**
7
+ * Display a success message
8
+ */
9
+ export declare function showSuccess(message: string): void;
10
+ /**
11
+ * Display an error message
12
+ */
13
+ export declare function showError(message: string): void;
14
+ /**
15
+ * Display an info message
16
+ */
17
+ export declare function showInfo(message: string): void;
18
+ /**
19
+ * Display a warning message
20
+ */
21
+ export declare function showWarning(message: string): void;
22
+ /**
23
+ * Create a spinner with a message
24
+ */
25
+ export declare function createSpinner(message: string): Ora;
26
+ /**
27
+ * Display file path in a formatted way
28
+ */
29
+ export declare function formatFilePath(filePath: string): string;
30
+ /**
31
+ * Display a section header
32
+ */
33
+ export declare function showSectionHeader(title: string): void;
34
+ //# sourceMappingURL=ui.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.util.d.ts","sourceRoot":"","sources":["../../src/utils/ui.util.ts"],"names":[],"mappings":"AAEA,OAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAkBjC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAMlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIrD"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.showBanner = showBanner;
7
+ exports.showSuccess = showSuccess;
8
+ exports.showError = showError;
9
+ exports.showInfo = showInfo;
10
+ exports.showWarning = showWarning;
11
+ exports.createSpinner = createSpinner;
12
+ exports.formatFilePath = formatFilePath;
13
+ exports.showSectionHeader = showSectionHeader;
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ const boxen_1 = __importDefault(require("boxen"));
16
+ const ora_1 = __importDefault(require("ora"));
17
+ /**
18
+ * Display a welcome banner
19
+ */
20
+ function showBanner() {
21
+ const banner = chalk_1.default.bold.cyan(`
22
+ ██████╗ ███████╗███╗ ██╗██╗████████╗ █████╗ ██╗ ██╗
23
+ ██╔════╝ ██╔════╝████╗ ██║██║╚══██╔══╝ ██╔══██╗██║ ██║
24
+ ██║ ███╗█████╗ ██╔██╗ ██║██║ ██║ █████╗███████║██║ ██║
25
+ ██║ ██║██╔══╝ ██║╚██╗██║██║ ██║ ╚════╝██╔══██║██║ ██║
26
+ ╚██████╔╝███████╗██║ ╚████║██║ ██║ ██║ ██║███████╗███████╗
27
+ ╚═════╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝
28
+ `);
29
+ const subtitle = chalk_1.default.gray('File generator for TypeScript projects');
30
+ console.log((0, boxen_1.default)(banner + '\n' + subtitle, {
31
+ padding: 1,
32
+ margin: 1,
33
+ borderStyle: 'round',
34
+ borderColor: 'cyan',
35
+ }));
36
+ }
37
+ /**
38
+ * Display a success message
39
+ */
40
+ function showSuccess(message) {
41
+ console.log(chalk_1.default.green('✓') + ' ' + chalk_1.default.bold(message));
42
+ }
43
+ /**
44
+ * Display an error message
45
+ */
46
+ function showError(message) {
47
+ console.log(chalk_1.default.red('✗') + ' ' + chalk_1.default.bold.red(message));
48
+ }
49
+ /**
50
+ * Display an info message
51
+ */
52
+ function showInfo(message) {
53
+ console.log(chalk_1.default.blue('ℹ') + ' ' + chalk_1.default.cyan(message));
54
+ }
55
+ /**
56
+ * Display a warning message
57
+ */
58
+ function showWarning(message) {
59
+ console.log(chalk_1.default.yellow('⚠') + ' ' + chalk_1.default.yellow(message));
60
+ }
61
+ /**
62
+ * Create a spinner with a message
63
+ */
64
+ function createSpinner(message) {
65
+ return (0, ora_1.default)({
66
+ text: message,
67
+ color: 'cyan',
68
+ spinner: 'dots',
69
+ });
70
+ }
71
+ /**
72
+ * Display file path in a formatted way
73
+ */
74
+ function formatFilePath(filePath) {
75
+ return chalk_1.default.underline.cyan(filePath);
76
+ }
77
+ /**
78
+ * Display a section header
79
+ */
80
+ function showSectionHeader(title) {
81
+ console.log('\n' + chalk_1.default.bold.magenta('━'.repeat(50)));
82
+ console.log(chalk_1.default.bold.magenta(` ${title}`));
83
+ console.log(chalk_1.default.bold.magenta('━'.repeat(50)) + '\n');
84
+ }
85
+ //# sourceMappingURL=ui.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.util.js","sourceRoot":"","sources":["../../src/utils/ui.util.ts"],"names":[],"mappings":";;;;;AAOA,gCAkBC;AAKD,kCAEC;AAKD,8BAEC;AAKD,4BAEC;AAKD,kCAEC;AAKD,sCAMC;AAKD,wCAEC;AAKD,8CAIC;AAhFD,kDAA0B;AAC1B,kDAA0B;AAC1B,8CAA+B;AAE/B;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;GAO9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,IAAA,eAAK,EAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,EAAE;QAC1C,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAgB,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAA,aAAG,EAAC;QACT,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB;IAC7C,OAAO,eAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACzD,CAAC"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "genit-all",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered file generator for TypeScript projects - generates Dockerfiles, README, .gitignore and more",
5
+ "main": "dist/cli/main.js",
6
+ "bin": {
7
+ "genit-all": "dist/cli/main.js"
8
+ },
9
+ "scripts": {
10
+ "dev": "ts-node src/cli/main.ts",
11
+ "build": "tsc",
12
+ "start": "node dist/cli/main.js",
13
+ "prepublishOnly": "npm run build",
14
+ "test": "echo \"Error: no test specified\" && exit 1"
15
+ },
16
+ "keywords": [
17
+ "cli",
18
+ "typescript",
19
+ "ai",
20
+ "gemini",
21
+ "generator",
22
+ "dockerfile",
23
+ "readme",
24
+ "gitignore",
25
+ "code-generation",
26
+ "devtools"
27
+ ],
28
+ "author": "King Faithful <faithfuleromosele001@gmail.com>",
29
+ "license": "MIT",
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/Faithful001/genit-all.git"
33
+ },
34
+ "type": "commonjs",
35
+ "devDependencies": {
36
+ "@types/fs-extra": "^11.0.4",
37
+ "@types/glob": "^8.1.0",
38
+ "@types/ignore-walk": "^4.0.3",
39
+ "@types/inquirer": "^9.0.9",
40
+ "@types/node": "^25.0.3",
41
+ "ts-node": "^10.9.2",
42
+ "typescript": "^5.9.3"
43
+ },
44
+ "dependencies": {
45
+ "@google/generative-ai": "^0.24.1",
46
+ "@inquirer/prompts": "^7.10.1",
47
+ "boxen": "^7.1.1",
48
+ "chalk": "^5.6.2",
49
+ "commander": "^14.0.2",
50
+ "dotenv": "^17.2.3",
51
+ "fs-extra": "^11.3.3",
52
+ "glob": "^13.0.0",
53
+ "ignore-walk": "^8.0.0",
54
+ "inquirer": "^13.1.0",
55
+ "ora": "^8.2.0"
56
+ }
57
+ }