rapidkit 1.0.0-beta.7 → 1.0.0-beta.9
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/README.md +14 -11
- package/dist/create.js +2 -2
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/validation.js +1 -1
- package/dist/validation.js.map +1 -1
- package/package.json +8 -4
- package/dist/generator.d.ts +0 -12
- package/dist/generator.d.ts.map +0 -1
- package/dist/generator.js +0 -877
- package/dist/generator.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# rapidkit
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/rapidkit)
|
|
4
|
+
[](https://www.npmjs.com/package/rapidkit)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://github.com/getrapidkit/rapidkit-npm/stargazers)
|
|
7
|
+
|
|
3
8
|
> ⚠️ **BETA VERSION** - This is a companion tool for RapidKit Python framework.
|
|
4
9
|
> The stable production version of RapidKit will be released soon on PyPI.
|
|
5
10
|
> Until then, use `--demo` mode to create demo workspaces with bundled templates, or `--test-mode` to try the full RapidKit installation locally.
|
|
@@ -440,17 +445,15 @@ MIT
|
|
|
440
445
|
|
|
441
446
|
### About This Beta
|
|
442
447
|
|
|
443
|
-
**rapidkit** (npm package) is currently in beta version 1.0.0-beta.
|
|
444
|
-
|
|
445
|
-
**New in beta.
|
|
446
|
-
-
|
|
447
|
-
- ✅
|
|
448
|
-
-
|
|
449
|
-
-
|
|
450
|
-
-
|
|
451
|
-
-
|
|
452
|
-
- 🧪 Full test suite with 26 tests
|
|
453
|
-
- 📚 Comprehensive documentation (DEVELOPMENT.md, CHANGELOG.md)
|
|
448
|
+
**rapidkit** (npm package) is currently in beta version 1.0.0-beta.9. The `--demo` mode is fully functional for creating workspaces with bundled FastAPI templates. You can generate multiple projects within the same workspace without needing Python RapidKit installed.
|
|
449
|
+
|
|
450
|
+
**New in beta.9:**
|
|
451
|
+
- ✅ E2E integration tests for reliability
|
|
452
|
+
- ✅ CI/CD pipeline with GitHub Actions
|
|
453
|
+
- ✅ Enhanced error messages with troubleshooting steps
|
|
454
|
+
- ✅ Security audit automation
|
|
455
|
+
- ✅ Bundle size monitoring
|
|
456
|
+
- ✅ Multi-platform testing (Ubuntu, macOS, Windows)
|
|
454
457
|
|
|
455
458
|
Install with:
|
|
456
459
|
```bash
|
package/dist/create.js
CHANGED
|
@@ -387,7 +387,7 @@ if (!projectName) {
|
|
|
387
387
|
process.exit(1);
|
|
388
388
|
}
|
|
389
389
|
|
|
390
|
-
// Use npx to run
|
|
390
|
+
// Use npx to run rapidkit in demo mode, targeting the current directory
|
|
391
391
|
const targetPath = path.join(process.cwd(), projectName);
|
|
392
392
|
|
|
393
393
|
try {
|
|
@@ -494,7 +494,7 @@ ${name}/
|
|
|
494
494
|
|
|
495
495
|
---
|
|
496
496
|
|
|
497
|
-
**Generated with
|
|
497
|
+
**Generated with RapidKit** | [GitHub](https://github.com/getrapidkit/rapidkit-npm)
|
|
498
498
|
`;
|
|
499
499
|
await fsPromises.writeFile(path.join(projectPath, 'README.md'), readmeContent, 'utf-8');
|
|
500
500
|
spinner.succeed('Demo workspace setup complete');
|
package/dist/errors.d.ts
CHANGED
|
@@ -24,4 +24,10 @@ export declare class InstallationError extends RapidKitError {
|
|
|
24
24
|
export declare class RapidKitNotAvailableError extends RapidKitError {
|
|
25
25
|
constructor();
|
|
26
26
|
}
|
|
27
|
+
export declare class NetworkError extends RapidKitError {
|
|
28
|
+
constructor(operation: string, originalError?: Error);
|
|
29
|
+
}
|
|
30
|
+
export declare class FileSystemError extends RapidKitError {
|
|
31
|
+
constructor(operation: string, path: string, originalError?: Error);
|
|
32
|
+
}
|
|
27
33
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM;gBAFvB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,YAAA;CAM1B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,eAAe,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAU3D;AAED,qBAAa,mBAAoB,SAAQ,aAAa;;CAQrD;AAED,qBAAa,iBAAkB,SAAQ,aAAa;;CAQnD;AAED,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,EAAE,MAAM;CAO5B;AAED,qBAAa,uBAAwB,SAAQ,aAAa;gBAC5C,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGzC;AAED,qBAAa,iBAAkB,SAAQ,aAAa;gBACtC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAc,SAAQ,KAAK;IAG7B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM;gBAFvB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,YAAA;CAM1B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,eAAe,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAU3D;AAED,qBAAa,mBAAoB,SAAQ,aAAa;;CAQrD;AAED,qBAAa,iBAAkB,SAAQ,aAAa;;CAQnD;AAED,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,EAAE,MAAM;CAO5B;AAED,qBAAa,uBAAwB,SAAQ,aAAa;gBAC5C,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGzC;AAED,qBAAa,iBAAkB,SAAQ,aAAa;gBACtC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;CAK/C;AAED,qBAAa,yBAA0B,SAAQ,aAAa;;CAQ3D;AAED,qBAAa,YAAa,SAAQ,aAAa;gBACjC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAOrD;AAED,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAOnE"}
|
package/dist/errors.js
CHANGED
|
@@ -39,12 +39,24 @@ export class InvalidProjectNameError extends RapidKitError {
|
|
|
39
39
|
}
|
|
40
40
|
export class InstallationError extends RapidKitError {
|
|
41
41
|
constructor(step, originalError) {
|
|
42
|
-
|
|
42
|
+
const message = `Installation failed at: ${step}`;
|
|
43
|
+
const details = `${originalError.message}\n\nTroubleshooting:\n- Check your internet connection\n- Verify Python/Poetry installation\n- Try running with --debug flag for more details`;
|
|
44
|
+
super(message, 'INSTALLATION_ERROR', details);
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
export class RapidKitNotAvailableError extends RapidKitError {
|
|
46
48
|
constructor() {
|
|
47
|
-
super('RapidKit Python package is not yet available on PyPI', 'RAPIDKIT_NOT_AVAILABLE', '
|
|
49
|
+
super('RapidKit Python package is not yet available on PyPI', 'RAPIDKIT_NOT_AVAILABLE', 'Available options:\n 1. Demo mode: npx rapidkit my-workspace --demo\n 2. Test mode: npx rapidkit my-workspace --test-mode (requires local RapidKit)\n 3. Wait for official PyPI release (coming soon)');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export class NetworkError extends RapidKitError {
|
|
53
|
+
constructor(operation, originalError) {
|
|
54
|
+
super(`Network error during ${operation}`, 'NETWORK_ERROR', `Failed to complete network operation.\n${originalError?.message || ''}\n\nPlease check:\n- Internet connection\n- Firewall settings\n- Proxy configuration`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class FileSystemError extends RapidKitError {
|
|
58
|
+
constructor(operation, path, originalError) {
|
|
59
|
+
super(`File system error: ${operation}`, 'FILESYSTEM_ERROR', `Failed to ${operation} at: ${path}\n${originalError?.message || ''}\n\nPlease check:\n- File/directory permissions\n- Available disk space\n- Path validity`);
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
62
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAgB;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAGvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,eAAuB,EAAE,YAAqB;QACxD,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,UAAU,eAAe,qBAAqB,YAAY,EAAE;YAC9D,CAAC,CAAC,UAAU,eAAe,aAAa,CAAC;QAC3C,KAAK,CACH,OAAO,EACP,kBAAkB,EAClB,8DAA8D,CAC/D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD;QACE,KAAK,CACH,yBAAyB,EACzB,kBAAkB,EAClB,kEAAkE,CACnE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD;QACE,KAAK,CACH,uBAAuB,EACvB,gBAAgB,EAChB,6DAA6D,CAC9D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,YAAY,OAAe;QACzB,KAAK,CACH,cAAc,OAAO,kBAAkB,EACvC,kBAAkB,EAClB,iEAAiE,CAClE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IACxD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,0BAA0B,IAAI,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,YAAY,IAAY,EAAE,aAAoB;QAC5C,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAG7B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAgB;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;QAGvB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,eAAuB,EAAE,YAAqB;QACxD,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,UAAU,eAAe,qBAAqB,YAAY,EAAE;YAC9D,CAAC,CAAC,UAAU,eAAe,aAAa,CAAC;QAC3C,KAAK,CACH,OAAO,EACP,kBAAkB,EAClB,8DAA8D,CAC/D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD;QACE,KAAK,CACH,yBAAyB,EACzB,kBAAkB,EAClB,kEAAkE,CACnE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD;QACE,KAAK,CACH,uBAAuB,EACvB,gBAAgB,EAChB,6DAA6D,CAC9D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,YAAY,OAAe;QACzB,KAAK,CACH,cAAc,OAAO,kBAAkB,EACvC,kBAAkB,EAClB,iEAAiE,CAClE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IACxD,YAAY,IAAY,EAAE,MAAc;QACtC,KAAK,CAAC,0BAA0B,IAAI,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,YAAY,IAAY,EAAE,aAAoB;QAC5C,MAAM,OAAO,GAAG,2BAA2B,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,GAAG,aAAa,CAAC,OAAO,+IAA+I,CAAC;QACxL,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IAC1D;QACE,KAAK,CACH,sDAAsD,EACtD,wBAAwB,EACxB,0MAA0M,CAC3M,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,SAAiB,EAAE,aAAqB;QAClD,KAAK,CACH,wBAAwB,SAAS,EAAE,EACnC,eAAe,EACf,0CAA0C,aAAa,EAAE,OAAO,IAAI,EAAE,sFAAsF,CAC7J,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,YAAY,SAAiB,EAAE,IAAY,EAAE,aAAqB;QAChE,KAAK,CACH,sBAAsB,SAAS,EAAE,EACjC,kBAAkB,EAClB,aAAa,SAAS,QAAQ,IAAI,KAAK,aAAa,EAAE,OAAO,IAAI,EAAE,0FAA0F,CAC9J,CAAC;IACJ,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ let currentProjectPath = null;
|
|
|
15
15
|
let cleanupInProgress = false;
|
|
16
16
|
const program = new Command();
|
|
17
17
|
program
|
|
18
|
-
.name('
|
|
18
|
+
.name('rapidkit')
|
|
19
19
|
.description('Create a RapidKit development environment or workspace')
|
|
20
20
|
.version(getVersion())
|
|
21
21
|
.argument('[directory-name]', 'Name of the workspace or project directory')
|
|
@@ -37,7 +37,7 @@ program
|
|
|
37
37
|
if (options.updateCheck !== false) {
|
|
38
38
|
await checkForUpdates();
|
|
39
39
|
}
|
|
40
|
-
console.log(chalk.blue.bold('\n🚀 Welcome to
|
|
40
|
+
console.log(chalk.blue.bold('\n🚀 Welcome to RapidKit!\n'));
|
|
41
41
|
if (options.demoOnly) {
|
|
42
42
|
const projectName = directoryName || 'my-fastapi-project';
|
|
43
43
|
try {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AAGpC,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/validation.js
CHANGED
|
@@ -24,7 +24,7 @@ export function validateProjectName(name) {
|
|
|
24
24
|
'node',
|
|
25
25
|
'npm',
|
|
26
26
|
'rapidkit',
|
|
27
|
-
'
|
|
27
|
+
'rapidkit',
|
|
28
28
|
];
|
|
29
29
|
if (reservedNames.includes(name.toLowerCase())) {
|
|
30
30
|
throw new InvalidProjectNameError(name, `"${name}" is a reserved name. Please choose a different name.`);
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAKtD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAE9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,0BAA0B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAID,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,uBAAuB,CAC/B,IAAI,EACJ,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IAGD,MAAM,aAAa,GAAG;QACpB,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,OAAO;QACP,KAAK;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,MAAM;QACN,KAAK;QACL,UAAU;QACV,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAKtD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAE9C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,0BAA0B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAID,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,uBAAuB,CAC/B,IAAI,EACJ,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IAGD,MAAM,aAAa,GAAG;QACpB,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,OAAO;QACP,KAAK;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,MAAM;QACN,KAAK;QACL,UAAU;QACV,UAAU;KACX,CAAC;IAEF,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,uBAAuB,CAC/B,IAAI,EACJ,IAAI,IAAI,uDAAuD,CAChE,CAAC;IACJ,CAAC;IAGD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,yCAAyC,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACtB,MAAM,IAAI,uBAAuB,CAAC,IAAI,EAAE,uCAAuC,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rapidkit",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
|
|
6
6
|
"keywords": [
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"url": "git+https://github.com/getrapidkit/rapidkit-npm.git"
|
|
22
22
|
},
|
|
23
23
|
"bin": {
|
|
24
|
-
"
|
|
24
|
+
"rapidkit": "dist/index.js"
|
|
25
25
|
},
|
|
26
26
|
"files": [
|
|
27
27
|
"dist",
|
|
@@ -34,12 +34,15 @@
|
|
|
34
34
|
"test": "vitest run",
|
|
35
35
|
"test:watch": "vitest",
|
|
36
36
|
"test:coverage": "vitest run --coverage",
|
|
37
|
+
"test:e2e": "vitest run src/__tests__/e2e.test.ts",
|
|
37
38
|
"lint": "eslint src --ext .ts",
|
|
38
39
|
"lint:fix": "eslint src --ext .ts --fix",
|
|
39
40
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
40
41
|
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
41
42
|
"typecheck": "tsc --noEmit",
|
|
42
|
-
"validate": "npm run typecheck && npm run lint && npm run format:check && npm test"
|
|
43
|
+
"validate": "npm run typecheck && npm run lint && npm run format:check && npm test",
|
|
44
|
+
"security": "npm audit --audit-level=moderate",
|
|
45
|
+
"bundle-size": "tsc && du -sh dist/ && ls -lh dist/"
|
|
43
46
|
},
|
|
44
47
|
"dependencies": {
|
|
45
48
|
"chalk": "^5.3.0",
|
|
@@ -76,5 +79,6 @@
|
|
|
76
79
|
"eslint --fix",
|
|
77
80
|
"prettier --write"
|
|
78
81
|
]
|
|
79
|
-
}
|
|
82
|
+
},
|
|
83
|
+
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
|
80
84
|
}
|
package/dist/generator.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface ProjectConfig {
|
|
2
|
-
projectName: string;
|
|
3
|
-
framework: 'fastapi-standard' | 'fastapi-advanced' | 'nestjs-standard' | 'nestjs-advanced';
|
|
4
|
-
pythonVersion: '3.10' | '3.11' | '3.12';
|
|
5
|
-
packageManager: 'poetry' | 'pip' | 'npm';
|
|
6
|
-
selectedModules: string[];
|
|
7
|
-
includeDocker: boolean;
|
|
8
|
-
includeTesting: boolean;
|
|
9
|
-
includeCI: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare function generateProjectFiles(config: ProjectConfig): Record<string, string>;
|
|
12
|
-
//# sourceMappingURL=generator.d.ts.map
|
package/dist/generator.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IAC3F,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,cAAc,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgFlF"}
|
package/dist/generator.js
DELETED
|
@@ -1,877 +0,0 @@
|
|
|
1
|
-
export function generateProjectFiles(config) {
|
|
2
|
-
const files = {};
|
|
3
|
-
const isFastAPI = config.framework.startsWith('fastapi');
|
|
4
|
-
files['README.md'] = generateReadme(config);
|
|
5
|
-
files['.gitignore'] = generateGitignore();
|
|
6
|
-
files['.env.example'] = generateEnvExample(config);
|
|
7
|
-
if (isFastAPI) {
|
|
8
|
-
if (config.packageManager === 'poetry') {
|
|
9
|
-
files['pyproject.toml'] = generatePyProjectToml(config);
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
files['requirements.txt'] = generateRequirementsTxt(config);
|
|
13
|
-
files['setup.py'] = generateSetupPy(config);
|
|
14
|
-
}
|
|
15
|
-
files['src/__init__.py'] = '';
|
|
16
|
-
files['src/main.py'] = generateMainPy(config);
|
|
17
|
-
files['src/config.py'] = generateConfigPy(config);
|
|
18
|
-
files['src/core/__init__.py'] = '';
|
|
19
|
-
files['src/core/database.py'] = generateDatabasePy(config);
|
|
20
|
-
files['src/core/dependencies.py'] = generateDependenciesPy(config);
|
|
21
|
-
files['src/api/__init__.py'] = '';
|
|
22
|
-
files['src/api/routes.py'] = generateRoutesPy(config);
|
|
23
|
-
config.selectedModules.forEach((moduleSlug) => {
|
|
24
|
-
const moduleFiles = generateModuleFiles(moduleSlug, config);
|
|
25
|
-
Object.entries(moduleFiles).forEach(([path, content]) => {
|
|
26
|
-
files[path] = content;
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
files['package.json'] = generatePackageJson(config);
|
|
32
|
-
files['tsconfig.json'] = generateTsConfig();
|
|
33
|
-
files['nest-cli.json'] = generateNestCliJson();
|
|
34
|
-
files['src/main.ts'] = generateMainTs(config);
|
|
35
|
-
files['src/app.module.ts'] = generateAppModule(config);
|
|
36
|
-
files['src/app.controller.ts'] = generateAppController();
|
|
37
|
-
files['src/app.service.ts'] = generateAppService();
|
|
38
|
-
}
|
|
39
|
-
if (config.includeDocker) {
|
|
40
|
-
files['Dockerfile'] = generateDockerfile(config);
|
|
41
|
-
files['docker-compose.yml'] = generateDockerCompose(config);
|
|
42
|
-
files['.dockerignore'] = generateDockerignore();
|
|
43
|
-
}
|
|
44
|
-
if (config.includeTesting) {
|
|
45
|
-
if (isFastAPI) {
|
|
46
|
-
files['tests/__init__.py'] = '';
|
|
47
|
-
files['tests/conftest.py'] = generateConftestPy(config);
|
|
48
|
-
files['tests/test_main.py'] = generateTestMainPy(config);
|
|
49
|
-
files['pytest.ini'] = generatePytestIni();
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
files['test/app.e2e-spec.ts'] = generateE2ETest();
|
|
53
|
-
files['test/jest-e2e.json'] = generateJestE2EConfig();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (config.includeCI) {
|
|
57
|
-
files['.github/workflows/ci.yml'] = generateGitHubActions(config);
|
|
58
|
-
}
|
|
59
|
-
return files;
|
|
60
|
-
}
|
|
61
|
-
function generateReadme(config) {
|
|
62
|
-
return `# ${config.projectName}
|
|
63
|
-
|
|
64
|
-
Generated by [RapidKit](https://rapidkit.dev)
|
|
65
|
-
|
|
66
|
-
## Description
|
|
67
|
-
|
|
68
|
-
A production-ready ${config.framework} project with Clean Architecture patterns.
|
|
69
|
-
|
|
70
|
-
## Features
|
|
71
|
-
|
|
72
|
-
${config.selectedModules.map((m) => `- ${m}`).join('\n')}
|
|
73
|
-
|
|
74
|
-
## Prerequisites
|
|
75
|
-
|
|
76
|
-
${config.framework.startsWith('fastapi')
|
|
77
|
-
? `- Python ${config.pythonVersion}+
|
|
78
|
-
- ${config.packageManager === 'poetry' ? 'Poetry' : 'pip'}`
|
|
79
|
-
: '- Node.js 18+\n- npm or yarn'}
|
|
80
|
-
|
|
81
|
-
## Installation
|
|
82
|
-
|
|
83
|
-
\`\`\`bash
|
|
84
|
-
${config.framework.startsWith('fastapi')
|
|
85
|
-
? config.packageManager === 'poetry'
|
|
86
|
-
? 'poetry install'
|
|
87
|
-
: 'pip install -r requirements.txt'
|
|
88
|
-
: 'npm install'}
|
|
89
|
-
\`\`\`
|
|
90
|
-
|
|
91
|
-
## Configuration
|
|
92
|
-
|
|
93
|
-
Copy \`.env.example\` to \`.env\` and update the values:
|
|
94
|
-
|
|
95
|
-
\`\`\`bash
|
|
96
|
-
cp .env.example .env
|
|
97
|
-
\`\`\`
|
|
98
|
-
|
|
99
|
-
## Running the Application
|
|
100
|
-
|
|
101
|
-
### Development Mode
|
|
102
|
-
|
|
103
|
-
\`\`\`bash
|
|
104
|
-
${config.framework.startsWith('fastapi')
|
|
105
|
-
? config.packageManager === 'poetry'
|
|
106
|
-
? 'poetry run uvicorn src.main:app --reload'
|
|
107
|
-
: 'uvicorn src.main:app --reload'
|
|
108
|
-
: 'npm run start:dev'}
|
|
109
|
-
\`\`\`
|
|
110
|
-
|
|
111
|
-
${config.includeDocker
|
|
112
|
-
? `### Using Docker
|
|
113
|
-
|
|
114
|
-
\`\`\`bash
|
|
115
|
-
docker-compose up
|
|
116
|
-
\`\`\`
|
|
117
|
-
`
|
|
118
|
-
: ''}
|
|
119
|
-
|
|
120
|
-
## API Documentation
|
|
121
|
-
|
|
122
|
-
Once running, visit:
|
|
123
|
-
- Swagger UI: http://localhost:8000/docs
|
|
124
|
-
- ReDoc: http://localhost:8000/redoc
|
|
125
|
-
|
|
126
|
-
## Testing
|
|
127
|
-
|
|
128
|
-
\`\`\`bash
|
|
129
|
-
${config.framework.startsWith('fastapi')
|
|
130
|
-
? config.packageManager === 'poetry'
|
|
131
|
-
? 'poetry run pytest'
|
|
132
|
-
: 'pytest'
|
|
133
|
-
: 'npm run test'}
|
|
134
|
-
\`\`\`
|
|
135
|
-
|
|
136
|
-
## Project Structure
|
|
137
|
-
|
|
138
|
-
\`\`\`
|
|
139
|
-
${config.projectName}/
|
|
140
|
-
├── src/
|
|
141
|
-
│ ├── main.${config.framework.startsWith('fastapi') ? 'py' : 'ts'}
|
|
142
|
-
│ ├── api/
|
|
143
|
-
│ ├── core/
|
|
144
|
-
${config.selectedModules.map((m) => `│ ├── ${m}/`).join('\n')}
|
|
145
|
-
│ └── ...
|
|
146
|
-
${config.includeTesting ? '├── tests/\n' : ''}${config.includeDocker ? '├── Dockerfile\n├── docker-compose.yml\n' : ''}└── README.md
|
|
147
|
-
\`\`\`
|
|
148
|
-
|
|
149
|
-
## License
|
|
150
|
-
|
|
151
|
-
MIT
|
|
152
|
-
|
|
153
|
-
## Support
|
|
154
|
-
|
|
155
|
-
For issues and questions, visit [RapidKit GitHub](https://github.com/getrapidkit/community)
|
|
156
|
-
`;
|
|
157
|
-
}
|
|
158
|
-
function generateGitignore() {
|
|
159
|
-
return `# Python
|
|
160
|
-
__pycache__/
|
|
161
|
-
*.py[cod]
|
|
162
|
-
*$py.class
|
|
163
|
-
*.so
|
|
164
|
-
.Python
|
|
165
|
-
build/
|
|
166
|
-
develop-eggs/
|
|
167
|
-
dist/
|
|
168
|
-
downloads/
|
|
169
|
-
eggs/
|
|
170
|
-
.eggs/
|
|
171
|
-
lib/
|
|
172
|
-
lib64/
|
|
173
|
-
parts/
|
|
174
|
-
sdist/
|
|
175
|
-
var/
|
|
176
|
-
wheels/
|
|
177
|
-
*.egg-info/
|
|
178
|
-
.installed.cfg
|
|
179
|
-
*.egg
|
|
180
|
-
|
|
181
|
-
# Virtual environments
|
|
182
|
-
venv/
|
|
183
|
-
ENV/
|
|
184
|
-
env/
|
|
185
|
-
.venv
|
|
186
|
-
|
|
187
|
-
# IDEs
|
|
188
|
-
.vscode/
|
|
189
|
-
.idea/
|
|
190
|
-
*.swp
|
|
191
|
-
*.swo
|
|
192
|
-
*~
|
|
193
|
-
|
|
194
|
-
# Environment variables
|
|
195
|
-
.env
|
|
196
|
-
.env.local
|
|
197
|
-
.env.*.local
|
|
198
|
-
|
|
199
|
-
# Testing
|
|
200
|
-
.coverage
|
|
201
|
-
.pytest_cache/
|
|
202
|
-
htmlcov/
|
|
203
|
-
.tox/
|
|
204
|
-
|
|
205
|
-
# Node
|
|
206
|
-
node_modules/
|
|
207
|
-
npm-debug.log*
|
|
208
|
-
yarn-debug.log*
|
|
209
|
-
yarn-error.log*
|
|
210
|
-
|
|
211
|
-
# OS
|
|
212
|
-
.DS_Store
|
|
213
|
-
Thumbs.db
|
|
214
|
-
|
|
215
|
-
# Logs
|
|
216
|
-
*.log
|
|
217
|
-
logs/
|
|
218
|
-
`;
|
|
219
|
-
}
|
|
220
|
-
function generateEnvExample(config) {
|
|
221
|
-
return `# Application
|
|
222
|
-
APP_NAME="${config.projectName}"
|
|
223
|
-
APP_ENV=development
|
|
224
|
-
DEBUG=True
|
|
225
|
-
${config.framework.startsWith('fastapi') ? 'HOST=0.0.0.0\nPORT=8000' : 'PORT=3000'}
|
|
226
|
-
|
|
227
|
-
# Database${config.selectedModules.includes('database') ||
|
|
228
|
-
config.selectedModules.includes('database-orm-pro')
|
|
229
|
-
? `
|
|
230
|
-
DATABASE_URL=postgresql://user:password@localhost:5432/${config.projectName}
|
|
231
|
-
# or for SQLite:
|
|
232
|
-
# DATABASE_URL=sqlite:///./database.db`
|
|
233
|
-
: `
|
|
234
|
-
# DATABASE_URL=postgresql://user:password@localhost:5432/${config.projectName}`}
|
|
235
|
-
|
|
236
|
-
# Authentication${config.selectedModules.includes('auth')
|
|
237
|
-
? `
|
|
238
|
-
JWT_SECRET=your-secret-key-here-change-in-production
|
|
239
|
-
JWT_ALGORITHM=HS256
|
|
240
|
-
JWT_EXPIRATION=3600`
|
|
241
|
-
: `
|
|
242
|
-
# JWT_SECRET=your-secret-key-here`}
|
|
243
|
-
|
|
244
|
-
# Redis${config.selectedModules.includes('cache')
|
|
245
|
-
? `
|
|
246
|
-
REDIS_URL=redis://localhost:6379/0`
|
|
247
|
-
: `
|
|
248
|
-
# REDIS_URL=redis://localhost:6379/0`}
|
|
249
|
-
|
|
250
|
-
# Email${config.selectedModules.includes('email')
|
|
251
|
-
? `
|
|
252
|
-
SMTP_HOST=smtp.gmail.com
|
|
253
|
-
SMTP_PORT=587
|
|
254
|
-
SMTP_USER=your-email@gmail.com
|
|
255
|
-
SMTP_PASSWORD=your-app-password
|
|
256
|
-
EMAIL_FROM=noreply@${config.projectName}.com`
|
|
257
|
-
: `
|
|
258
|
-
# SMTP_HOST=smtp.gmail.com
|
|
259
|
-
# SMTP_PORT=587`}
|
|
260
|
-
|
|
261
|
-
# AWS S3${config.selectedModules.includes('storage')
|
|
262
|
-
? `
|
|
263
|
-
AWS_ACCESS_KEY_ID=your-access-key
|
|
264
|
-
AWS_SECRET_ACCESS_KEY=your-secret-key
|
|
265
|
-
AWS_REGION=us-east-1
|
|
266
|
-
S3_BUCKET_NAME=your-bucket-name`
|
|
267
|
-
: `
|
|
268
|
-
# AWS_ACCESS_KEY_ID=your-access-key
|
|
269
|
-
# AWS_SECRET_ACCESS_KEY=your-secret-key`}
|
|
270
|
-
`;
|
|
271
|
-
}
|
|
272
|
-
function generatePyProjectToml(config) {
|
|
273
|
-
const dependencies = [
|
|
274
|
-
'fastapi = "^0.115.0"',
|
|
275
|
-
'uvicorn = { extras = ["standard"], version = "^0.32.0" }',
|
|
276
|
-
'pydantic = "^2.9.0"',
|
|
277
|
-
'pydantic-settings = "^2.5.0"',
|
|
278
|
-
];
|
|
279
|
-
if (config.selectedModules.includes('database') ||
|
|
280
|
-
config.selectedModules.includes('database-orm-pro')) {
|
|
281
|
-
dependencies.push('sqlalchemy = "^2.0.0"', 'alembic = "^1.13.0"');
|
|
282
|
-
}
|
|
283
|
-
if (config.selectedModules.includes('auth')) {
|
|
284
|
-
dependencies.push('python-jose = { extras = ["cryptography"], version = "^3.3.0" }', 'passlib = { extras = ["bcrypt"], version = "^1.7.4" }');
|
|
285
|
-
}
|
|
286
|
-
if (config.selectedModules.includes('cache')) {
|
|
287
|
-
dependencies.push('redis = "^5.0.0"');
|
|
288
|
-
}
|
|
289
|
-
return `[tool.poetry]
|
|
290
|
-
name = "${config.projectName}"
|
|
291
|
-
version = "0.1.0"
|
|
292
|
-
description = "Generated by RapidKit"
|
|
293
|
-
authors = ["Your Name <you@example.com>"]
|
|
294
|
-
readme = "README.md"
|
|
295
|
-
|
|
296
|
-
[tool.poetry.dependencies]
|
|
297
|
-
python = "^${config.pythonVersion}"
|
|
298
|
-
${dependencies.join('\n')}
|
|
299
|
-
|
|
300
|
-
[tool.poetry.group.dev.dependencies]
|
|
301
|
-
pytest = "^8.3.0"
|
|
302
|
-
pytest-asyncio = "^0.24.0"
|
|
303
|
-
httpx = "^0.27.0"
|
|
304
|
-
black = "^24.8.0"
|
|
305
|
-
flake8 = "^7.1.0"
|
|
306
|
-
mypy = "^1.11.0"
|
|
307
|
-
|
|
308
|
-
[build-system]
|
|
309
|
-
requires = ["poetry-core"]
|
|
310
|
-
build-backend = "poetry.core.masonry.api"
|
|
311
|
-
|
|
312
|
-
[tool.black]
|
|
313
|
-
line-length = 100
|
|
314
|
-
target-version = ["py${config.pythonVersion.replace('.', '')}"]
|
|
315
|
-
|
|
316
|
-
[tool.mypy]
|
|
317
|
-
python_version = "${config.pythonVersion}"
|
|
318
|
-
warn_return_any = true
|
|
319
|
-
warn_unused_configs = true
|
|
320
|
-
disallow_untyped_defs = true
|
|
321
|
-
`;
|
|
322
|
-
}
|
|
323
|
-
function generateRequirementsTxt(config) {
|
|
324
|
-
const deps = [
|
|
325
|
-
'fastapi>=0.115.0',
|
|
326
|
-
'uvicorn[standard]>=0.32.0',
|
|
327
|
-
'pydantic>=2.9.0',
|
|
328
|
-
'pydantic-settings>=2.5.0',
|
|
329
|
-
];
|
|
330
|
-
if (config.selectedModules.includes('database') ||
|
|
331
|
-
config.selectedModules.includes('database-orm-pro')) {
|
|
332
|
-
deps.push('sqlalchemy>=2.0.0', 'alembic>=1.13.0');
|
|
333
|
-
}
|
|
334
|
-
if (config.selectedModules.includes('auth')) {
|
|
335
|
-
deps.push('python-jose[cryptography]>=3.3.0', 'passlib[bcrypt]>=1.7.4');
|
|
336
|
-
}
|
|
337
|
-
if (config.selectedModules.includes('cache')) {
|
|
338
|
-
deps.push('redis>=5.0.0');
|
|
339
|
-
}
|
|
340
|
-
return deps.join('\n') + '\n';
|
|
341
|
-
}
|
|
342
|
-
function generateSetupPy(config) {
|
|
343
|
-
return `from setuptools import setup, find_packages
|
|
344
|
-
|
|
345
|
-
setup(
|
|
346
|
-
name="${config.projectName}",
|
|
347
|
-
version="0.1.0",
|
|
348
|
-
description="Generated by RapidKit",
|
|
349
|
-
packages=find_packages(),
|
|
350
|
-
python_requires=">=${config.pythonVersion}",
|
|
351
|
-
)
|
|
352
|
-
`;
|
|
353
|
-
}
|
|
354
|
-
function generateMainPy(config) {
|
|
355
|
-
return `from fastapi import FastAPI
|
|
356
|
-
from fastapi.middleware.cors import CORSMiddleware
|
|
357
|
-
from src.config import settings
|
|
358
|
-
from src.api.routes import api_router
|
|
359
|
-
|
|
360
|
-
app = FastAPI(
|
|
361
|
-
title=settings.APP_NAME,
|
|
362
|
-
description="Generated by RapidKit",
|
|
363
|
-
version="0.1.0",
|
|
364
|
-
docs_url="/docs",
|
|
365
|
-
redoc_url="/redoc",
|
|
366
|
-
)
|
|
367
|
-
|
|
368
|
-
# CORS middleware
|
|
369
|
-
app.add_middleware(
|
|
370
|
-
CORSMiddleware,
|
|
371
|
-
allow_origins=["*"], # Update in production
|
|
372
|
-
allow_credentials=True,
|
|
373
|
-
allow_methods=["*"],
|
|
374
|
-
allow_headers=["*"],
|
|
375
|
-
)
|
|
376
|
-
|
|
377
|
-
# Include routers
|
|
378
|
-
app.include_router(api_router, prefix="/api")
|
|
379
|
-
|
|
380
|
-
@app.get("/")
|
|
381
|
-
async def root():
|
|
382
|
-
return {
|
|
383
|
-
"message": "Welcome to ${config.projectName}",
|
|
384
|
-
"status": "running",
|
|
385
|
-
"docs": "/docs",
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
@app.get("/health")
|
|
389
|
-
async def health_check():
|
|
390
|
-
return {"status": "healthy"}
|
|
391
|
-
|
|
392
|
-
if __name__ == "__main__":
|
|
393
|
-
import uvicorn
|
|
394
|
-
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
395
|
-
`;
|
|
396
|
-
}
|
|
397
|
-
function generateConfigPy(config) {
|
|
398
|
-
return `from pydantic_settings import BaseSettings
|
|
399
|
-
|
|
400
|
-
class Settings(BaseSettings):
|
|
401
|
-
APP_NAME: str = "${config.projectName}"
|
|
402
|
-
APP_ENV: str = "development"
|
|
403
|
-
DEBUG: bool = True
|
|
404
|
-
HOST: str = "0.0.0.0"
|
|
405
|
-
PORT: int = 8000
|
|
406
|
-
|
|
407
|
-
${config.selectedModules.includes('database') ||
|
|
408
|
-
config.selectedModules.includes('database-orm-pro')
|
|
409
|
-
? 'DATABASE_URL: str = "sqlite:///./database.db"'
|
|
410
|
-
: '# DATABASE_URL: str = ""'}
|
|
411
|
-
|
|
412
|
-
${config.selectedModules.includes('auth')
|
|
413
|
-
? `JWT_SECRET: str = "your-secret-key"
|
|
414
|
-
JWT_ALGORITHM: str = "HS256"
|
|
415
|
-
JWT_EXPIRATION: int = 3600`
|
|
416
|
-
: '# JWT_SECRET: str = ""'}
|
|
417
|
-
|
|
418
|
-
class Config:
|
|
419
|
-
env_file = ".env"
|
|
420
|
-
case_sensitive = True
|
|
421
|
-
|
|
422
|
-
settings = Settings()
|
|
423
|
-
`;
|
|
424
|
-
}
|
|
425
|
-
function generateDatabasePy(config) {
|
|
426
|
-
if (!config.selectedModules.includes('database') &&
|
|
427
|
-
!config.selectedModules.includes('database-orm-pro')) {
|
|
428
|
-
return '# Database configuration will be added when database module is included\n';
|
|
429
|
-
}
|
|
430
|
-
return `from sqlalchemy import create_engine
|
|
431
|
-
from sqlalchemy.ext.declarative import declarative_base
|
|
432
|
-
from sqlalchemy.orm import sessionmaker
|
|
433
|
-
from src.config import settings
|
|
434
|
-
|
|
435
|
-
engine = create_engine(
|
|
436
|
-
settings.DATABASE_URL,
|
|
437
|
-
connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {},
|
|
438
|
-
)
|
|
439
|
-
|
|
440
|
-
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
|
441
|
-
|
|
442
|
-
Base = declarative_base()
|
|
443
|
-
|
|
444
|
-
def get_db():
|
|
445
|
-
db = SessionLocal()
|
|
446
|
-
try:
|
|
447
|
-
yield db
|
|
448
|
-
finally:
|
|
449
|
-
db.close()
|
|
450
|
-
`;
|
|
451
|
-
}
|
|
452
|
-
function generateDependenciesPy(config) {
|
|
453
|
-
return `from typing import Generator
|
|
454
|
-
from fastapi import Depends, HTTPException, status
|
|
455
|
-
${config.selectedModules.includes('database') || config.selectedModules.includes('database-orm-pro')
|
|
456
|
-
? 'from sqlalchemy.orm import Session\nfrom src.core.database import get_db'
|
|
457
|
-
: ''}
|
|
458
|
-
|
|
459
|
-
# Add your dependencies here
|
|
460
|
-
`;
|
|
461
|
-
}
|
|
462
|
-
function generateRoutesPy(config) {
|
|
463
|
-
return `from fastapi import APIRouter
|
|
464
|
-
|
|
465
|
-
api_router = APIRouter()
|
|
466
|
-
|
|
467
|
-
@api_router.get("/status")
|
|
468
|
-
async def status():
|
|
469
|
-
return {"status": "ok", "message": "API is running"}
|
|
470
|
-
|
|
471
|
-
# Import and include module routers here
|
|
472
|
-
${config.selectedModules.map((m) => `# from src.${m}.routes import router as ${m}_router\n# api_router.include_router(${m}_router, prefix="/${m}", tags=["${m}"])`).join('\n')}
|
|
473
|
-
`;
|
|
474
|
-
}
|
|
475
|
-
function generateModuleFiles(moduleSlug, _config) {
|
|
476
|
-
const files = {};
|
|
477
|
-
const moduleName = moduleSlug.replace(/-/g, '_');
|
|
478
|
-
files[`src/${moduleName}/__init__.py`] = '';
|
|
479
|
-
files[`src/${moduleName}/models.py`] = `# ${moduleSlug} models\n`;
|
|
480
|
-
files[`src/${moduleName}/schemas.py`] =
|
|
481
|
-
`# ${moduleSlug} schemas\nfrom pydantic import BaseModel\n`;
|
|
482
|
-
files[`src/${moduleName}/routes.py`] =
|
|
483
|
-
`# ${moduleSlug} routes\nfrom fastapi import APIRouter\n\nrouter = APIRouter()\n`;
|
|
484
|
-
files[`src/${moduleName}/services.py`] = `# ${moduleSlug} services\n`;
|
|
485
|
-
return files;
|
|
486
|
-
}
|
|
487
|
-
function generatePackageJson(config) {
|
|
488
|
-
return `{
|
|
489
|
-
"name": "${config.projectName}",
|
|
490
|
-
"version": "0.1.0",
|
|
491
|
-
"description": "Generated by RapidKit",
|
|
492
|
-
"author": "",
|
|
493
|
-
"private": true,
|
|
494
|
-
"license": "MIT",
|
|
495
|
-
"scripts": {
|
|
496
|
-
"build": "nest build",
|
|
497
|
-
"format": "prettier --write \\"src/**/*.ts\\"",
|
|
498
|
-
"start": "nest start",
|
|
499
|
-
"start:dev": "nest start --watch",
|
|
500
|
-
"start:debug": "nest start --debug --watch",
|
|
501
|
-
"start:prod": "node dist/main",
|
|
502
|
-
"lint": "eslint \\"{src,apps,libs,test}/**/*.ts\\" --fix",
|
|
503
|
-
"test": "jest",
|
|
504
|
-
"test:watch": "jest --watch",
|
|
505
|
-
"test:cov": "jest --coverage",
|
|
506
|
-
"test:e2e": "jest --config ./test/jest-e2e.json"
|
|
507
|
-
},
|
|
508
|
-
"dependencies": {
|
|
509
|
-
"@nestjs/common": "^10.0.0",
|
|
510
|
-
"@nestjs/core": "^10.0.0",
|
|
511
|
-
"@nestjs/platform-express": "^10.0.0",
|
|
512
|
-
"reflect-metadata": "^0.2.0",
|
|
513
|
-
"rxjs": "^7.8.1"
|
|
514
|
-
},
|
|
515
|
-
"devDependencies": {
|
|
516
|
-
"@nestjs/cli": "^10.0.0",
|
|
517
|
-
"@nestjs/schematics": "^10.0.0",
|
|
518
|
-
"@nestjs/testing": "^10.0.0",
|
|
519
|
-
"@types/express": "^4.17.17",
|
|
520
|
-
"@types/jest": "^29.5.2",
|
|
521
|
-
"@types/node": "^20.3.1",
|
|
522
|
-
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
523
|
-
"@typescript-eslint/parser": "^6.0.0",
|
|
524
|
-
"eslint": "^8.42.0",
|
|
525
|
-
"jest": "^29.5.0",
|
|
526
|
-
"prettier": "^3.0.0",
|
|
527
|
-
"ts-jest": "^29.1.0",
|
|
528
|
-
"ts-loader": "^9.4.3",
|
|
529
|
-
"ts-node": "^10.9.1",
|
|
530
|
-
"tsconfig-paths": "^4.2.0",
|
|
531
|
-
"typescript": "^5.1.3"
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
`;
|
|
535
|
-
}
|
|
536
|
-
function generateTsConfig() {
|
|
537
|
-
return `{
|
|
538
|
-
"compilerOptions": {
|
|
539
|
-
"module": "commonjs",
|
|
540
|
-
"declaration": true,
|
|
541
|
-
"removeComments": true,
|
|
542
|
-
"emitDecoratorMetadata": true,
|
|
543
|
-
"experimentalDecorators": true,
|
|
544
|
-
"allowSyntheticDefaultImports": true,
|
|
545
|
-
"target": "ES2021",
|
|
546
|
-
"sourceMap": true,
|
|
547
|
-
"outDir": "./dist",
|
|
548
|
-
"baseUrl": "./",
|
|
549
|
-
"incremental": true,
|
|
550
|
-
"skipLibCheck": true,
|
|
551
|
-
"strictNullChecks": false,
|
|
552
|
-
"noImplicitAny": false,
|
|
553
|
-
"strictBindCallApply": false,
|
|
554
|
-
"forceConsistentCasingInFileNames": false,
|
|
555
|
-
"noFallthroughCasesInSwitch": false
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
`;
|
|
559
|
-
}
|
|
560
|
-
function generateNestCliJson() {
|
|
561
|
-
return `{
|
|
562
|
-
"$schema": "https://json.schemastore.org/nest-cli",
|
|
563
|
-
"collection": "@nestjs/schematics",
|
|
564
|
-
"sourceRoot": "src",
|
|
565
|
-
"compilerOptions": {
|
|
566
|
-
"deleteOutDir": true
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
`;
|
|
570
|
-
}
|
|
571
|
-
function generateMainTs(_config) {
|
|
572
|
-
return `import { NestFactory } from '@nestjs/core';
|
|
573
|
-
import { AppModule } from './app.module';
|
|
574
|
-
|
|
575
|
-
async function bootstrap() {
|
|
576
|
-
const app = await NestFactory.create(AppModule);
|
|
577
|
-
app.enableCors();
|
|
578
|
-
await app.listen(3000);
|
|
579
|
-
console.log(\`Application is running on: \${await app.getUrl()}\`);
|
|
580
|
-
}
|
|
581
|
-
bootstrap();
|
|
582
|
-
`;
|
|
583
|
-
}
|
|
584
|
-
function generateAppModule(_config) {
|
|
585
|
-
return `import { Module } from '@nestjs/common';
|
|
586
|
-
import { AppController } from './app.controller';
|
|
587
|
-
import { AppService } from './app.service';
|
|
588
|
-
|
|
589
|
-
@Module({
|
|
590
|
-
imports: [],
|
|
591
|
-
controllers: [AppController],
|
|
592
|
-
providers: [AppService],
|
|
593
|
-
})
|
|
594
|
-
export class AppModule {}
|
|
595
|
-
`;
|
|
596
|
-
}
|
|
597
|
-
function generateAppController() {
|
|
598
|
-
return `import { Controller, Get } from '@nestjs/common';
|
|
599
|
-
import { AppService } from './app.service';
|
|
600
|
-
|
|
601
|
-
@Controller()
|
|
602
|
-
export class AppController {
|
|
603
|
-
constructor(private readonly appService: AppService) {}
|
|
604
|
-
|
|
605
|
-
@Get()
|
|
606
|
-
getHello(): string {
|
|
607
|
-
return this.appService.getHello();
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
@Get('health')
|
|
611
|
-
healthCheck() {
|
|
612
|
-
return { status: 'healthy' };
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
`;
|
|
616
|
-
}
|
|
617
|
-
function generateAppService() {
|
|
618
|
-
return `import { Injectable } from '@nestjs/common';
|
|
619
|
-
|
|
620
|
-
@Injectable()
|
|
621
|
-
export class AppService {
|
|
622
|
-
getHello(): string {
|
|
623
|
-
return 'Welcome to your NestJS application!';
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
`;
|
|
627
|
-
}
|
|
628
|
-
function generateDockerfile(config) {
|
|
629
|
-
if (config.framework.startsWith('fastapi')) {
|
|
630
|
-
return `FROM python:${config.pythonVersion}-slim
|
|
631
|
-
|
|
632
|
-
WORKDIR /app
|
|
633
|
-
|
|
634
|
-
# Install dependencies
|
|
635
|
-
${config.packageManager === 'poetry'
|
|
636
|
-
? `RUN pip install poetry
|
|
637
|
-
COPY pyproject.toml poetry.lock* ./
|
|
638
|
-
RUN poetry config virtualenvs.create false && poetry install --no-dev --no-interaction --no-ansi`
|
|
639
|
-
: `COPY requirements.txt .
|
|
640
|
-
RUN pip install --no-cache-dir -r requirements.txt`}
|
|
641
|
-
|
|
642
|
-
# Copy application
|
|
643
|
-
COPY . .
|
|
644
|
-
|
|
645
|
-
EXPOSE 8000
|
|
646
|
-
|
|
647
|
-
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
648
|
-
`;
|
|
649
|
-
}
|
|
650
|
-
else {
|
|
651
|
-
return `FROM node:18-alpine
|
|
652
|
-
|
|
653
|
-
WORKDIR /app
|
|
654
|
-
|
|
655
|
-
COPY package*.json ./
|
|
656
|
-
RUN npm ci --only=production
|
|
657
|
-
|
|
658
|
-
COPY . .
|
|
659
|
-
RUN npm run build
|
|
660
|
-
|
|
661
|
-
EXPOSE 3000
|
|
662
|
-
|
|
663
|
-
CMD ["node", "dist/main"]
|
|
664
|
-
`;
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
function generateDockerCompose(config) {
|
|
668
|
-
const hasDatabase = config.selectedModules.includes('database') ||
|
|
669
|
-
config.selectedModules.includes('database-orm-pro');
|
|
670
|
-
const hasCache = config.selectedModules.includes('cache');
|
|
671
|
-
return `version: '3.8'
|
|
672
|
-
|
|
673
|
-
services:
|
|
674
|
-
app:
|
|
675
|
-
build: .
|
|
676
|
-
ports:
|
|
677
|
-
- "${config.framework.startsWith('fastapi') ? '8000:8000' : '3000:3000'}"
|
|
678
|
-
environment:
|
|
679
|
-
- APP_ENV=production
|
|
680
|
-
${hasDatabase ? ` - DATABASE_URL=postgresql://postgres:postgres@db:5432/${config.projectName}` : ''}
|
|
681
|
-
${hasCache ? ' - REDIS_URL=redis://redis:6379/0' : ''}
|
|
682
|
-
depends_on:
|
|
683
|
-
${hasDatabase ? ' - db' : ''}
|
|
684
|
-
${hasCache ? ' - redis' : ''}
|
|
685
|
-
volumes:
|
|
686
|
-
- .:/app
|
|
687
|
-
${hasDatabase
|
|
688
|
-
? `
|
|
689
|
-
db:
|
|
690
|
-
image: postgres:15-alpine
|
|
691
|
-
environment:
|
|
692
|
-
- POSTGRES_USER=postgres
|
|
693
|
-
- POSTGRES_PASSWORD=postgres
|
|
694
|
-
- POSTGRES_DB=${config.projectName}
|
|
695
|
-
ports:
|
|
696
|
-
- "5432:5432"
|
|
697
|
-
volumes:
|
|
698
|
-
- postgres_data:/var/lib/postgresql/data`
|
|
699
|
-
: ''}
|
|
700
|
-
${hasCache
|
|
701
|
-
? `
|
|
702
|
-
redis:
|
|
703
|
-
image: redis:7-alpine
|
|
704
|
-
ports:
|
|
705
|
-
- "6379:6379"`
|
|
706
|
-
: ''}
|
|
707
|
-
|
|
708
|
-
${hasDatabase || hasCache
|
|
709
|
-
? `volumes:${hasDatabase ? '\n postgres_data:' : ''}${hasCache ? '\n redis_data:' : ''}`
|
|
710
|
-
: ''}
|
|
711
|
-
`;
|
|
712
|
-
}
|
|
713
|
-
function generateDockerignore() {
|
|
714
|
-
return `__pycache__
|
|
715
|
-
*.pyc
|
|
716
|
-
*.pyo
|
|
717
|
-
*.pyd
|
|
718
|
-
.Python
|
|
719
|
-
env
|
|
720
|
-
venv
|
|
721
|
-
.venv
|
|
722
|
-
node_modules
|
|
723
|
-
.git
|
|
724
|
-
.gitignore
|
|
725
|
-
.dockerignore
|
|
726
|
-
.env
|
|
727
|
-
.env.local
|
|
728
|
-
*.log
|
|
729
|
-
.pytest_cache
|
|
730
|
-
.coverage
|
|
731
|
-
htmlcov
|
|
732
|
-
dist
|
|
733
|
-
build
|
|
734
|
-
*.egg-info
|
|
735
|
-
`;
|
|
736
|
-
}
|
|
737
|
-
function generateConftestPy(_config) {
|
|
738
|
-
return `import pytest
|
|
739
|
-
from fastapi.testclient import TestClient
|
|
740
|
-
from src.main import app
|
|
741
|
-
|
|
742
|
-
@pytest.fixture
|
|
743
|
-
def client():
|
|
744
|
-
with TestClient(app) as c:
|
|
745
|
-
yield c
|
|
746
|
-
`;
|
|
747
|
-
}
|
|
748
|
-
function generateTestMainPy(_config) {
|
|
749
|
-
return `def test_root(client):
|
|
750
|
-
response = client.get("/")
|
|
751
|
-
assert response.status_code == 200
|
|
752
|
-
assert "message" in response.json()
|
|
753
|
-
|
|
754
|
-
def test_health_check(client):
|
|
755
|
-
response = client.get("/health")
|
|
756
|
-
assert response.status_code == 200
|
|
757
|
-
assert response.json() == {"status": "healthy"}
|
|
758
|
-
`;
|
|
759
|
-
}
|
|
760
|
-
function generatePytestIni() {
|
|
761
|
-
return `[pytest]
|
|
762
|
-
testpaths = tests
|
|
763
|
-
python_files = test_*.py
|
|
764
|
-
python_classes = Test*
|
|
765
|
-
python_functions = test_*
|
|
766
|
-
addopts = -v --tb=short
|
|
767
|
-
`;
|
|
768
|
-
}
|
|
769
|
-
function generateE2ETest() {
|
|
770
|
-
return `import { Test, TestingModule } from '@nestjs/testing';
|
|
771
|
-
import { INestApplication } from '@nestjs/common';
|
|
772
|
-
import * as request from 'supertest';
|
|
773
|
-
import { AppModule } from './../src/app.module';
|
|
774
|
-
|
|
775
|
-
describe('AppController (e2e)', () => {
|
|
776
|
-
let app: INestApplication;
|
|
777
|
-
|
|
778
|
-
beforeEach(async () => {
|
|
779
|
-
const moduleFixture: TestingModule = await Test.createTestingModule({
|
|
780
|
-
imports: [AppModule],
|
|
781
|
-
}).compile();
|
|
782
|
-
|
|
783
|
-
app = moduleFixture.createNestApplication();
|
|
784
|
-
await app.init();
|
|
785
|
-
});
|
|
786
|
-
|
|
787
|
-
it('/ (GET)', () => {
|
|
788
|
-
return request(app.getHttpServer())
|
|
789
|
-
.get('/')
|
|
790
|
-
.expect(200)
|
|
791
|
-
.expect('Welcome to your NestJS application!');
|
|
792
|
-
});
|
|
793
|
-
});
|
|
794
|
-
`;
|
|
795
|
-
}
|
|
796
|
-
function generateJestE2EConfig() {
|
|
797
|
-
return `{
|
|
798
|
-
"moduleFileExtensions": ["js", "json", "ts"],
|
|
799
|
-
"rootDir": ".",
|
|
800
|
-
"testEnvironment": "node",
|
|
801
|
-
"testRegex": ".e2e-spec.ts$",
|
|
802
|
-
"transform": {
|
|
803
|
-
"^.+\\\\.(t|j)s$": "ts-jest"
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
`;
|
|
807
|
-
}
|
|
808
|
-
function generateGitHubActions(config) {
|
|
809
|
-
if (config.framework.startsWith('fastapi')) {
|
|
810
|
-
return `name: CI
|
|
811
|
-
|
|
812
|
-
on:
|
|
813
|
-
push:
|
|
814
|
-
branches: [ main, develop ]
|
|
815
|
-
pull_request:
|
|
816
|
-
branches: [ main, develop ]
|
|
817
|
-
|
|
818
|
-
jobs:
|
|
819
|
-
test:
|
|
820
|
-
runs-on: ubuntu-latest
|
|
821
|
-
|
|
822
|
-
steps:
|
|
823
|
-
- uses: actions/checkout@v3
|
|
824
|
-
|
|
825
|
-
- name: Set up Python ${config.pythonVersion}
|
|
826
|
-
uses: actions/setup-python@v4
|
|
827
|
-
with:
|
|
828
|
-
python-version: ${config.pythonVersion}
|
|
829
|
-
|
|
830
|
-
- name: Install dependencies
|
|
831
|
-
run: |
|
|
832
|
-
${config.packageManager === 'poetry'
|
|
833
|
-
? 'pip install poetry\npoetry install'
|
|
834
|
-
: 'pip install -r requirements.txt'}
|
|
835
|
-
|
|
836
|
-
- name: Run tests
|
|
837
|
-
run: |
|
|
838
|
-
${config.packageManager === 'poetry' ? 'poetry run pytest' : 'pytest'}
|
|
839
|
-
|
|
840
|
-
- name: Lint with flake8
|
|
841
|
-
run: |
|
|
842
|
-
${config.packageManager === 'poetry' ? 'poetry run flake8 src' : 'flake8 src'}
|
|
843
|
-
`;
|
|
844
|
-
}
|
|
845
|
-
else {
|
|
846
|
-
return `name: CI
|
|
847
|
-
|
|
848
|
-
on:
|
|
849
|
-
push:
|
|
850
|
-
branches: [ main, develop ]
|
|
851
|
-
pull_request:
|
|
852
|
-
branches: [ main, develop ]
|
|
853
|
-
|
|
854
|
-
jobs:
|
|
855
|
-
test:
|
|
856
|
-
runs-on: ubuntu-latest
|
|
857
|
-
|
|
858
|
-
steps:
|
|
859
|
-
- uses: actions/checkout@v3
|
|
860
|
-
|
|
861
|
-
- name: Set up Node.js
|
|
862
|
-
uses: actions/setup-node@v3
|
|
863
|
-
with:
|
|
864
|
-
node-version: '18'
|
|
865
|
-
|
|
866
|
-
- name: Install dependencies
|
|
867
|
-
run: npm ci
|
|
868
|
-
|
|
869
|
-
- name: Run tests
|
|
870
|
-
run: npm test
|
|
871
|
-
|
|
872
|
-
- name: Build
|
|
873
|
-
run: npm run build
|
|
874
|
-
`;
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
//# sourceMappingURL=generator.js.map
|
package/dist/generator.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,oBAAoB,CAAC,MAAqB;IACxD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAGzD,KAAK,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAG5C,KAAK,CAAC,YAAY,CAAC,GAAG,iBAAiB,EAAE,CAAC;IAG1C,KAAK,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEnD,IAAI,SAAS,EAAE,CAAC;QAEd,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,gBAAgB,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,kBAAkB,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC5D,KAAK,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QAGD,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,CAAC,eAAe,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAGlD,KAAK,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC;QACnC,KAAK,CAAC,sBAAsB,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3D,KAAK,CAAC,0BAA0B,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAGnE,KAAK,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;QAClC,KAAK,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAGtD,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC5C,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;gBACtD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QAEN,KAAK,CAAC,cAAc,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,CAAC,eAAe,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC5C,KAAK,CAAC,eAAe,CAAC,GAAG,mBAAmB,EAAE,CAAC;QAC/C,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,CAAC,mBAAmB,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvD,KAAK,CAAC,uBAAuB,CAAC,GAAG,qBAAqB,EAAE,CAAC;QACzD,KAAK,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,EAAE,CAAC;IACrD,CAAC;IAGD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,CAAC,YAAY,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC5D,KAAK,CAAC,eAAe,CAAC,GAAG,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAGD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,CAAC,mBAAmB,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACxD,KAAK,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACzD,KAAK,CAAC,YAAY,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,sBAAsB,CAAC,GAAG,eAAe,EAAE,CAAC;YAClD,KAAK,CAAC,oBAAoB,CAAC,GAAG,qBAAqB,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAGD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,0BAA0B,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAS,cAAc,CAAC,MAAqB;IAC3C,OAAO,KAAK,MAAM,CAAC,WAAW;;;;;;qBAMX,MAAM,CAAC,SAAS;;;;EAInC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAKtD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,YAAY,MAAM,CAAC,aAAa;IAClC,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;QACvD,CAAC,CAAC,8BACN;;;;;EAME,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ;YAClC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,iCAAiC;QACrC,CAAC,CAAC,aACN;;;;;;;;;;;;;;;;EAiBE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ;YAClC,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,+BAA+B;QACnC,CAAC,CAAC,mBACN;;;EAIE,MAAM,CAAC,aAAa;QAClB,CAAC,CAAC;;;;;CAKL;QACG,CAAC,CAAC,EACN;;;;;;;;;;;EAYE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ;YAClC,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,QAAQ;QACZ,CAAC,CAAC,cACN;;;;;;EAME,MAAM,CAAC,WAAW;;eAEL,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;;;EAGjE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;EAE7D,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;CAUrH,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DR,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,OAAO;YACG,MAAM,CAAC,WAAW;;;EAG5B,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW;;YAG9E,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjD,CAAC,CAAC;yDACiD,MAAM,CAAC,WAAW;;uCAEpC;QACjC,CAAC,CAAC;2DACmD,MAAM,CAAC,WAAW,EAC3E;;kBAGE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC;;;oBAGY;QACd,CAAC,CAAC;kCAEN;;SAGE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC;mCAC2B;QAC7B,CAAC,CAAC;qCAEN;;SAGE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,CAAC,CAAC;;;;;qBAKa,MAAM,CAAC,WAAW,MAAM;QACvC,CAAC,CAAC;;gBAGN;;UAGE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxC,CAAC,CAAC;;;;gCAIwB;QAC1B,CAAC,CAAC;;wCAGN;CACD,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAqB;IAClD,MAAM,YAAY,GAAG;QACnB,sBAAsB;QACtB,0DAA0D;QAC1D,qBAAqB;QACrB,8BAA8B;KAC/B,CAAC;IAEF,IACE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACnD,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,YAAY,CAAC,IAAI,CACf,iEAAiE,EACjE,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;UACC,MAAM,CAAC,WAAW;;;;;;;aAOf,MAAM,CAAC,aAAa;EAC/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;uBAgBF,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;;;oBAGxC,MAAM,CAAC,aAAa;;;;CAIvC,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAqB;IACpD,MAAM,IAAI,GAAG;QACX,kBAAkB;QAClB,2BAA2B;QAC3B,iBAAiB;QACjB,0BAA0B;KAC3B,CAAC;IAEF,IACE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACnD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,kCAAkC,EAAE,wBAAwB,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,MAAqB;IAC5C,OAAO;;;YAGG,MAAM,CAAC,WAAW;;;;yBAIL,MAAM,CAAC,aAAa;;CAE5C,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,MAAqB;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCA4BwB,MAAM,CAAC,WAAW;;;;;;;;;;;;CAYlD,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,OAAO;;;uBAGc,MAAM,CAAC,WAAW;;;;;;MAOnC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjD,CAAC,CAAC,+CAA+C;QACjD,CAAC,CAAC,0BACN;;MAGE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,CAAC,CAAC;;+BAEqB;QACvB,CAAC,CAAC,wBACN;;;;;;;CAOH,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,IACE,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5C,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACpD,CAAC;QACD,OAAO,2EAA2E,CAAC;IACrF,CAAC;IAED,OAAO;;;;;;;;;;;;;;;;;;;;CAoBR,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAqB;IACnD,OAAO;;EAGP,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChG,CAAC,CAAC,0EAA0E;QAC5E,CAAC,CAAC,EACN;;;CAGC,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,OAAO;;;;;;;;;EASP,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,4BAA4B,CAAC,wCAAwC,CAAC,qBAAqB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC7K,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB,EAAE,OAAsB;IACrE,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEjD,KAAK,CAAC,OAAO,UAAU,cAAc,CAAC,GAAG,EAAE,CAAC;IAC5C,KAAK,CAAC,OAAO,UAAU,YAAY,CAAC,GAAG,KAAK,UAAU,WAAW,CAAC;IAClE,KAAK,CAAC,OAAO,UAAU,aAAa,CAAC;QACnC,KAAK,UAAU,4CAA4C,CAAC;IAC9D,KAAK,CAAC,OAAO,UAAU,YAAY,CAAC;QAClC,KAAK,UAAU,kEAAkE,CAAC;IACpF,KAAK,CAAC,OAAO,UAAU,cAAc,CAAC,GAAG,KAAK,UAAU,aAAa,CAAC;IAEtE,OAAO,KAAK,CAAC;AACf,CAAC;AAGD,SAAS,mBAAmB,CAAC,MAAqB;IAChD,OAAO;aACI,MAAM,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6C9B,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBR,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;;;;;;;;CAQR,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,OAAsB;IAC5C,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAsB;IAC/C,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;;;;;;;;;;;;;;;;;CAiBR,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;;CAQR,CAAC;AACF,CAAC;AAGD,SAAS,kBAAkB,CAAC,MAAqB;IAC/C,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO,eAAe,MAAM,CAAC,aAAa;;;;;EAM5C,MAAM,CAAC,cAAc,KAAK,QAAQ;YAChC,CAAC,CAAC;;iGAE2F;YAC7F,CAAC,CAAC;mDAEN;;;;;;;;CAQC,CAAC;IACA,CAAC;SAAM,CAAC;QACN,OAAO;;;;;;;;;;;;;CAaV,CAAC;IACA,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAqB;IAClD,MAAM,WAAW,GACf,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE1D,OAAO;;;;;;WAME,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;;;EAG3E,WAAW,CAAC,CAAC,CAAC,+DAA+D,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;EACtG,QAAQ,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,EAAE;;EAExD,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;EAC/B,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;;;EAI/B,WAAW;QACT,CAAC,CAAC;;;;;;sBAMgB,MAAM,CAAC,WAAW;;;;+CAIO;QAC3C,CAAC,CAAC,EACN;EAEE,QAAQ;QACN,CAAC,CAAC;;;;oBAIc;QAChB,CAAC,CAAC,EACN;;EAGE,WAAW,IAAI,QAAQ;QACrB,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1F,CAAC,CAAC,EACN;CACC,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBR,CAAC;AACF,CAAC;AAGD,SAAS,kBAAkB,CAAC,OAAsB;IAChD,OAAO;;;;;;;;CAQR,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAsB;IAChD,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;CAMR,CAAC;AACF,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;CAwBR,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC;AAGD,SAAS,qBAAqB,CAAC,MAAqB;IAClD,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO;;;;;;;;;;;;;;;4BAeiB,MAAM,CAAC,aAAa;;;0BAGtB,MAAM,CAAC,aAAa;;;;UAKpC,MAAM,CAAC,cAAc,KAAK,QAAQ;YAChC,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,iCACN;;;;UAIE,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ;;;;UAInE,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY;CACpF,CAAC;IACA,CAAC;SAAM,CAAC;QACN,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BV,CAAC;IACA,CAAC;AACH,CAAC"}
|