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
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: "CommandKitCompilerOptions"
isDefaultIndex: false
generated: true
---

import MemberInfo from '@site/src/components/MemberInfo';
import GenerationInfo from '@site/src/components/GenerationInfo';
import MemberDescription from '@site/src/components/MemberDescription';

<!-- This file was generated from the CommandKit source. Do not modify. Instead, re-run the "docgen" script -->


## CommandKitCompilerOptions

<GenerationInfo sourceFile="packages/commandkit/src/config/types.ts" sourceLine="5" packageName="commandkit" />



```ts title="Signature"
interface CommandKitCompilerOptions {
macro?: {
/**
* Whether to enable macro function compilation in development mode.
* @default false
*/
development?: boolean;
};
tsdown?: Partial<TsDownOptions>;
disableChunking?: boolean;
}
```

<div className="members-wrapper">

### macro

<MemberInfo kind="property" type={`{ /** * Whether to enable macro function compilation in development mode. * @default false */ development?: boolean; }`} />

The macro compiler options to use with CommandKit.
### tsdown

<MemberInfo kind="property" type={`Partial&#60;TsDownOptions&#62;`} />

The tsdown compiler options to use with CommandKit.
**DO NOT USE THIS UNLESS YOU KNOW WHAT YOU ARE DOING** as it alters the behavior of the build process.
### disableChunking

<MemberInfo kind="property" type={`boolean`} default={`false`} />

Disables chunking of the output (production only, development never chunks).


</div>
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,16 @@ import MemberDescription from '@site/src/components/MemberDescription';

## CommandKitConfig

<GenerationInfo sourceFile="packages/commandkit/src/config/types.ts" sourceLine="4" packageName="commandkit" />
<GenerationInfo sourceFile="packages/commandkit/src/config/types.ts" sourceLine="28" packageName="commandkit" />



```ts title="Signature"
interface CommandKitConfig {
plugins?: MaybeArray<CommandKitPlugin>[] | Array<CommandKitPlugin>;
rolldownPlugins?: any[];
compilerOptions?: {
/**
* Macro compiler configuration.
*/
macro?: {
/**
* Whether to enable macro function compilation in development mode.
* @default false
*/
development?: boolean;
};
};
entrypoints?: string[];
compilerOptions?: CommandKitCompilerOptions;
typescript?: {
/**
* Whether to ignore type checking during builds.
Expand All @@ -42,6 +32,18 @@ interface CommandKitConfig {
static?: boolean;
env?: Record<string, string>;
distDir?: string;
antiCrashScript?: {
/**
* Whether to enable the anti-crash script in development mode.
* @default true
*/
development?: boolean;
/**
* Whether to enable the anti-crash script in production mode. Usually, you should use other means to handle errors.
* @default false
*/
production?: boolean;
};
sourceMap?: {
/**
* Whether to enable source map generation in development mode.
Expand Down Expand Up @@ -71,9 +73,15 @@ Can be a single plugin, an array of plugins, or a nested array of plugins.
<MemberInfo kind="property" type={`any[]`} />

The rolldown plugins to use with CommandKit.
### entrypoints

<MemberInfo kind="property" type={`string[]`} />

The list of additional entrypoints to compile. Eg, `dir` or `dir/index.ts` or `dir/*.ts`, etc.
Similarly, negative patterns can be used to exclude files. Eg, `!dir/index.ts` or `!dir/*.ts`, etc.
### compilerOptions

<MemberInfo kind="property" type={`{ /** * Macro compiler configuration. */ macro?: { /** * Whether to enable macro function compilation in development mode. * @default false */ development?: boolean; }; }`} />
<MemberInfo kind="property" type={`<a href='/docs/next/api-reference/commandkit/interfaces/command-kit-compiler-options#commandkitcompileroptions'>CommandKitCompilerOptions</a>`} />

The compiler options to use with CommandKit.
### typescript
Expand All @@ -96,6 +104,11 @@ Statically define the environment variables to use.
<MemberInfo kind="property" type={`string`} default={`\`dist\``} />

The custom build directory name to use.
### antiCrashScript

<MemberInfo kind="property" type={`{ /** * Whether to enable the anti-crash script in development mode. * @default true */ development?: boolean; /** * Whether to enable the anti-crash script in production mode. Usually, you should use other means to handle errors. * @default false */ production?: boolean; }`} />

The anti-crash script configuration.
### sourceMap

<MemberInfo kind="property" type={`{ /** * Whether to enable source map generation in development mode. */ development?: boolean; /** * Whether to enable source map generation in production mode. */ production?: boolean; }`} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ import MemberDescription from '@site/src/components/MemberDescription';

## ResolvedCommandKitConfig

<GenerationInfo sourceFile="packages/commandkit/src/config/utils.ts" sourceLine="45" packageName="commandkit" />
<GenerationInfo sourceFile="packages/commandkit/src/config/utils.ts" sourceLine="62" packageName="commandkit" />



```ts title="Signature"
type ResolvedCommandKitConfig = DeepRequired<CommandKitConfig>
type ResolvedCommandKitConfig = DeepRequired<
CommandKitConfig,
'compilerOptions'
>
```
123 changes: 70 additions & 53 deletions packages/commandkit/src/cli/build.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { build } from 'tsdown';
import { build, Options } from 'tsdown';
import { CompilerPlugin, CompilerPluginRuntime } from '../plugins';
import { loadConfigFile } from '../config/loader';
import { writeFile } from 'node:fs/promises';
Expand All @@ -9,6 +9,8 @@ import { performTypeCheck } from './type-checker';
import { copyLocaleFiles } from './common';
import { MaybeArray } from '../components';
import { COMMANDKIT_CWD } from '../utils/constants';
import { mergeDeep } from '../config/utils';
import { existsSync } from 'node:fs';

/**
* @private
Expand Down Expand Up @@ -84,60 +86,70 @@ export async function buildApplication({

await pluginRuntime.init();

await build({
watch: false,
dts: false,
clean: true,
format: ['esm'],
shims: true,
minify: false,
silent: !!isDev,
inputOptions: {
transform: {
jsx: {
runtime: 'automatic',
importSource: 'commandkit',
await build(
mergeDeep(
{
watch: false,
dts: false,
clean: true,
format: ['esm'],
shims: true,
minify: false,
silent: !!isDev,
inputOptions: {
transform: {
jsx: {
runtime: 'automatic',
importSource: 'commandkit',
},
},
checks: {
circularDependency: true,
},
onwarn: (warning, defaultWarn) => {
if (warning?.message?.includes('compilerOptions.jsx')) return;

return defaultWarn(warning);
},
onLog: (level, log, defaultLog) => {
if (isDev) return;

return defaultLog(level, log);
},
moduleTypes: {
'.json': 'js',
'.node': 'binary',
},
},
},
checks: {
circularDependency: true,
},
onwarn: (warning, defaultWarn) => {
if (warning?.message?.includes('compilerOptions.jsx')) return;

return defaultWarn(warning);
},
onLog: (level, log, defaultLog) => {
if (isDev) return;

return defaultLog(level, log);
},
moduleTypes: {
'.json': 'js',
'.node': 'binary',
},
},
plugins: rolldownPlugins,
platform: 'node',
skipNodeModulesBundle: true,
sourcemap: true,
target: 'node16',
outDir: dest,
env: mergeDefinitionsIfNeeded(config.env || {}, !!isDev),
entry: [
'src',
`!${config.distDir}`,
'!.commandkit',
'!**/*.test.*',
'!**/*.spec.*',
],
unbundle: !!isDev,
});
plugins: rolldownPlugins,
platform: 'node',
skipNodeModulesBundle: true,
sourcemap:
config.sourceMap?.[isDev ? 'development' : 'production'] ?? true,
target: 'node16',
outDir: dest,
env: mergeDefinitionsIfNeeded(config.env || {}, !!isDev),
entry: [
'src',
`!${config.distDir}`,
'!.commandkit',
'!**/*.test.*',
'!**/*.spec.*',
],
unbundle: !!isDev,
} satisfies Options,
config.compilerOptions?.tsdown,
),
);

await copyLocaleFiles('src', dest);
await injectEntryFile(
configPath || COMMANDKIT_CWD,
!!isDev,
!!(
config.antiCrashScript?.[isDev ? 'development' : 'production'] ??
(isDev ? true : false)
),
config.distDir,
);
} catch (error) {
Expand Down Expand Up @@ -185,10 +197,17 @@ const wrapInAsyncIIFE = (code: string[]) =>
async function injectEntryFile(
configPath: string,
isDev: boolean,
emitAntiCrashScript: boolean,
distDir?: string,
) {
const dist = isDev ? '.commandkit' : distDir || 'dist';
const entryFilePath = join(configPath, dist, 'index.js');

// skip if the entry file already exists
if (existsSync(entryFilePath)) return;

const code = `/* Entrypoint File Generated By CommandKit */
${isDev ? `\n\n// Injected for development\n${wrapInAsyncIIFE([envScript(isDev), antiCrashScript])}\n\n` : wrapInAsyncIIFE([envScript(isDev)])}
${isDev ? `\n\n// Injected for development\n${wrapInAsyncIIFE([envScript(isDev), emitAntiCrashScript ? antiCrashScript : ''])}\n\n` : wrapInAsyncIIFE([envScript(isDev)])}

import { commandkit } from 'commandkit';
import { Client } from 'discord.js';
Expand All @@ -210,7 +229,5 @@ await bootstrap().catch((e) => {
})
`;

const dist = isDev ? '.commandkit' : distDir || 'dist';

await writeFile(join(configPath, dist, 'index.js'), code);
await writeFile(entryFilePath, code);
}
25 changes: 20 additions & 5 deletions packages/commandkit/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { MaybeArray } from '../components';
import { CommandKitPlugin } from '../plugins';
import { defaultConfig } from './default';
import { CommandKitConfig } from './types';
import { ResolvedCommandKitConfig } from './utils';
import { mergeDeep, ResolvedCommandKitConfig } from './utils';

let defined: ResolvedCommandKitConfig = defaultConfig;

Expand All @@ -20,18 +20,29 @@ export function getConfig(): ResolvedCommandKitConfig {
export function defineConfig(
config: Partial<CommandKitConfig> = {},
): ResolvedCommandKitConfig {
// defined = mergeDeep(
// config as ResolvedCommandKitConfig,
// mergeDeep({} as ResolvedCommandKitConfig, defaultConfig),
// );
defined = mergeDeep(
config as ResolvedCommandKitConfig,
mergeDeep({} as ResolvedCommandKitConfig, defaultConfig),
);

defined = {
compilerOptions: {
macro: {
...defaultConfig.compilerOptions.macro,
...config.compilerOptions?.macro,
},
tsdown: {
...defaultConfig.compilerOptions.tsdown,
...config.compilerOptions?.tsdown,
},
disableChunking:
config.compilerOptions?.disableChunking ??
defaultConfig.compilerOptions.disableChunking,
},
entrypoints: [
...(config.entrypoints ?? []),
...(defaultConfig.entrypoints ?? []),
],
distDir: config.distDir ?? defaultConfig.distDir,
env: {
...defaultConfig.env,
Expand Down Expand Up @@ -59,6 +70,10 @@ export function defineConfig(
showUnknownPrefixCommandsWarning:
config.showUnknownPrefixCommandsWarning ??
defaultConfig.showUnknownPrefixCommandsWarning,
antiCrashScript: {
...defaultConfig.antiCrashScript,
...config.antiCrashScript,
},
};

return defined;
Expand Down
7 changes: 7 additions & 0 deletions packages/commandkit/src/config/default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ export const defaultConfig: ResolvedCommandKitConfig = {
macro: {
development: false,
},
tsdown: {},
disableChunking: false,
},
entrypoints: [],
static: true,
typescript: {
ignoreBuildErrors: false,
Expand All @@ -26,4 +29,8 @@ export const defaultConfig: ResolvedCommandKitConfig = {
typedCommands: true,
disablePrefixCommands: false,
showUnknownPrefixCommandsWarning: true,
antiCrashScript: {
development: true,
production: false,
},
};
Loading