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/LICENSE +21 -0
- package/README.md +410 -0
- package/dist/create.d.ts +8 -0
- package/dist/create.d.ts.map +1 -0
- package/dist/create.js +505 -0
- package/dist/create.js.map +1 -0
- package/dist/demo-kit.d.ts +10 -0
- package/dist/demo-kit.d.ts.map +1 -0
- package/dist/demo-kit.js +124 -0
- package/dist/demo-kit.js.map +1 -0
- package/dist/generator.d.ts +12 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +877 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
- package/templates/kits/fastapi-standard/README.md.j2 +30 -0
- package/templates/kits/fastapi-standard/kit.yaml +120 -0
- package/templates/kits/fastapi-standard/pyproject.toml.j2 +41 -0
- package/templates/kits/fastapi-standard/src/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-standard/src/cli.py.j2 +333 -0
- package/templates/kits/fastapi-standard/src/main.py.j2 +41 -0
- package/templates/kits/fastapi-standard/src/modules/__init__.py.j2 +3 -0
- package/templates/kits/fastapi-standard/src/routing/__init__.py.j2 +13 -0
- package/templates/kits/fastapi-standard/src/routing/health.py.j2 +13 -0
- package/templates/kits/fastapi-standard/tests/__init__.py.j2 +1 -0
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"}
|
package/dist/demo-kit.js
ADDED
|
@@ -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":"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"}
|