stackkit-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -0
- package/bin/stackkit.js +2 -0
- package/dist/commands/add.d.ts +9 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +201 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +153 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +107 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +65 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/code-inject.d.ts +15 -0
- package/dist/utils/code-inject.d.ts.map +1 -0
- package/dist/utils/code-inject.js +71 -0
- package/dist/utils/code-inject.js.map +1 -0
- package/dist/utils/detect.d.ts +5 -0
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/detect.js +79 -0
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/env-editor.d.ts +11 -0
- package/dist/utils/env-editor.d.ts.map +1 -0
- package/dist/utils/env-editor.js +92 -0
- package/dist/utils/env-editor.js.map +1 -0
- package/dist/utils/files.d.ts +7 -0
- package/dist/utils/files.d.ts.map +1 -0
- package/dist/utils/files.js +51 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/json-editor.d.ts +9 -0
- package/dist/utils/json-editor.d.ts.map +1 -0
- package/dist/utils/json-editor.js +50 -0
- package/dist/utils/json-editor.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +58 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-manager.d.ts +6 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +79 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/add.ts +261 -0
- package/src/commands/init.ts +182 -0
- package/src/commands/list.ts +124 -0
- package/src/index.ts +53 -0
- package/src/types/index.ts +71 -0
- package/src/utils/code-inject.ts +85 -0
- package/src/utils/detect.ts +89 -0
- package/src/utils/env-editor.ts +127 -0
- package/src/utils/files.ts +59 -0
- package/src/utils/json-editor.ts +64 -0
- package/src/utils/logger.ts +62 -0
- package/src/utils/package-manager.ts +85 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora, { Ora } from 'ora';
|
|
3
|
+
|
|
4
|
+
export class Logger {
|
|
5
|
+
private spinner: Ora | null = null;
|
|
6
|
+
|
|
7
|
+
info(message: string): void {
|
|
8
|
+
console.log(chalk.blue('ℹ'), message);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
success(message: string): void {
|
|
12
|
+
console.log(chalk.green('✔'), message);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
error(message: string): void {
|
|
16
|
+
console.log(chalk.red('✖'), message);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
warn(message: string): void {
|
|
20
|
+
console.log(chalk.yellow('⚠'), message);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
log(message: string): void {
|
|
24
|
+
console.log(message);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
newLine(): void {
|
|
28
|
+
console.log();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
startSpinner(text: string): Ora {
|
|
32
|
+
this.spinner = ora(text).start();
|
|
33
|
+
return this.spinner;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
stopSpinner(success = true, text?: string): void {
|
|
37
|
+
if (this.spinner) {
|
|
38
|
+
if (success) {
|
|
39
|
+
this.spinner.succeed(text);
|
|
40
|
+
} else {
|
|
41
|
+
this.spinner.fail(text);
|
|
42
|
+
}
|
|
43
|
+
this.spinner = null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
updateSpinner(text: string): void {
|
|
48
|
+
if (this.spinner) {
|
|
49
|
+
this.spinner.text = text;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
header(text: string): void {
|
|
54
|
+
console.log(chalk.bold.cyan(text));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
footer(): void {
|
|
58
|
+
console.log();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const logger = new Logger();
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { detect } from 'detect-package-manager';
|
|
2
|
+
import execa from 'execa';
|
|
3
|
+
import { logger } from './logger';
|
|
4
|
+
|
|
5
|
+
export type PackageManager = 'npm' | 'yarn' | 'pnpm';
|
|
6
|
+
|
|
7
|
+
export async function detectPackageManager(cwd: string): Promise<PackageManager> {
|
|
8
|
+
try {
|
|
9
|
+
const pm = await detect({ cwd });
|
|
10
|
+
return pm as PackageManager;
|
|
11
|
+
} catch {
|
|
12
|
+
return 'npm';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function installDependencies(
|
|
17
|
+
cwd: string,
|
|
18
|
+
pm: PackageManager,
|
|
19
|
+
dev = false
|
|
20
|
+
): Promise<void> {
|
|
21
|
+
const spinner = logger.startSpinner(`Installing dependencies with ${pm}...`);
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const args: string[] = [];
|
|
25
|
+
|
|
26
|
+
if (pm === 'npm') {
|
|
27
|
+
args.push('install');
|
|
28
|
+
} else if (pm === 'yarn') {
|
|
29
|
+
args.push('install');
|
|
30
|
+
} else if (pm === 'pnpm') {
|
|
31
|
+
args.push('install');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
await execa(pm, args, { cwd, stdio: 'pipe' });
|
|
35
|
+
spinner.succeed(`Dependencies installed successfully`);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
spinner.fail(`Failed to install dependencies`);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function addDependencies(
|
|
43
|
+
cwd: string,
|
|
44
|
+
pm: PackageManager,
|
|
45
|
+
packages: string[],
|
|
46
|
+
dev = false
|
|
47
|
+
): Promise<void> {
|
|
48
|
+
if (packages.length === 0) return;
|
|
49
|
+
|
|
50
|
+
const spinner = logger.startSpinner(
|
|
51
|
+
`Adding ${dev ? 'dev ' : ''}dependencies: ${packages.join(', ')}...`
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
const args: string[] = [];
|
|
56
|
+
|
|
57
|
+
if (pm === 'npm') {
|
|
58
|
+
args.push('install', dev ? '--save-dev' : '--save', ...packages);
|
|
59
|
+
} else if (pm === 'yarn') {
|
|
60
|
+
args.push('add', dev ? '--dev' : '', ...packages);
|
|
61
|
+
} else if (pm === 'pnpm') {
|
|
62
|
+
args.push('add', dev ? '-D' : '', ...packages);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
await execa(pm, args.filter(Boolean), { cwd, stdio: 'pipe' });
|
|
66
|
+
spinner.succeed(`Dependencies added successfully`);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
spinner.fail(`Failed to add dependencies`);
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function initGit(cwd: string): Promise<void> {
|
|
74
|
+
const spinner = logger.startSpinner('Initializing git repository...');
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
await execa('git', ['init'], { cwd });
|
|
78
|
+
await execa('git', ['add', '.'], { cwd });
|
|
79
|
+
await execa('git', ['commit', '-m', 'Initial commit from StackKit'], { cwd });
|
|
80
|
+
spinner.succeed('Git repository initialized');
|
|
81
|
+
} catch (error) {
|
|
82
|
+
spinner.fail('Failed to initialize git repository');
|
|
83
|
+
// Don't throw - git init is optional
|
|
84
|
+
}
|
|
85
|
+
}
|