rapidkit 1.0.0-beta.4 ā 1.0.0-beta.6
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 +53 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -0
- package/dist/create.d.ts +3 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +108 -48
- package/dist/create.js.map +1 -1
- package/dist/demo-kit.d.ts.map +1 -1
- package/dist/demo-kit.js.map +1 -1
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +50 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.js +115 -5
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +29 -0
- package/dist/logger.js.map +1 -0
- package/dist/update-checker.d.ts +3 -0
- package/dist/update-checker.d.ts.map +1 -0
- package/dist/update-checker.js +28 -0
- package/dist/update-checker.js.map +1 -0
- package/dist/utils/cache.d.ts +14 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +96 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/performance.d.ts +21 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/performance.js +81 -0
- package/dist/utils/performance.js.map +1 -0
- package/dist/validation.d.ts +4 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +46 -0
- package/dist/validation.js.map +1 -0
- package/package.json +27 -4
- package/templates/kits/fastapi-standard/kit.json +70 -0
package/dist/index.js
CHANGED
|
@@ -5,22 +5,69 @@ import { createProject } from './create.js';
|
|
|
5
5
|
import { generateDemoKit } from './demo-kit.js';
|
|
6
6
|
import inquirer from 'inquirer';
|
|
7
7
|
import path from 'path';
|
|
8
|
+
import { logger } from './logger.js';
|
|
9
|
+
import { checkForUpdates, getVersion } from './update-checker.js';
|
|
10
|
+
import { loadUserConfig } from './config.js';
|
|
11
|
+
import { validateProjectName } from './validation.js';
|
|
12
|
+
import { RapidKitError } from './errors.js';
|
|
13
|
+
import * as fsExtra from 'fs-extra';
|
|
14
|
+
let currentProjectPath = null;
|
|
15
|
+
let cleanupInProgress = false;
|
|
8
16
|
const program = new Command();
|
|
9
17
|
program
|
|
10
18
|
.name('create-rapidkit')
|
|
11
19
|
.description('Create a RapidKit development environment or workspace')
|
|
12
|
-
.version(
|
|
20
|
+
.version(getVersion())
|
|
13
21
|
.argument('[directory-name]', 'Name of the workspace or project directory')
|
|
14
22
|
.option('--skip-git', 'Skip git initialization')
|
|
15
|
-
.option('--test-mode', 'Install RapidKit from local path (for testing only)')
|
|
23
|
+
.option('--test-mode', 'Install RapidKit from local path (for development/testing only)')
|
|
16
24
|
.option('--demo', 'Create workspace with demo kit templates (no Python installation required)')
|
|
17
25
|
.option('--demo-only', 'Generate a demo project in current directory (used by demo workspace)')
|
|
26
|
+
.option('--debug', 'Enable debug logging')
|
|
27
|
+
.option('--dry-run', 'Show what would be created without creating it')
|
|
28
|
+
.option('--no-update-check', 'Skip checking for updates')
|
|
18
29
|
.action(async (directoryName, options) => {
|
|
19
30
|
try {
|
|
31
|
+
if (options.debug) {
|
|
32
|
+
logger.setDebug(true);
|
|
33
|
+
logger.debug('Debug mode enabled');
|
|
34
|
+
}
|
|
35
|
+
const userConfig = await loadUserConfig();
|
|
36
|
+
logger.debug('User config loaded', userConfig);
|
|
37
|
+
if (options.updateCheck !== false) {
|
|
38
|
+
await checkForUpdates();
|
|
39
|
+
}
|
|
20
40
|
console.log(chalk.blue.bold('\nš Welcome to create-rapidkit!\n'));
|
|
21
41
|
if (options.demoOnly) {
|
|
22
42
|
const projectName = directoryName || 'my-fastapi-project';
|
|
43
|
+
try {
|
|
44
|
+
validateProjectName(projectName);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (error instanceof RapidKitError) {
|
|
48
|
+
logger.error(`\nā ${error.message}`);
|
|
49
|
+
if (error.details) {
|
|
50
|
+
logger.warn(`š” ${error.details}\n`);
|
|
51
|
+
}
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
23
56
|
const projectPath = path.resolve(process.cwd(), projectName);
|
|
57
|
+
currentProjectPath = projectPath;
|
|
58
|
+
if (options.dryRun) {
|
|
59
|
+
console.log(chalk.cyan('\nš Dry-run mode - showing what would be created:\n'));
|
|
60
|
+
console.log(chalk.white('š Project path:'), projectPath);
|
|
61
|
+
console.log(chalk.white('š¦ Project type:'), 'FastAPI demo project');
|
|
62
|
+
console.log(chalk.white('š Files to create:'));
|
|
63
|
+
console.log(chalk.gray(' - src/main.py'));
|
|
64
|
+
console.log(chalk.gray(' - src/cli.py'));
|
|
65
|
+
console.log(chalk.gray(' - src/routing/'));
|
|
66
|
+
console.log(chalk.gray(' - tests/'));
|
|
67
|
+
console.log(chalk.gray(' - pyproject.toml'));
|
|
68
|
+
console.log(chalk.gray(' - README.md\n'));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
24
71
|
const answers = await inquirer.prompt([
|
|
25
72
|
{
|
|
26
73
|
type: 'input',
|
|
@@ -51,12 +98,28 @@ program
|
|
|
51
98
|
return;
|
|
52
99
|
}
|
|
53
100
|
const workspaceName = directoryName || 'rapidkit-workspace';
|
|
101
|
+
try {
|
|
102
|
+
validateProjectName(workspaceName);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof RapidKitError) {
|
|
106
|
+
logger.error(`\nā ${error.message}`);
|
|
107
|
+
if (error.details) {
|
|
108
|
+
logger.warn(`š” ${error.details}\n`);
|
|
109
|
+
}
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
currentProjectPath = path.resolve(process.cwd(), workspaceName);
|
|
54
115
|
if (options.demo) {
|
|
55
116
|
console.log(chalk.gray('This will create a workspace with demo kit templates.\nYou can generate demo projects inside without installing Python RapidKit.\n'));
|
|
56
117
|
await createProject(workspaceName, {
|
|
57
|
-
skipGit: options.skipGit,
|
|
118
|
+
skipGit: options.skipGit || userConfig.skipGit,
|
|
58
119
|
testMode: false,
|
|
59
120
|
demoMode: true,
|
|
121
|
+
dryRun: options.dryRun,
|
|
122
|
+
userConfig,
|
|
60
123
|
});
|
|
61
124
|
return;
|
|
62
125
|
}
|
|
@@ -74,15 +137,62 @@ program
|
|
|
74
137
|
}
|
|
75
138
|
console.log(chalk.yellow('ā ļø Running in TEST MODE - Installing from local path\n'));
|
|
76
139
|
await createProject(workspaceName, {
|
|
77
|
-
skipGit: options.skipGit,
|
|
140
|
+
skipGit: options.skipGit || userConfig.skipGit,
|
|
78
141
|
testMode: options.testMode,
|
|
79
142
|
demoMode: false,
|
|
143
|
+
dryRun: options.dryRun,
|
|
144
|
+
userConfig,
|
|
80
145
|
});
|
|
81
146
|
}
|
|
82
147
|
catch (error) {
|
|
83
|
-
|
|
148
|
+
if (error instanceof RapidKitError) {
|
|
149
|
+
logger.error(`\nā ${error.message}`);
|
|
150
|
+
if (error.details) {
|
|
151
|
+
logger.warn(`š” ${error.details}`);
|
|
152
|
+
}
|
|
153
|
+
logger.debug('Error code:', error.code);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
logger.error('\nā An unexpected error occurred:');
|
|
157
|
+
console.error(error);
|
|
158
|
+
}
|
|
84
159
|
process.exit(1);
|
|
85
160
|
}
|
|
161
|
+
finally {
|
|
162
|
+
currentProjectPath = null;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
process.on('SIGINT', async () => {
|
|
166
|
+
if (cleanupInProgress)
|
|
167
|
+
return;
|
|
168
|
+
cleanupInProgress = true;
|
|
169
|
+
console.log(chalk.yellow('\n\nā ļø Interrupted by user'));
|
|
170
|
+
if (currentProjectPath && (await fsExtra.pathExists(currentProjectPath))) {
|
|
171
|
+
console.log(chalk.gray('Cleaning up partial installation...'));
|
|
172
|
+
try {
|
|
173
|
+
await fsExtra.remove(currentProjectPath);
|
|
174
|
+
console.log(chalk.green('ā Cleanup complete'));
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
logger.debug('Cleanup failed:', error);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
process.exit(130);
|
|
181
|
+
});
|
|
182
|
+
process.on('SIGTERM', async () => {
|
|
183
|
+
if (cleanupInProgress)
|
|
184
|
+
return;
|
|
185
|
+
cleanupInProgress = true;
|
|
186
|
+
logger.debug('Received SIGTERM');
|
|
187
|
+
if (currentProjectPath && (await fsExtra.pathExists(currentProjectPath))) {
|
|
188
|
+
try {
|
|
189
|
+
await fsExtra.remove(currentProjectPath);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
logger.debug('Cleanup failed:', error);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
process.exit(143);
|
|
86
196
|
});
|
|
87
197
|
program.parse();
|
|
88
198
|
//# sourceMappingURL=index.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
declare class Logger {
|
|
2
|
+
private debugEnabled;
|
|
3
|
+
setDebug(enabled: boolean): void;
|
|
4
|
+
debug(message: string, ...args: unknown[]): void;
|
|
5
|
+
info(message: string, ...args: unknown[]): void;
|
|
6
|
+
success(message: string, ...args: unknown[]): void;
|
|
7
|
+
warn(message: string, ...args: unknown[]): void;
|
|
8
|
+
error(message: string, ...args: unknown[]): void;
|
|
9
|
+
step(stepNum: number, total: number, message: string): void;
|
|
10
|
+
}
|
|
11
|
+
export declare const logger: Logger;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAKA,cAAM,MAAM;IACV,OAAO,CAAC,YAAY,CAAS;IAE7B,QAAQ,CAAC,OAAO,EAAE,OAAO;IAIzB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAMzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAIxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAIxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAIzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGrD;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
class Logger {
|
|
3
|
+
debugEnabled = false;
|
|
4
|
+
setDebug(enabled) {
|
|
5
|
+
this.debugEnabled = enabled;
|
|
6
|
+
}
|
|
7
|
+
debug(message, ...args) {
|
|
8
|
+
if (this.debugEnabled) {
|
|
9
|
+
console.log(chalk.gray(`[DEBUG] ${message}`), ...args);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
info(message, ...args) {
|
|
13
|
+
console.log(chalk.blue(message), ...args);
|
|
14
|
+
}
|
|
15
|
+
success(message, ...args) {
|
|
16
|
+
console.log(chalk.green(message), ...args);
|
|
17
|
+
}
|
|
18
|
+
warn(message, ...args) {
|
|
19
|
+
console.log(chalk.yellow(message), ...args);
|
|
20
|
+
}
|
|
21
|
+
error(message, ...args) {
|
|
22
|
+
console.error(chalk.red(message), ...args);
|
|
23
|
+
}
|
|
24
|
+
step(stepNum, total, message) {
|
|
25
|
+
console.log(chalk.cyan(`\n[${stepNum}/${total}]`), chalk.white(message));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export const logger = new Logger();
|
|
29
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,MAAM;IACF,YAAY,GAAG,KAAK,CAAC;IAE7B,QAAQ,CAAC,OAAgB;QACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,KAAa,EAAE,OAAe;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAUA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBrD;AAKD,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
const PACKAGE_NAME = 'rapidkit';
|
|
5
|
+
const CURRENT_VERSION = '1.0.0-beta.6';
|
|
6
|
+
export async function checkForUpdates() {
|
|
7
|
+
try {
|
|
8
|
+
logger.debug('Checking for updates...');
|
|
9
|
+
const { stdout } = await execa('npm', ['view', PACKAGE_NAME, 'version'], {
|
|
10
|
+
timeout: 3000,
|
|
11
|
+
});
|
|
12
|
+
const latestVersion = stdout.trim();
|
|
13
|
+
if (latestVersion && latestVersion !== CURRENT_VERSION) {
|
|
14
|
+
console.log(chalk.yellow(`\nā ļø Update available: ${CURRENT_VERSION} ā ${latestVersion}`));
|
|
15
|
+
console.log(chalk.cyan('Run: npm install -g rapidkit@latest\n'));
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
logger.debug('You are using the latest version');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch (_error) {
|
|
22
|
+
logger.debug('Could not check for updates');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function getVersion() {
|
|
26
|
+
return CURRENT_VERSION;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,eAAe,GAAG,cAAc,CAAC;AAKvC,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAExC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE;YACvE,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpC,IAAI,aAAa,IAAI,aAAa,KAAK,eAAe,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,eAAe,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAEhB,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,UAAU;IACxB,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class Cache {
|
|
2
|
+
private static instance;
|
|
3
|
+
private memoryCache;
|
|
4
|
+
private constructor();
|
|
5
|
+
static getInstance(): Cache;
|
|
6
|
+
private getCacheKey;
|
|
7
|
+
private getCachePath;
|
|
8
|
+
get<T>(key: string, version?: string): Promise<T | null>;
|
|
9
|
+
set<T>(key: string, data: T, version?: string): Promise<void>;
|
|
10
|
+
invalidate(key: string): Promise<void>;
|
|
11
|
+
clear(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function getCachedOrFetch<T>(key: string, fetcher: () => Promise<T>, version?: string): Promise<T>;
|
|
14
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAgBA,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAA0C;IAE7D,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,KAAK;IAO3B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAId,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAgC/D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B;AAKD,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { createHash } from 'crypto';
|
|
5
|
+
import { logger } from '../logger.js';
|
|
6
|
+
const CACHE_DIR = path.join(os.homedir(), '.rapidkit', 'cache');
|
|
7
|
+
const CACHE_TTL = 24 * 60 * 60 * 1000;
|
|
8
|
+
export class Cache {
|
|
9
|
+
static instance;
|
|
10
|
+
memoryCache = new Map();
|
|
11
|
+
constructor() { }
|
|
12
|
+
static getInstance() {
|
|
13
|
+
if (!Cache.instance) {
|
|
14
|
+
Cache.instance = new Cache();
|
|
15
|
+
}
|
|
16
|
+
return Cache.instance;
|
|
17
|
+
}
|
|
18
|
+
getCacheKey(key) {
|
|
19
|
+
return createHash('md5').update(key).digest('hex');
|
|
20
|
+
}
|
|
21
|
+
getCachePath(key) {
|
|
22
|
+
return path.join(CACHE_DIR, `${this.getCacheKey(key)}.json`);
|
|
23
|
+
}
|
|
24
|
+
async get(key, version = '1.0') {
|
|
25
|
+
const memEntry = this.memoryCache.get(key);
|
|
26
|
+
if (memEntry && memEntry.version === version) {
|
|
27
|
+
if (Date.now() - memEntry.timestamp < CACHE_TTL) {
|
|
28
|
+
logger.debug(`Cache hit (memory): ${key}`);
|
|
29
|
+
return memEntry.data;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const cachePath = this.getCachePath(key);
|
|
34
|
+
const content = await fs.readFile(cachePath, 'utf-8');
|
|
35
|
+
const entry = JSON.parse(content);
|
|
36
|
+
if (entry.version === version && Date.now() - entry.timestamp < CACHE_TTL) {
|
|
37
|
+
logger.debug(`Cache hit (disk): ${key}`);
|
|
38
|
+
this.memoryCache.set(key, entry);
|
|
39
|
+
return entry.data;
|
|
40
|
+
}
|
|
41
|
+
await fs.unlink(cachePath).catch(() => { });
|
|
42
|
+
}
|
|
43
|
+
catch (_error) {
|
|
44
|
+
logger.debug(`Cache miss: ${key}`);
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
async set(key, data, version = '1.0') {
|
|
49
|
+
const entry = {
|
|
50
|
+
data,
|
|
51
|
+
timestamp: Date.now(),
|
|
52
|
+
version,
|
|
53
|
+
};
|
|
54
|
+
this.memoryCache.set(key, entry);
|
|
55
|
+
try {
|
|
56
|
+
await fs.mkdir(CACHE_DIR, { recursive: true });
|
|
57
|
+
const cachePath = this.getCachePath(key);
|
|
58
|
+
await fs.writeFile(cachePath, JSON.stringify(entry), 'utf-8');
|
|
59
|
+
logger.debug(`Cache set: ${key}`);
|
|
60
|
+
}
|
|
61
|
+
catch (_error) {
|
|
62
|
+
logger.debug(`Cache write failed: ${key}`, _error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async invalidate(key) {
|
|
66
|
+
this.memoryCache.delete(key);
|
|
67
|
+
try {
|
|
68
|
+
const cachePath = this.getCachePath(key);
|
|
69
|
+
await fs.unlink(cachePath);
|
|
70
|
+
logger.debug(`Cache invalidated: ${key}`);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async clear() {
|
|
76
|
+
this.memoryCache.clear();
|
|
77
|
+
try {
|
|
78
|
+
const files = await fs.readdir(CACHE_DIR);
|
|
79
|
+
await Promise.all(files.map((file) => fs.unlink(path.join(CACHE_DIR, file))));
|
|
80
|
+
logger.debug('Cache cleared');
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function getCachedOrFetch(key, fetcher, version = '1.0') {
|
|
87
|
+
const cache = Cache.getInstance();
|
|
88
|
+
const cached = await cache.get(key, version);
|
|
89
|
+
if (cached !== null) {
|
|
90
|
+
return cached;
|
|
91
|
+
}
|
|
92
|
+
const data = await fetcher();
|
|
93
|
+
await cache.set(key, data, version);
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface PerformanceMetric {
|
|
2
|
+
name: string;
|
|
3
|
+
duration: number;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
export declare class PerformanceMonitor {
|
|
7
|
+
private static instance;
|
|
8
|
+
private metrics;
|
|
9
|
+
private timers;
|
|
10
|
+
private constructor();
|
|
11
|
+
static getInstance(): PerformanceMonitor;
|
|
12
|
+
start(name: string): void;
|
|
13
|
+
end(name: string): number;
|
|
14
|
+
getMetrics(): PerformanceMetric[];
|
|
15
|
+
clear(): void;
|
|
16
|
+
summary(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function measurePerformance(target: object, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor;
|
|
19
|
+
export declare function measure<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAoBzB,UAAU,IAAI,iBAAiB,EAAE;IAIjC,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;CAkBhB;AAKD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,sBAiB/B;AAKD,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ/E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { performance } from 'perf_hooks';
|
|
2
|
+
import { logger } from '../logger.js';
|
|
3
|
+
export class PerformanceMonitor {
|
|
4
|
+
static instance;
|
|
5
|
+
metrics = [];
|
|
6
|
+
timers = new Map();
|
|
7
|
+
constructor() { }
|
|
8
|
+
static getInstance() {
|
|
9
|
+
if (!PerformanceMonitor.instance) {
|
|
10
|
+
PerformanceMonitor.instance = new PerformanceMonitor();
|
|
11
|
+
}
|
|
12
|
+
return PerformanceMonitor.instance;
|
|
13
|
+
}
|
|
14
|
+
start(name) {
|
|
15
|
+
this.timers.set(name, performance.now());
|
|
16
|
+
logger.debug(`Performance timer started: ${name}`);
|
|
17
|
+
}
|
|
18
|
+
end(name) {
|
|
19
|
+
const startTime = this.timers.get(name);
|
|
20
|
+
if (!startTime) {
|
|
21
|
+
logger.warn(`Performance timer not found: ${name}`);
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
const duration = performance.now() - startTime;
|
|
25
|
+
this.timers.delete(name);
|
|
26
|
+
this.metrics.push({
|
|
27
|
+
name,
|
|
28
|
+
duration,
|
|
29
|
+
timestamp: Date.now(),
|
|
30
|
+
});
|
|
31
|
+
logger.debug(`Performance timer ended: ${name} (${duration.toFixed(2)}ms)`);
|
|
32
|
+
return duration;
|
|
33
|
+
}
|
|
34
|
+
getMetrics() {
|
|
35
|
+
return [...this.metrics];
|
|
36
|
+
}
|
|
37
|
+
clear() {
|
|
38
|
+
this.metrics = [];
|
|
39
|
+
this.timers.clear();
|
|
40
|
+
}
|
|
41
|
+
summary() {
|
|
42
|
+
if (this.metrics.length === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
console.log('\nš Performance Summary:');
|
|
46
|
+
const sorted = [...this.metrics].sort((a, b) => b.duration - a.duration);
|
|
47
|
+
sorted.forEach((metric, index) => {
|
|
48
|
+
if (index < 10) {
|
|
49
|
+
console.log(` ${metric.name}: ${metric.duration.toFixed(2)}ms`);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const total = this.metrics.reduce((sum, m) => sum + m.duration, 0);
|
|
53
|
+
console.log(` Total: ${total.toFixed(2)}ms\n`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function measurePerformance(target, propertyKey, descriptor) {
|
|
57
|
+
const originalMethod = descriptor.value;
|
|
58
|
+
descriptor.value = async function (...args) {
|
|
59
|
+
const monitor = PerformanceMonitor.getInstance();
|
|
60
|
+
const timerName = `${target.constructor.name}.${propertyKey}`;
|
|
61
|
+
monitor.start(timerName);
|
|
62
|
+
try {
|
|
63
|
+
return await originalMethod.apply(this, args);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
monitor.end(timerName);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
return descriptor;
|
|
70
|
+
}
|
|
71
|
+
export async function measure(name, fn) {
|
|
72
|
+
const monitor = PerformanceMonitor.getInstance();
|
|
73
|
+
monitor.start(name);
|
|
74
|
+
try {
|
|
75
|
+
return await fn();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
monitor.end(name);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/utils/performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAMA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAsDzD;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAKD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import validateNpmPackageName from 'validate-npm-package-name';
|
|
2
|
+
import { InvalidProjectNameError } from './errors.js';
|
|
3
|
+
export function validateProjectName(name) {
|
|
4
|
+
const npmCheck = validateNpmPackageName(name);
|
|
5
|
+
if (!npmCheck.validForNewPackages) {
|
|
6
|
+
const errors = npmCheck.errors || [];
|
|
7
|
+
const warnings = npmCheck.warnings || [];
|
|
8
|
+
const issues = [...errors, ...warnings];
|
|
9
|
+
throw new InvalidProjectNameError(name, `NPM validation failed: ${issues.join(', ')}`);
|
|
10
|
+
}
|
|
11
|
+
if (!/^[a-z][a-z0-9_-]*$/.test(name)) {
|
|
12
|
+
throw new InvalidProjectNameError(name, 'Must start with a lowercase letter and contain only lowercase letters, numbers, hyphens, and underscores');
|
|
13
|
+
}
|
|
14
|
+
const reservedNames = [
|
|
15
|
+
'test',
|
|
16
|
+
'tests',
|
|
17
|
+
'src',
|
|
18
|
+
'dist',
|
|
19
|
+
'build',
|
|
20
|
+
'lib',
|
|
21
|
+
'python',
|
|
22
|
+
'pip',
|
|
23
|
+
'poetry',
|
|
24
|
+
'node',
|
|
25
|
+
'npm',
|
|
26
|
+
'rapidkit',
|
|
27
|
+
'create-rapidkit',
|
|
28
|
+
];
|
|
29
|
+
if (reservedNames.includes(name.toLowerCase())) {
|
|
30
|
+
throw new InvalidProjectNameError(name, `"${name}" is a reserved name. Please choose a different name.`);
|
|
31
|
+
}
|
|
32
|
+
if (name.length < 2) {
|
|
33
|
+
throw new InvalidProjectNameError(name, 'Name must be at least 2 characters long');
|
|
34
|
+
}
|
|
35
|
+
if (name.length > 214) {
|
|
36
|
+
throw new InvalidProjectNameError(name, 'Name must be less than 214 characters');
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
export function toSnakeCase(name) {
|
|
41
|
+
return name.replace(/-/g, '_');
|
|
42
|
+
}
|
|
43
|
+
export function toKebabCase(name) {
|
|
44
|
+
return name.replace(/_/g, '-');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +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,iBAAiB;KAClB,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.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
|
|
6
6
|
"keywords": [
|
|
@@ -30,8 +30,16 @@
|
|
|
30
30
|
"scripts": {
|
|
31
31
|
"build": "tsc",
|
|
32
32
|
"dev": "tsc --watch",
|
|
33
|
-
"prepare": "
|
|
34
|
-
"test": "
|
|
33
|
+
"prepare": "husky",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"test:coverage": "vitest run --coverage",
|
|
37
|
+
"lint": "eslint src --ext .ts",
|
|
38
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
39
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
40
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
41
|
+
"typecheck": "tsc --noEmit",
|
|
42
|
+
"validate": "npm run typecheck && npm run lint && npm run format:check && npm test"
|
|
35
43
|
},
|
|
36
44
|
"dependencies": {
|
|
37
45
|
"chalk": "^5.3.0",
|
|
@@ -49,9 +57,24 @@
|
|
|
49
57
|
"@types/node": "^20.14.0",
|
|
50
58
|
"@types/nunjucks": "^3.2.6",
|
|
51
59
|
"@types/validate-npm-package-name": "^4.0.2",
|
|
52
|
-
"typescript": "^
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
61
|
+
"@typescript-eslint/parser": "^8.46.2",
|
|
62
|
+
"@vitest/coverage-v8": "^2.0.0",
|
|
63
|
+
"@vitest/ui": "^2.0.0",
|
|
64
|
+
"eslint": "^8.57.1",
|
|
65
|
+
"husky": "^9.1.7",
|
|
66
|
+
"lint-staged": "^15.5.2",
|
|
67
|
+
"prettier": "^3.6.2",
|
|
68
|
+
"typescript": "^5.5.0",
|
|
69
|
+
"vitest": "^2.0.0"
|
|
53
70
|
},
|
|
54
71
|
"engines": {
|
|
55
72
|
"node": ">=18.0.0"
|
|
73
|
+
},
|
|
74
|
+
"lint-staged": {
|
|
75
|
+
"*.ts": [
|
|
76
|
+
"eslint --fix",
|
|
77
|
+
"prettier --write"
|
|
78
|
+
]
|
|
56
79
|
}
|
|
57
80
|
}
|