rapidkit 1.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/create.js ADDED
@@ -0,0 +1,505 @@
1
+ import { promises as fsPromises } from 'fs';
2
+ import * as fsExtra from 'fs-extra';
3
+ import path from 'path';
4
+ import inquirer from 'inquirer';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import { execa } from 'execa';
8
+ export async function createProject(projectName, options) {
9
+ const { skipGit = false, testMode = false, demoMode = false } = options;
10
+ const name = projectName || 'rapidkit';
11
+ const projectPath = path.resolve(process.cwd(), name);
12
+ if (await fsExtra.pathExists(projectPath)) {
13
+ console.log(chalk.red(`\nāŒ Directory "${name}" already exists!`));
14
+ console.log(chalk.yellow('šŸ’” Please choose a different name or remove the existing directory.\n'));
15
+ process.exit(1);
16
+ }
17
+ if (demoMode) {
18
+ await createDemoWorkspace(projectPath, name, skipGit);
19
+ return;
20
+ }
21
+ const pythonAnswers = await inquirer.prompt([
22
+ {
23
+ type: 'list',
24
+ name: 'pythonVersion',
25
+ message: 'Select Python version for RapidKit:',
26
+ choices: ['3.10', '3.11', '3.12'],
27
+ default: '3.11',
28
+ },
29
+ {
30
+ type: 'list',
31
+ name: 'installMethod',
32
+ message: 'How would you like to install RapidKit?',
33
+ choices: [
34
+ { name: 'šŸŽÆ Poetry (Recommended - includes virtual env)', value: 'poetry' },
35
+ { name: 'šŸ“¦ pip with venv (Standard)', value: 'venv' },
36
+ { name: 'šŸ”§ pipx (Global isolated install)', value: 'pipx' },
37
+ ],
38
+ default: 'poetry',
39
+ },
40
+ ]);
41
+ console.log(chalk.blue('\nšŸ“¦ Setting up RapidKit environment...\n'));
42
+ const spinner = ora('Creating directory').start();
43
+ try {
44
+ await fsExtra.ensureDir(projectPath);
45
+ spinner.succeed('Directory created');
46
+ if (pythonAnswers.installMethod === 'poetry') {
47
+ await installWithPoetry(projectPath, pythonAnswers.pythonVersion, spinner, testMode);
48
+ }
49
+ else if (pythonAnswers.installMethod === 'venv') {
50
+ await installWithVenv(projectPath, pythonAnswers.pythonVersion, spinner, testMode);
51
+ }
52
+ else {
53
+ await installWithPipx(projectPath, spinner, testMode);
54
+ }
55
+ await createReadme(projectPath, pythonAnswers.installMethod);
56
+ spinner.succeed('RapidKit environment ready!');
57
+ if (!options.skipGit) {
58
+ spinner.start('Initializing git repository');
59
+ try {
60
+ await execa('git', ['init'], { cwd: projectPath });
61
+ await fsExtra.outputFile(path.join(projectPath, '.gitignore'), '.venv/\n__pycache__/\n*.pyc\n.env\n.rapidkit-workspace/\n', 'utf-8');
62
+ await execa('git', ['add', '.'], { cwd: projectPath });
63
+ await execa('git', ['commit', '-m', 'Initial commit: RapidKit environment'], {
64
+ cwd: projectPath,
65
+ });
66
+ spinner.succeed('Git repository initialized');
67
+ }
68
+ catch (error) {
69
+ spinner.warn('Could not initialize git repository');
70
+ }
71
+ }
72
+ console.log(chalk.green('\n✨ RapidKit environment created successfully!\n'));
73
+ console.log(chalk.cyan('šŸ“‚ Location:'), chalk.white(projectPath));
74
+ console.log(chalk.cyan('šŸš€ Get started:\n'));
75
+ console.log(chalk.white(` cd ${name}`));
76
+ if (pythonAnswers.installMethod === 'poetry') {
77
+ let activateCmd = 'source $(poetry env info --path)/bin/activate';
78
+ try {
79
+ const { stdout } = await execa('poetry', ['--version']);
80
+ const versionMatch = stdout.match(/Poetry.*?(\d+)\.(\d+)/);
81
+ if (versionMatch) {
82
+ const majorVersion = parseInt(versionMatch[1]);
83
+ if (majorVersion >= 2) {
84
+ activateCmd = 'source $(poetry env info --path)/bin/activate';
85
+ }
86
+ else {
87
+ activateCmd = 'poetry shell';
88
+ }
89
+ }
90
+ }
91
+ catch (error) {
92
+ }
93
+ console.log(chalk.white(` ${activateCmd} # Or: poetry run rapidkit`));
94
+ console.log(chalk.white(' rapidkit create # Interactive mode'));
95
+ console.log(chalk.white(' cd <project-name> && poetry install && rapidkit run dev'));
96
+ }
97
+ else if (pythonAnswers.installMethod === 'venv') {
98
+ console.log(chalk.white(' source .venv/bin/activate # On Windows: .venv\\Scripts\\activate'));
99
+ console.log(chalk.white(' rapidkit create # Interactive mode'));
100
+ console.log(chalk.white(' cd <project-name> && pip install -r requirements.txt && rapidkit run dev'));
101
+ }
102
+ else {
103
+ console.log(chalk.white(' rapidkit create # Interactive mode'));
104
+ console.log(chalk.white(' cd <project-name> && rapidkit run dev'));
105
+ }
106
+ console.log(chalk.white('\nšŸ’” For more information, check the README.md file.'));
107
+ console.log(chalk.cyan('\nšŸ“š RapidKit commands:'));
108
+ console.log(chalk.white(' rapidkit create - Create a new project (interactive)'));
109
+ console.log(chalk.white(' rapidkit run dev - Run development server'));
110
+ console.log(chalk.white(' rapidkit add module <name> - Add a module (e.g., settings)'));
111
+ console.log(chalk.white(' rapidkit list - List available kits'));
112
+ console.log(chalk.white(' rapidkit modules - List available modules'));
113
+ console.log(chalk.white(' rapidkit --help - Show all commands\n'));
114
+ }
115
+ catch (error) {
116
+ spinner.fail('Failed to create RapidKit environment');
117
+ console.error(chalk.red('\nāŒ Error:'), error);
118
+ try {
119
+ await fsExtra.remove(projectPath);
120
+ }
121
+ catch (cleanupError) {
122
+ }
123
+ process.exit(1);
124
+ }
125
+ }
126
+ async function installWithPoetry(projectPath, pythonVersion, spinner, testMode) {
127
+ spinner.start('Checking Poetry installation');
128
+ try {
129
+ await execa('poetry', ['--version']);
130
+ spinner.succeed('Poetry found');
131
+ }
132
+ catch (error) {
133
+ spinner.fail('Poetry not found');
134
+ console.log(chalk.yellow('\nāš ļø Poetry is not installed.'));
135
+ console.log(chalk.cyan('Install Poetry: https://python-poetry.org/docs/#installation\n'));
136
+ process.exit(1);
137
+ }
138
+ spinner.start('Initializing Poetry project');
139
+ await execa('poetry', ['init', '--no-interaction', '--python', `^${pythonVersion}`], {
140
+ cwd: projectPath,
141
+ });
142
+ const pyprojectPath = path.join(projectPath, 'pyproject.toml');
143
+ const pyprojectContent = await fsPromises.readFile(pyprojectPath, 'utf-8');
144
+ const updatedContent = pyprojectContent.replace('[tool.poetry]', '[tool.poetry]\npackage-mode = false');
145
+ await fsPromises.writeFile(pyprojectPath, updatedContent, 'utf-8');
146
+ spinner.succeed('Poetry project initialized');
147
+ spinner.start('Installing RapidKit');
148
+ if (testMode) {
149
+ const localRapidKitPath = '/home/debux/WOSP/Rapid/community';
150
+ spinner.text = 'Installing RapidKit from local path (test mode)';
151
+ await execa('poetry', ['add', localRapidKitPath], { cwd: projectPath });
152
+ }
153
+ else {
154
+ await execa('poetry', ['add', 'rapidkit'], { cwd: projectPath });
155
+ }
156
+ spinner.succeed('RapidKit installed');
157
+ }
158
+ async function installWithVenv(projectPath, pythonVersion, spinner, testMode) {
159
+ spinner.start(`Checking Python ${pythonVersion}`);
160
+ let pythonCmd = 'python3';
161
+ try {
162
+ const { stdout } = await execa(pythonCmd, ['--version']);
163
+ const version = stdout.match(/Python (\d+\.\d+)/)?.[1];
164
+ if (version && parseFloat(version) < parseFloat(pythonVersion)) {
165
+ throw new Error(`Python ${pythonVersion}+ required, found ${version}`);
166
+ }
167
+ spinner.succeed(`Python ${version} found`);
168
+ }
169
+ catch (error) {
170
+ spinner.fail('Python not found or version too old');
171
+ console.log(chalk.red('\nāŒ Python 3.10+ is required.'));
172
+ console.log(chalk.cyan('Install Python: https://www.python.org/downloads/\n'));
173
+ process.exit(1);
174
+ }
175
+ spinner.start('Creating virtual environment');
176
+ await execa(pythonCmd, ['-m', 'venv', '.venv'], { cwd: projectPath });
177
+ spinner.succeed('Virtual environment created');
178
+ spinner.start('Installing RapidKit');
179
+ const pipPath = path.join(projectPath, '.venv', 'bin', 'pip');
180
+ await execa(pipPath, ['install', '--upgrade', 'pip'], { cwd: projectPath });
181
+ if (testMode) {
182
+ const localRapidKitPath = '/home/debux/WOSP/Rapid/community';
183
+ spinner.text = 'Installing RapidKit from local path (test mode)';
184
+ await execa(pipPath, ['install', '-e', localRapidKitPath], { cwd: projectPath });
185
+ }
186
+ else {
187
+ await execa(pipPath, ['install', 'rapidkit'], { cwd: projectPath });
188
+ }
189
+ spinner.succeed('RapidKit installed');
190
+ }
191
+ async function installWithPipx(projectPath, spinner, testMode) {
192
+ spinner.start('Checking pipx installation');
193
+ try {
194
+ await execa('pipx', ['--version']);
195
+ spinner.succeed('pipx found');
196
+ }
197
+ catch (error) {
198
+ spinner.fail('pipx not found');
199
+ console.log(chalk.yellow('\nāš ļø pipx is not installed.'));
200
+ console.log(chalk.cyan('Install pipx: https://pypa.github.io/pipx/installation/\n'));
201
+ process.exit(1);
202
+ }
203
+ spinner.start('Installing RapidKit globally with pipx');
204
+ if (testMode) {
205
+ const localRapidKitPath = '/home/debux/WOSP/Rapid/community';
206
+ spinner.text = 'Installing RapidKit from local path (test mode)';
207
+ await execa('pipx', ['install', '-e', localRapidKitPath]);
208
+ }
209
+ else {
210
+ await execa('pipx', ['install', 'rapidkit']);
211
+ }
212
+ spinner.succeed('RapidKit installed globally');
213
+ await fsExtra.outputFile(path.join(projectPath, '.rapidkit-global'), 'RapidKit installed globally with pipx\n', 'utf-8');
214
+ }
215
+ async function createReadme(projectPath, installMethod) {
216
+ const activationCmd = installMethod === 'poetry'
217
+ ? 'source $(poetry env info --path)/bin/activate\n# Or simply use: poetry run rapidkit <command>'
218
+ : installMethod === 'venv'
219
+ ? 'source .venv/bin/activate # On Windows: .venv\\Scripts\\activate'
220
+ : 'N/A (globally installed)';
221
+ const readmeContent = `# RapidKit Workspace
222
+
223
+ This directory contains a RapidKit development environment.
224
+
225
+ ## Installation Method
226
+
227
+ **${installMethod === 'poetry' ? 'Poetry' : installMethod === 'venv' ? 'Python venv + pip' : 'pipx (global)'}**
228
+
229
+ ## Getting Started
230
+
231
+ ### 1. Activate Environment
232
+
233
+ \`\`\`bash
234
+ ${activationCmd}
235
+ \`\`\`
236
+
237
+ ### 2. Create Your First Project
238
+
239
+ \`\`\`bash
240
+ # Interactive mode (recommended):
241
+ rapidkit create
242
+ # Follow the prompts to choose kit and project name
243
+
244
+ # Or specify directly:
245
+ rapidkit create project fastapi.standard my-project
246
+
247
+ # With poetry run (no activation needed):
248
+ poetry run rapidkit create
249
+ \`\`\`
250
+
251
+ Interactive mode will guide you through selecting a kit and configuring your project.
252
+
253
+ ### 3. Navigate and Run
254
+
255
+ \`\`\`bash
256
+ cd my-project
257
+ # Install dependencies:
258
+ poetry install
259
+
260
+ # Run the server (simplest way):
261
+ rapidkit run dev
262
+
263
+ # Or with poetry run:
264
+ poetry run rapidkit run dev
265
+
266
+ # Or manually:
267
+ uvicorn src.main:app --reload
268
+ \`\`\`
269
+
270
+ ### 4. Add Modules (Optional)
271
+
272
+ \`\`\`bash
273
+ # Add common modules to your project:
274
+ rapidkit add module settings
275
+ rapidkit add module logging
276
+ rapidkit add module database
277
+
278
+ # List available modules:
279
+ rapidkit modules list
280
+ \`\`\`
281
+
282
+ ## Available Commands
283
+
284
+ - \`rapidkit create\` - Create a new project (interactive)
285
+ - \`rapidkit create project <kit> <name>\` - Create project with specific kit
286
+ - \`rapidkit run dev\` - Run development server
287
+ - \`rapidkit add module <name>\` - Add a module (e.g., \`rapidkit add module settings\`)
288
+ - \`rapidkit list\` - List available kits
289
+ - \`rapidkit modules\` - List available modules
290
+ - \`rapidkit upgrade\` - Upgrade RapidKit
291
+ - \`rapidkit doctor\` - Check system requirements
292
+ - \`rapidkit --help\` - Show all commands
293
+
294
+ ## RapidKit Documentation
295
+
296
+ For full documentation, visit: [RapidKit Docs](https://rapidkit.dev) *(or appropriate URL)*
297
+
298
+ ## Workspace Structure
299
+
300
+ \`\`\`
301
+ ${installMethod === 'venv' ? '.venv/ # Python virtual environment' : ''}
302
+ ${installMethod === 'poetry' ? 'pyproject.toml # Poetry configuration' : ''}
303
+ my-project/ # Your RapidKit projects go here
304
+ README.md # This file
305
+ \`\`\`
306
+
307
+ ## Troubleshooting
308
+
309
+ If you encounter issues:
310
+
311
+ 1. Ensure Python 3.10+ is installed: \`python3 --version\`
312
+ 2. Check RapidKit installation: \`rapidkit --version\`
313
+ 3. Run diagnostics: \`rapidkit doctor\`
314
+ 4. Visit RapidKit documentation or GitHub issues
315
+ `;
316
+ await fsPromises.writeFile(path.join(projectPath, 'README.md'), readmeContent, 'utf-8');
317
+ }
318
+ async function createDemoWorkspace(projectPath, name, skipGit) {
319
+ const spinner = ora('Creating demo workspace').start();
320
+ try {
321
+ await fsExtra.ensureDir(projectPath);
322
+ spinner.succeed('Directory created');
323
+ spinner.start('Setting up demo kit generator');
324
+ const packageJsonContent = JSON.stringify({
325
+ name: `${name}-workspace`,
326
+ version: '1.0.0',
327
+ private: true,
328
+ description: 'RapidKit demo workspace',
329
+ scripts: {
330
+ generate: 'node generate-demo.js',
331
+ },
332
+ }, null, 2);
333
+ await fsPromises.writeFile(path.join(projectPath, 'package.json'), packageJsonContent, 'utf-8');
334
+ const generateScriptContent = `#!/usr/bin/env node
335
+ /**
336
+ * Demo Kit Generator - Create FastAPI demo projects
337
+ *
338
+ * This workspace contains bundled RapidKit templates that you can use
339
+ * to generate demo projects without installing Python RapidKit.
340
+ *
341
+ * Usage:
342
+ * npm run generate <project-name>
343
+ * node generate-demo.js <project-name>
344
+ *
345
+ * Example:
346
+ * npm run generate my-api
347
+ */
348
+
349
+ const { execSync } = require('child_process');
350
+ const path = require('path');
351
+
352
+ const projectName = process.argv[2];
353
+
354
+ if (!projectName) {
355
+ console.error('\\nāŒ Please provide a project name');
356
+ console.log('\\nUsage: npm run generate <project-name>\\n');
357
+ console.log('Example: npm run generate my-api\\n');
358
+ process.exit(1);
359
+ }
360
+
361
+ // Use npx to run create-rapidkit in demo mode, targeting the current directory
362
+ const targetPath = path.join(process.cwd(), projectName);
363
+
364
+ try {
365
+ console.log(\`\\nGenerating demo project: \${projectName}...\\n\`);
366
+ execSync(\`npx create-rapidkit "\${projectName}" --demo-only\`, {
367
+ stdio: 'inherit',
368
+ cwd: process.cwd(),
369
+ });
370
+ console.log(\`\\nāœ… Demo project created at: \${targetPath}\\n\`);
371
+ } catch (error) {
372
+ console.error('\\nāŒ Failed to generate demo project\\n');
373
+ process.exit(1);
374
+ }
375
+ `;
376
+ await fsPromises.writeFile(path.join(projectPath, 'generate-demo.js'), generateScriptContent, 'utf-8');
377
+ try {
378
+ await execa('chmod', ['+x', path.join(projectPath, 'generate-demo.js')]);
379
+ }
380
+ catch {
381
+ }
382
+ const readmeContent = `# RapidKit Demo Workspace
383
+
384
+ Welcome to your RapidKit demo workspace! This environment lets you generate FastAPI demo projects using bundled RapidKit templates, without needing to install Python RapidKit.
385
+
386
+ ## šŸš€ Quick Start
387
+
388
+ ### Generate Your First Demo Project
389
+
390
+ \`\`\`bash
391
+ # Generate a demo project:
392
+ node generate-demo.js my-api
393
+
394
+ # Navigate to the project:
395
+ cd my-api
396
+
397
+ # Install dependencies:
398
+ poetry install
399
+
400
+ # Run the development server:
401
+ poetry run python -m src.main
402
+ \`\`\`
403
+
404
+ Your API will be available at \`http://localhost:8000\`
405
+
406
+ ## šŸ“¦ Generate Multiple Projects
407
+
408
+ You can create multiple demo projects in this workspace:
409
+
410
+ \`\`\`bash
411
+ node generate-demo.js api-service
412
+ node generate-demo.js auth-service
413
+ node generate-demo.js data-service
414
+ \`\`\`
415
+
416
+ Each project is independent and has its own dependencies.
417
+
418
+ ## šŸŽÆ What's Included
419
+
420
+ Each generated demo project contains:
421
+
422
+ - **FastAPI Application** - Modern async web framework
423
+ - **Routing System** - Organized API routes
424
+ - **Module System** - Extensible module architecture
425
+ - **CLI Commands** - Built-in command system
426
+ - **Testing Setup** - pytest configuration
427
+ - **Poetry Configuration** - Dependency management
428
+
429
+ ## šŸ“š Next Steps
430
+
431
+ 1. **Explore the Generated Code** - Check out \`src/main.py\` and \`src/routing/\`
432
+ 2. **Add Routes** - Create new endpoints in \`src/routing/\`
433
+ 3. **Install Full RapidKit** - For advanced features: \`pipx install rapidkit\`
434
+ 4. **Read the Documentation** - Visit [RapidKit Docs](https://rapidkit.dev)
435
+
436
+ ## āš ļø Demo Mode Limitations
437
+
438
+ This is a demo workspace with:
439
+ - āœ… Pre-built FastAPI templates
440
+ - āœ… Project generation without Python RapidKit
441
+ - āŒ No RapidKit CLI commands (\`rapidkit create\`, \`rapidkit add module\`)
442
+ - āŒ No interactive module system
443
+
444
+ For full RapidKit features, install the Python package:
445
+
446
+ \`\`\`bash
447
+ pipx install rapidkit
448
+ \`\`\`
449
+
450
+ ## šŸ› ļø Workspace Structure
451
+
452
+ \`\`\`
453
+ ${name}/
454
+ ā”œā”€ā”€ generate-demo.js # Demo project generator
455
+ ā”œā”€ā”€ README.md # This file
456
+ └── my-api/ # Your generated projects go here
457
+ \`\`\`
458
+
459
+ ## šŸ’” Tips
460
+
461
+ - Run \`node generate-demo.js --help\` for more options (coming soon)
462
+ - Each project can have different configurations
463
+ - Demo projects are production-ready FastAPI applications
464
+ - You can copy and modify templates as needed
465
+
466
+ ---
467
+
468
+ **Generated with create-rapidkit** | [GitHub](https://github.com/getrapidkit/rapidkit-npm)
469
+ `;
470
+ await fsPromises.writeFile(path.join(projectPath, 'README.md'), readmeContent, 'utf-8');
471
+ spinner.succeed('Demo workspace setup complete');
472
+ if (!skipGit) {
473
+ spinner.start('Initializing git repository');
474
+ try {
475
+ await execa('git', ['init'], { cwd: projectPath });
476
+ await fsExtra.outputFile(path.join(projectPath, '.gitignore'), '# Dependencies\nnode_modules/\n\n# Generated projects\n*/\n!generate-demo.js\n!README.md\n\n# Python\n__pycache__/\n*.pyc\n.venv/\n.env\n', 'utf-8');
477
+ await execa('git', ['add', '.'], { cwd: projectPath });
478
+ await execa('git', ['commit', '-m', 'Initial commit: Demo workspace'], {
479
+ cwd: projectPath,
480
+ });
481
+ spinner.succeed('Git repository initialized');
482
+ }
483
+ catch (error) {
484
+ spinner.warn('Could not initialize git repository');
485
+ }
486
+ }
487
+ console.log(chalk.green('\n✨ Demo workspace created successfully!\n'));
488
+ console.log(chalk.cyan('šŸ“‚ Location:'), chalk.white(projectPath));
489
+ console.log(chalk.cyan('šŸš€ Get started:\n'));
490
+ console.log(chalk.white(` cd ${name}`));
491
+ console.log(chalk.white(' node generate-demo.js my-api'));
492
+ console.log(chalk.white(' cd my-api'));
493
+ console.log(chalk.white(' poetry install'));
494
+ console.log(chalk.white(' poetry run python -m src.main'));
495
+ console.log();
496
+ console.log(chalk.yellow('šŸ’” Note:'), 'This is a demo workspace. For full RapidKit features:');
497
+ console.log(chalk.cyan(' pipx install rapidkit'));
498
+ console.log();
499
+ }
500
+ catch (error) {
501
+ spinner.fail('Failed to create demo workspace');
502
+ throw error;
503
+ }
504
+ }
505
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface KitVariables {
2
+ project_name: string;
3
+ author?: string;
4
+ description?: string;
5
+ app_version?: string;
6
+ license?: string;
7
+ }
8
+ export declare function generateDemoKit(projectPath: string, variables: KitVariables): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=demo-kit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-kit.d.ts","sourceRoot":"","sources":["../src/demo-kit.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CAsIf"}
@@ -0,0 +1,124 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import nunjucks from 'nunjucks';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { fileURLToPath } from 'url';
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = path.dirname(__filename);
9
+ export async function generateDemoKit(projectPath, variables) {
10
+ const spinner = ora('Generating FastAPI demo project...').start();
11
+ try {
12
+ const packageRoot = path.resolve(__dirname, '..');
13
+ const templatesPath = path.join(packageRoot, 'templates', 'kits', 'fastapi-standard');
14
+ const env = nunjucks.configure(templatesPath, {
15
+ autoescape: false,
16
+ trimBlocks: true,
17
+ lstripBlocks: true,
18
+ });
19
+ const context = {
20
+ project_name: variables.project_name,
21
+ author: variables.author || 'RapidKit User',
22
+ description: variables.description || 'FastAPI service generated with RapidKit',
23
+ app_version: variables.app_version || '0.1.0',
24
+ license: variables.license || 'MIT',
25
+ };
26
+ const files = [
27
+ 'src/main.py.j2',
28
+ 'src/__init__.py.j2',
29
+ 'src/cli.py.j2',
30
+ 'src/routing/__init__.py.j2',
31
+ 'src/routing/health.py.j2',
32
+ 'src/modules/__init__.py.j2',
33
+ 'tests/__init__.py.j2',
34
+ 'README.md.j2',
35
+ 'pyproject.toml.j2',
36
+ ];
37
+ for (const templateFile of files) {
38
+ const templatePath = path.join(templatesPath, templateFile);
39
+ const templateContent = await fs.readFile(templatePath, 'utf-8');
40
+ const rendered = env.renderString(templateContent, context);
41
+ const outputFile = templateFile.replace(/\.j2$/, '');
42
+ const outputPath = path.join(projectPath, outputFile);
43
+ await fs.mkdir(path.dirname(outputPath), { recursive: true });
44
+ await fs.writeFile(outputPath, rendered);
45
+ }
46
+ const gitignoreContent = `# Python
47
+ __pycache__/
48
+ *.py[cod]
49
+ *$py.class
50
+ *.so
51
+ .Python
52
+ build/
53
+ develop-eggs/
54
+ dist/
55
+ downloads/
56
+ eggs/
57
+ .eggs/
58
+ lib/
59
+ lib64/
60
+ parts/
61
+ sdist/
62
+ var/
63
+ wheels/
64
+ *.egg-info/
65
+ .installed.cfg
66
+ *.egg
67
+
68
+ # Virtual environments
69
+ .venv/
70
+ venv/
71
+ ENV/
72
+ env/
73
+
74
+ # IDEs
75
+ .vscode/
76
+ .idea/
77
+ *.swp
78
+ *.swo
79
+ *~
80
+
81
+ # OS
82
+ .DS_Store
83
+ Thumbs.db
84
+
85
+ # Project specific
86
+ .env
87
+ .env.local
88
+ `;
89
+ await fs.writeFile(path.join(projectPath, '.gitignore'), gitignoreContent);
90
+ spinner.succeed('FastAPI demo project generated!');
91
+ console.log(`
92
+ ${chalk.green('✨ Demo project created successfully!')}
93
+
94
+ ${chalk.bold('šŸ“‚ Project structure:')}
95
+ ${projectPath}/
96
+ ā”œā”€ā”€ src/
97
+ │ ā”œā”€ā”€ main.py # FastAPI application
98
+ │ ā”œā”€ā”€ cli.py # CLI commands
99
+ │ ā”œā”€ā”€ routing/ # API routes
100
+ │ └── modules/ # Module system
101
+ ā”œā”€ā”€ tests/ # Test suite
102
+ ā”œā”€ā”€ pyproject.toml # Poetry configuration
103
+ └── README.md
104
+
105
+ ${chalk.bold('šŸš€ Get started:')}
106
+ cd ${path.basename(projectPath)}
107
+ poetry install
108
+ poetry run python -m src.main
109
+
110
+ ${chalk.bold('šŸ“š Next steps:')}
111
+ • Add RapidKit modules: poetry add rapidkit
112
+ • Read the README.md for more information
113
+ • Start building your API!
114
+
115
+ ${chalk.yellow('Note:')} This is a standalone demo. For full RapidKit features and modules,
116
+ install RapidKit Python package: ${chalk.cyan('pipx install rapidkit')}
117
+ `);
118
+ }
119
+ catch (error) {
120
+ spinner.fail('Failed to generate demo project');
121
+ throw error;
122
+ }
123
+ }
124
+ //# sourceMappingURL=demo-kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo-kit.js","sourceRoot":"","sources":["../src/demo-kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAU3C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,SAAuB;IAEvB,MAAM,OAAO,GAAG,GAAG,CAAC,oCAAoC,CAAC,CAAC,KAAK,EAAE,CAAC;IAElE,IAAI,CAAC;QAGH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAEtF,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE;YAC5C,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAGH,MAAM,OAAO,GAAG;YACd,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,eAAe;YAC3C,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,yCAAyC;YAC/E,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,OAAO;YAC7C,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,KAAK;SACpC,CAAC;QAGF,MAAM,KAAK,GAAG;YACZ,gBAAgB;YAChB,oBAAoB;YACpB,eAAe;YACf,4BAA4B;YAC5B,0BAA0B;YAC1B,4BAA4B;YAC5B,sBAAsB;YACtB,cAAc;YACd,mBAAmB;SACpB,CAAC;QAGF,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;YAC5D,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAEjE,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAG5D,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAGtD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAG9D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAGD,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0C5B,CAAC;QACE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAE3E,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAEnD,OAAO,CAAC,GAAG,CAAC;EACd,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC;;EAEnD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;EACnC,WAAW;;;;;;;;;;EAUX,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;OACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;;;;EAI/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;;;EAK5B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;mCACY,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC;CACrE,CAAC,CAAC;IACD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}