Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 28 additions & 7 deletions packages/create-commandkit/src/functions/installDeps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const baseDependencies = [
const dependencies = {
js: {
dependencies: baseDependencies,
devDependencies: ['@types/node'],
devDependencies: ['@types/node', 'typescript'],
},
ts: {
dependencies: baseDependencies,
Expand All @@ -27,6 +27,24 @@ interface InstallDepsProps {
stdio: IOType;
}

function getInstallCommand(
manager: PackageManager,
deps: string[],
dev = false,
) {
switch (manager) {
case 'npm':
case 'pnpm':
case 'yarn':
case 'bun':
return `${manager} add ${dev ? '-D' : ''} ${deps.join(' ')}`;
case 'deno':
return `deno add ${dev ? '--dev' : ''} ${deps.map((d) => `npm:${d}`).join(' ')}`;
default:
return manager satisfies never;
}
}

export function installDeps({
manager,
dir,
Expand All @@ -37,17 +55,20 @@ export function installDeps({

try {
if (dependencies[lang].dependencies.length) {
const depsCommand = `${manager} add ${dependencies[
lang
].dependencies.join(' ')}`;
const depsCommand = getInstallCommand(
manager,
dependencies[lang].dependencies,
);

execSync(depsCommand, { cwd: dir, stdio });
}

if (dependencies[lang].devDependencies.length) {
const devDepsCommand = `${manager} add -D ${dependencies[
lang
].devDependencies.join(' ')}`;
const devDepsCommand = getInstallCommand(
manager,
dependencies[lang].devDependencies,
true,
);

execSync(devDepsCommand, { cwd: dir, stdio });
}
Expand Down
38 changes: 23 additions & 15 deletions packages/create-commandkit/src/functions/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,24 +19,32 @@ export async function setup({
stdio = 'pipe',
}: SetupProps) {
await fs.emptyDir(dir);
execSync(commands.init[manager], { cwd: dir, stdio });

if (manager === 'yarn') {
execSync(commands.init.yarn, { cwd: dir, stdio });
}

const packageJsonPath = path.join(dir, 'package.json');
const packageJson = await fs.readJSON(packageJsonPath);

delete packageJson.main;
packageJson.name = packageJson.name.toLowerCase();
packageJson.type = 'module';
packageJson.version = '0.1.0';
packageJson.private = true;
packageJson.description = 'A CommandKit project';

packageJson.scripts = {
dev: 'commandkit dev',
build: 'commandkit build',
start: 'commandkit start',

const packageJson = {
name:
dir.replaceAll('\\', '/').split('/').pop()?.toLowerCase() ||
'commandkit-project',
description: 'A CommandKit project',
version: '0.1.0',
type: 'module',
private: true,
main: 'dist/index.js',
scripts: {
dev: 'commandkit dev',
build: 'commandkit build',
start: 'commandkit start',
},
devDependencies: {},
dependencies: {},
};

await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
await fs.writeFile(`${dir}/.env`, `DISCORD_TOKEN="${token}"`);

await fs.writeFile(`${dir}/.env`, `DISCORD_TOKEN="${token || ''}"`);
}
28 changes: 23 additions & 5 deletions packages/create-commandkit/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ import { copyTemplates } from './functions/copyTemplates.js';
import { installDeps } from './functions/installDeps.js';
import { setup } from './functions/setup.js';
import type { Language, PackageManager } from './types';
import { textColors } from './utils.js';
import { detectPackageManager, textColors } from './utils.js';

const commandkitGradient = gradient(textColors.commandkit)('CommandKit');

intro(`Welcome to ${commandkitGradient}!`);

const dir = path.resolve(
Expand All @@ -41,12 +42,13 @@ const dir = path.resolve(

const manager = (await select({
message: 'Select a package manager:',
initialValue: 'npm' as PackageManager,
initialValue: detectPackageManager(),
options: [
{ label: 'npm', value: 'npm' },
{ label: 'pnpm', value: 'pnpm' },
{ label: 'yarn', value: 'yarn' },
{ label: 'bun', value: 'bun' },
{ label: 'deno', value: 'deno' },
],
})) as PackageManager;

Expand Down Expand Up @@ -98,13 +100,29 @@ installDeps({
stdio: 'pipe',
});

const command = (cmd: string) => {
switch (manager) {
case 'npm':
// bun build runs bundler instead of the build script
case 'bun':
return `${manager} run ${cmd}`;
case 'pnpm':
case 'yarn':
return `${manager} ${cmd}`;
case 'deno':
return `deno task ${cmd}`;
default:
return manager satisfies never;
}
};

console.log(
`${gradient(textColors.commandkit)('Thank you for choosing CommandKit!')}

To start your bot, use the following commands:
${colors.magenta(`${manager} run dev`)} - Run your bot in development mode
${colors.magenta(`${manager} run build`)} - Build your bot for production
${colors.magenta(`${manager} run start`)} - Run your bot in production mode
${colors.magenta(command('dev'))} - Run your bot in development mode
${colors.magenta(command('build'))} - Build your bot for production
${colors.magenta(command('start'))} - Run your bot in production mode

• Documentation: ${colors.blue('https://commandkit.dev')}
• GitHub: ${colors.blue('https://github.com/underctrl-io/commandkit')}
Expand Down
2 changes: 1 addition & 1 deletion packages/create-commandkit/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export type Language = 'js' | 'ts';
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';
19 changes: 15 additions & 4 deletions packages/create-commandkit/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { PackageManager } from './types';

export const textColors = {
commandkit: ['#fdba74', '#e4a5a2', '#c288de', '#b27bf9'],
js: ['#f7e01c', '#f7e01c'],
Expand All @@ -6,9 +8,18 @@ export const textColors = {

export const commands = {
init: {
npm: 'npm init -y',
yarn: 'yarn init -y; yarn set version stable; yarn config set nodeLinker node-modules;',
pnpm: 'pnpm init',
bun: 'bun init -y -m',
yarn: 'yarn set version stable; yarn config set nodeLinker node-modules;',
},
};

export function detectPackageManager(): PackageManager {
const packageManager = process.env.npm_config_user_agent;

if (packageManager?.includes('pnpm')) return 'pnpm';
if (packageManager?.includes('yarn')) return 'yarn';
if (packageManager?.includes('bun')) return 'bun';
if (packageManager?.includes('npm')) return 'npm';
if (packageManager?.includes('deno')) return 'deno';

return 'npm';
}