Skip to content

Commit af06fe1

Browse files
authored
Merge pull request #286 from underctrl-io/create-commandkit-deno-support
feat(create-commandkit): add deno support
2 parents cda4ab8 + 505ba9b commit af06fe1

File tree

5 files changed

+90
-32
lines changed

5 files changed

+90
-32
lines changed

packages/create-commandkit/src/functions/installDeps.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const baseDependencies = [
1212
const dependencies = {
1313
js: {
1414
dependencies: baseDependencies,
15-
devDependencies: ['@types/node'],
15+
devDependencies: ['@types/node', 'typescript'],
1616
},
1717
ts: {
1818
dependencies: baseDependencies,
@@ -27,6 +27,24 @@ interface InstallDepsProps {
2727
stdio: IOType;
2828
}
2929

30+
function getInstallCommand(
31+
manager: PackageManager,
32+
deps: string[],
33+
dev = false,
34+
) {
35+
switch (manager) {
36+
case 'npm':
37+
case 'pnpm':
38+
case 'yarn':
39+
case 'bun':
40+
return `${manager} add ${dev ? '-D' : ''} ${deps.join(' ')}`;
41+
case 'deno':
42+
return `deno add ${dev ? '--dev' : ''} ${deps.map((d) => `npm:${d}`).join(' ')}`;
43+
default:
44+
return manager satisfies never;
45+
}
46+
}
47+
3048
export function installDeps({
3149
manager,
3250
dir,
@@ -37,17 +55,20 @@ export function installDeps({
3755

3856
try {
3957
if (dependencies[lang].dependencies.length) {
40-
const depsCommand = `${manager} add ${dependencies[
41-
lang
42-
].dependencies.join(' ')}`;
58+
const depsCommand = getInstallCommand(
59+
manager,
60+
dependencies[lang].dependencies,
61+
);
4362

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

4766
if (dependencies[lang].devDependencies.length) {
48-
const devDepsCommand = `${manager} add -D ${dependencies[
49-
lang
50-
].devDependencies.join(' ')}`;
67+
const devDepsCommand = getInstallCommand(
68+
manager,
69+
dependencies[lang].devDependencies,
70+
true,
71+
);
5172

5273
execSync(devDepsCommand, { cwd: dir, stdio });
5374
}

packages/create-commandkit/src/functions/setup.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,32 @@ export async function setup({
1919
stdio = 'pipe',
2020
}: SetupProps) {
2121
await fs.emptyDir(dir);
22-
execSync(commands.init[manager], { cwd: dir, stdio });
22+
23+
if (manager === 'yarn') {
24+
execSync(commands.init.yarn, { cwd: dir, stdio });
25+
}
2326

2427
const packageJsonPath = path.join(dir, 'package.json');
25-
const packageJson = await fs.readJSON(packageJsonPath);
26-
27-
delete packageJson.main;
28-
packageJson.name = packageJson.name.toLowerCase();
29-
packageJson.type = 'module';
30-
packageJson.version = '0.1.0';
31-
packageJson.private = true;
32-
packageJson.description = 'A CommandKit project';
33-
34-
packageJson.scripts = {
35-
dev: 'commandkit dev',
36-
build: 'commandkit build',
37-
start: 'commandkit start',
28+
29+
const packageJson = {
30+
name:
31+
dir.replaceAll('\\', '/').split('/').pop()?.toLowerCase() ||
32+
'commandkit-project',
33+
description: 'A CommandKit project',
34+
version: '0.1.0',
35+
type: 'module',
36+
private: true,
37+
main: 'dist/index.js',
38+
scripts: {
39+
dev: 'commandkit dev',
40+
build: 'commandkit build',
41+
start: 'commandkit start',
42+
},
43+
devDependencies: {},
44+
dependencies: {},
3845
};
3946

4047
await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
41-
await fs.writeFile(`${dir}/.env`, `DISCORD_TOKEN="${token}"`);
48+
49+
await fs.writeFile(`${dir}/.env`, `DISCORD_TOKEN="${token || ''}"`);
4250
}

packages/create-commandkit/src/index.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import { copyTemplates } from './functions/copyTemplates.js';
1212
import { installDeps } from './functions/installDeps.js';
1313
import { setup } from './functions/setup.js';
1414
import type { Language, PackageManager } from './types';
15-
import { textColors } from './utils.js';
15+
import { detectPackageManager, textColors } from './utils.js';
1616

1717
const commandkitGradient = gradient(textColors.commandkit)('CommandKit');
18+
1819
intro(`Welcome to ${commandkitGradient}!`);
1920

2021
const dir = path.resolve(
@@ -41,12 +42,13 @@ const dir = path.resolve(
4142

4243
const manager = (await select({
4344
message: 'Select a package manager:',
44-
initialValue: 'npm' as PackageManager,
45+
initialValue: detectPackageManager(),
4546
options: [
4647
{ label: 'npm', value: 'npm' },
4748
{ label: 'pnpm', value: 'pnpm' },
4849
{ label: 'yarn', value: 'yarn' },
4950
{ label: 'bun', value: 'bun' },
51+
{ label: 'deno', value: 'deno' },
5052
],
5153
})) as PackageManager;
5254

@@ -98,13 +100,29 @@ installDeps({
98100
stdio: 'pipe',
99101
});
100102

103+
const command = (cmd: string) => {
104+
switch (manager) {
105+
case 'npm':
106+
// bun build runs bundler instead of the build script
107+
case 'bun':
108+
return `${manager} run ${cmd}`;
109+
case 'pnpm':
110+
case 'yarn':
111+
return `${manager} ${cmd}`;
112+
case 'deno':
113+
return `deno task ${cmd}`;
114+
default:
115+
return manager satisfies never;
116+
}
117+
};
118+
101119
console.log(
102120
`${gradient(textColors.commandkit)('Thank you for choosing CommandKit!')}
103121
104122
To start your bot, use the following commands:
105-
${colors.magenta(`${manager} run dev`)} - Run your bot in development mode
106-
${colors.magenta(`${manager} run build`)} - Build your bot for production
107-
${colors.magenta(`${manager} run start`)} - Run your bot in production mode
123+
${colors.magenta(command('dev'))} - Run your bot in development mode
124+
${colors.magenta(command('build'))} - Build your bot for production
125+
${colors.magenta(command('start'))} - Run your bot in production mode
108126
109127
• Documentation: ${colors.blue('https://commandkit.dev')}
110128
• GitHub: ${colors.blue('https://github.com/underctrl-io/commandkit')}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export type Language = 'js' | 'ts';
2-
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
2+
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';
Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { PackageManager } from './types';
2+
13
export const textColors = {
24
commandkit: ['#fdba74', '#e4a5a2', '#c288de', '#b27bf9'],
35
js: ['#f7e01c', '#f7e01c'],
@@ -6,9 +8,18 @@ export const textColors = {
68

79
export const commands = {
810
init: {
9-
npm: 'npm init -y',
10-
yarn: 'yarn init -y; yarn set version stable; yarn config set nodeLinker node-modules;',
11-
pnpm: 'pnpm init',
12-
bun: 'bun init -y -m',
11+
yarn: 'yarn set version stable; yarn config set nodeLinker node-modules;',
1312
},
1413
};
14+
15+
export function detectPackageManager(): PackageManager {
16+
const packageManager = process.env.npm_config_user_agent;
17+
18+
if (packageManager?.includes('pnpm')) return 'pnpm';
19+
if (packageManager?.includes('yarn')) return 'yarn';
20+
if (packageManager?.includes('bun')) return 'bun';
21+
if (packageManager?.includes('npm')) return 'npm';
22+
if (packageManager?.includes('deno')) return 'deno';
23+
24+
return 'npm';
25+
}

0 commit comments

Comments
 (0)