diff --git a/.gitignore b/.gitignore
index ff13c06c..c85d94a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
node_modules
dist
.DS_Store
-.vscode
.turbo
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..bb215b2f
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,11 @@
+{
+ "files.readonlyInclude": {
+ "**/routeTree.gen.ts": true
+ },
+ "files.watcherExclude": {
+ "**/routeTree.gen.ts": true
+ },
+ "search.exclude": {
+ "**/routeTree.gen.ts": true
+ }
+}
\ No newline at end of file
diff --git a/apps/website/docs/guide/01-getting-started/02-setup-commandkit.mdx b/apps/website/docs/guide/01-getting-started/02-setup-commandkit.mdx
index c55bd35a..9ff49eba 100644
--- a/apps/website/docs/guide/01-getting-started/02-setup-commandkit.mdx
+++ b/apps/website/docs/guide/01-getting-started/02-setup-commandkit.mdx
@@ -21,12 +21,65 @@ The quickest way to setup a new CommandKit project is to use the
your terminal:
```sh npm2yarn
-npm create commandkit@next
+npm create commandkit@latest
```
This will start the CLI in an interactive mode. You can follow the
prompts to setup your project.
+## Available Examples
+
+CommandKit comes with several pre-built examples to help you get started quickly. You can list all available examples using:
+
+```sh npm2yarn
+npm create commandkit@latest --list-examples
+```
+
+### Using Examples
+
+You can create a project from any example using the `--example` flag:
+
+```sh npm2yarn
+# Create a basic TypeScript bot
+npm create commandkit@latest --example basic-ts
+
+# Create a basic JavaScript bot
+npm create commandkit@latest --example basic-js
+
+# Create a Deno TypeScript bot
+npm create commandkit@latest --example deno-ts
+
+# Create a bot without CLI integration
+npm create commandkit@latest --example without-cli
+```
+
+### CLI Options
+
+The CLI supports various options for customization:
+
+```sh npm2yarn
+# Skip prompts and use defaults
+npm create commandkit@latest --yes
+
+# Use a specific package manager
+npm create commandkit@latest --use-pnpm
+npm create commandkit@latest --use-yarn
+npm create commandkit@latest --use-bun
+npm create commandkit@latest --use-deno
+
+# Skip dependency installation
+npm create commandkit@latest --skip-install
+
+# Skip git initialization
+npm create commandkit@latest --no-git
+
+# Create in a specific directory
+npm create commandkit@latest my-bot
+
+# Use a custom GitHub repository
+npm create commandkit@latest --example "https://github.com/user/repo"
+```
+
## Project structure
By using the CLI to create a base project, you should get a file tree
@@ -49,6 +102,12 @@ that looks something like this:
└── tsconfig.json
```
+:::note
+
+The exact project structure may vary depending on the example you choose. Each example comes with its own configuration and dependencies tailored to its specific use case.
+
+:::
+
## Entry point
The `src/app.ts` file is the main entry point for your application.
@@ -107,6 +166,16 @@ The development version is likely to have bugs.
:::
+## Getting Help
+
+For more information about the CLI options, you can use the help flag:
+
+```sh npm2yarn
+npm create commandkit@latest --help
+```
+
+This will display all available options and usage examples.
+
## Manual setup
Alternatively, if you would like to setup a new CommandKit project
diff --git a/examples/basic-js/.gitignore b/examples/basic-js/.gitignore
new file mode 100644
index 00000000..d2a82db7
--- /dev/null
+++ b/examples/basic-js/.gitignore
@@ -0,0 +1,36 @@
+# dependencies
+node_modules
+
+# build output
+build
+out
+dist
+
+# commandkit
+.commandkit
+dist
+compiled-commandkit.config.mjs
+
+# env
+**/*.env*
+!**/*.env.example*
+
+# logging
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# yarn v2+
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+# other
+**/*.DS_Store
+.temp-example
\ No newline at end of file
diff --git a/packages/create-commandkit/templates/TypeScript/README.md b/examples/basic-js/README.md
similarity index 89%
rename from packages/create-commandkit/templates/TypeScript/README.md
rename to examples/basic-js/README.md
index 0d64a8a7..fcff3790 100644
--- a/packages/create-commandkit/templates/TypeScript/README.md
+++ b/examples/basic-js/README.md
@@ -1,4 +1,4 @@
-# Welcome to CommandKit
+# Welcome to CommandKit + JavaScript
> This project was generated by [create-commandkit](https://npmjs.com/package/create-commandkit).
diff --git a/packages/create-commandkit/templates/JavaScript/commandkit-env.d.ts b/examples/basic-js/commandkit-env.d.ts
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/commandkit-env.d.ts
rename to examples/basic-js/commandkit-env.d.ts
diff --git a/packages/create-commandkit/templates/JavaScript/commandkit.config.mjs b/examples/basic-js/commandkit.config.mjs
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/commandkit.config.mjs
rename to examples/basic-js/commandkit.config.mjs
diff --git a/packages/create-commandkit/templates/JavaScript/jsconfig.json b/examples/basic-js/jsconfig.json
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/jsconfig.json
rename to examples/basic-js/jsconfig.json
diff --git a/examples/basic-js/package.json b/examples/basic-js/package.json
new file mode 100644
index 00000000..3595bf4f
--- /dev/null
+++ b/examples/basic-js/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "commandkit-basic-js",
+ "description": "A CommandKit project using JavaScript",
+ "version": "0.1.0",
+ "type": "module",
+ "private": true,
+ "main": "dist/index.js",
+ "scripts": {
+ "dev": "commandkit dev",
+ "build": "commandkit build",
+ "start": "commandkit start"
+ },
+ "devDependencies": {
+ "@types/node": "^24.0.10",
+ "typescript": "^5.8.3"
+ },
+ "dependencies": {
+ "commandkit": "^1.2.0-rc.12",
+ "discord.js": "^14.23.2"
+ }
+}
diff --git a/packages/create-commandkit/templates/JavaScript/src/app.js b/examples/basic-js/src/app.js
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/src/app.js
rename to examples/basic-js/src/app.js
diff --git a/packages/create-commandkit/templates/JavaScript/src/app/commands/ping.js b/examples/basic-js/src/app/commands/ping.js
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/src/app/commands/ping.js
rename to examples/basic-js/src/app/commands/ping.js
diff --git a/packages/create-commandkit/templates/JavaScript/src/app/events/clientReady/log.js b/examples/basic-js/src/app/events/clientReady/log.js
similarity index 100%
rename from packages/create-commandkit/templates/JavaScript/src/app/events/clientReady/log.js
rename to examples/basic-js/src/app/events/clientReady/log.js
diff --git a/examples/basic-ts/.gitignore b/examples/basic-ts/.gitignore
new file mode 100644
index 00000000..d2a82db7
--- /dev/null
+++ b/examples/basic-ts/.gitignore
@@ -0,0 +1,36 @@
+# dependencies
+node_modules
+
+# build output
+build
+out
+dist
+
+# commandkit
+.commandkit
+dist
+compiled-commandkit.config.mjs
+
+# env
+**/*.env*
+!**/*.env.example*
+
+# logging
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# yarn v2+
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+# other
+**/*.DS_Store
+.temp-example
\ No newline at end of file
diff --git a/packages/create-commandkit/templates/JavaScript/README.md b/examples/basic-ts/README.md
similarity index 89%
rename from packages/create-commandkit/templates/JavaScript/README.md
rename to examples/basic-ts/README.md
index 0d64a8a7..e9f8b4f8 100644
--- a/packages/create-commandkit/templates/JavaScript/README.md
+++ b/examples/basic-ts/README.md
@@ -1,4 +1,4 @@
-# Welcome to CommandKit
+# Welcome to CommandKit + TypeScript
> This project was generated by [create-commandkit](https://npmjs.com/package/create-commandkit).
diff --git a/packages/create-commandkit/templates/TypeScript/commandkit-env.d.ts b/examples/basic-ts/commandkit-env.d.ts
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/commandkit-env.d.ts
rename to examples/basic-ts/commandkit-env.d.ts
diff --git a/packages/create-commandkit/templates/TypeScript/commandkit.config.ts b/examples/basic-ts/commandkit.config.ts
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/commandkit.config.ts
rename to examples/basic-ts/commandkit.config.ts
diff --git a/examples/basic-ts/package.json b/examples/basic-ts/package.json
new file mode 100644
index 00000000..b2d34003
--- /dev/null
+++ b/examples/basic-ts/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "commandkit-basic-ts",
+ "description": "A CommandKit project using TypeScript",
+ "version": "0.1.0",
+ "type": "module",
+ "private": true,
+ "main": "dist/index.js",
+ "scripts": {
+ "dev": "commandkit dev",
+ "build": "commandkit build",
+ "start": "commandkit start"
+ },
+ "devDependencies": {
+ "@types/node": "^24.0.10",
+ "typescript": "^5.8.3"
+ },
+ "dependencies": {
+ "commandkit": "^1.2.0-rc.12",
+ "discord.js": "^14.23.2"
+ }
+}
diff --git a/packages/create-commandkit/templates/TypeScript/src/app.ts b/examples/basic-ts/src/app.ts
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/src/app.ts
rename to examples/basic-ts/src/app.ts
diff --git a/packages/create-commandkit/templates/TypeScript/src/app/commands/ping.ts b/examples/basic-ts/src/app/commands/ping.ts
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/src/app/commands/ping.ts
rename to examples/basic-ts/src/app/commands/ping.ts
diff --git a/packages/create-commandkit/templates/TypeScript/src/app/events/clientReady/log.ts b/examples/basic-ts/src/app/events/clientReady/log.ts
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/src/app/events/clientReady/log.ts
rename to examples/basic-ts/src/app/events/clientReady/log.ts
diff --git a/packages/create-commandkit/templates/TypeScript/tsconfig.json b/examples/basic-ts/tsconfig.json
similarity index 100%
rename from packages/create-commandkit/templates/TypeScript/tsconfig.json
rename to examples/basic-ts/tsconfig.json
diff --git a/examples/deno-ts/.gitignore b/examples/deno-ts/.gitignore
new file mode 100644
index 00000000..dad27ae6
--- /dev/null
+++ b/examples/deno-ts/.gitignore
@@ -0,0 +1,36 @@
+
+# dependencies
+node_modules
+
+# build output
+build
+out
+dist
+
+# commandkit
+.commandkit
+dist
+compiled-commandkit.config.mjs
+
+# env
+**/*.env*
+!**/*.env.example*
+
+# logging
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# yarn v2+
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+# other
+**/*.DS_Store
diff --git a/examples/deno-ts/.vscode/settings.json b/examples/deno-ts/.vscode/settings.json
new file mode 100644
index 00000000..cbac5697
--- /dev/null
+++ b/examples/deno-ts/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "deno.enable": true
+}
diff --git a/examples/deno-ts/README.md b/examples/deno-ts/README.md
new file mode 100644
index 00000000..553339e3
--- /dev/null
+++ b/examples/deno-ts/README.md
@@ -0,0 +1,36 @@
+# Welcome to CommandKit + Deno
+
+> This project was generated by [create-commandkit](https://npmjs.com/package/create-commandkit).
+
+This project is a template for a CommandKit project using Deno.
+
+## To run this project
+
+### dependencies
+
+```sh
+deno install
+```
+
+### run the dev server
+
+```sh
+deno task dev
+```
+
+### build the project
+
+```sh
+deno task build
+```
+
+### run the project (production)
+
+```sh
+deno task start
+```
+
+## Useful links
+
+- [Documentation](https://commandkit.dev)
+- [Discord](https://ctrl.lol/discord)
diff --git a/examples/deno-ts/commandkit-env.d.ts b/examples/deno-ts/commandkit-env.d.ts
new file mode 100644
index 00000000..cc2ba6df
--- /dev/null
+++ b/examples/deno-ts/commandkit-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/examples/deno-ts/commandkit.config.ts b/examples/deno-ts/commandkit.config.ts
new file mode 100644
index 00000000..57ae7a44
--- /dev/null
+++ b/examples/deno-ts/commandkit.config.ts
@@ -0,0 +1,3 @@
+import { defineConfig } from 'commandkit/config';
+
+export default defineConfig({});
diff --git a/examples/deno-ts/deno.json b/examples/deno-ts/deno.json
new file mode 100644
index 00000000..1dfe5b70
--- /dev/null
+++ b/examples/deno-ts/deno.json
@@ -0,0 +1,21 @@
+{
+ "compilerOptions": {
+ "jsx": "react-jsx",
+ "jsxImportSource": "commandkit"
+ },
+ "nodeModulesDir": "auto",
+ "lock": true,
+ "lint": {
+ "include": ["src/"],
+ "exclude": ["node_modules/", "dist/", ".commandkit/"]
+ },
+ "fmt": {
+ "useTabs": false,
+ "lineWidth": 120,
+ "indentWidth": 2,
+ "semiColons": true,
+ "singleQuote": true,
+ "include": ["src/"],
+ "exclude": ["node_modules/", "dist/", ".commandkit/"]
+ }
+}
diff --git a/examples/deno-ts/package.json b/examples/deno-ts/package.json
new file mode 100644
index 00000000..36dfbce2
--- /dev/null
+++ b/examples/deno-ts/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "commandkit-deno",
+ "description": "A CommandKit project using Deno",
+ "version": "0.1.0",
+ "type": "module",
+ "private": true,
+ "main": "dist/index.js",
+ "scripts": {
+ "dev": "commandkit dev",
+ "build": "commandkit build",
+ "start": "commandkit start"
+ },
+ "devDependencies": {
+ "@types/node": "^24.0.10",
+ "typescript": "^5.8.3"
+ },
+ "dependencies": {
+ "commandkit": "^1.2.0-rc.12",
+ "discord.js": "^14.23.2"
+ }
+}
diff --git a/examples/deno-ts/src/app.ts b/examples/deno-ts/src/app.ts
new file mode 100644
index 00000000..ed8d0d48
--- /dev/null
+++ b/examples/deno-ts/src/app.ts
@@ -0,0 +1,7 @@
+import { Client } from 'discord.js';
+
+const client = new Client({
+ intents: ['Guilds', 'GuildMembers', 'GuildMessages', 'MessageContent'],
+});
+
+export default client;
diff --git a/examples/deno-ts/src/app/commands/ping.ts b/examples/deno-ts/src/app/commands/ping.ts
new file mode 100644
index 00000000..638398b5
--- /dev/null
+++ b/examples/deno-ts/src/app/commands/ping.ts
@@ -0,0 +1,20 @@
+import type { ChatInputCommand, MessageCommand, CommandData } from 'commandkit';
+
+export const command: CommandData = {
+ name: 'ping',
+ description: "Ping the bot to check if it's online.",
+};
+
+export const chatInput: ChatInputCommand = async (ctx) => {
+ const latency = (ctx.client.ws.ping ?? -1).toString();
+ const response = `Pong! Latency: ${latency}ms`;
+
+ await ctx.interaction.reply(response);
+};
+
+export const message: MessageCommand = async (ctx) => {
+ const latency = (ctx.client.ws.ping ?? -1).toString();
+ const response = `Pong! Latency: ${latency}ms`;
+
+ await ctx.message.reply(response);
+};
diff --git a/examples/deno-ts/src/app/events/ready/log.ts b/examples/deno-ts/src/app/events/ready/log.ts
new file mode 100644
index 00000000..4414a153
--- /dev/null
+++ b/examples/deno-ts/src/app/events/ready/log.ts
@@ -0,0 +1,6 @@
+import type { Client } from 'discord.js';
+import { Logger } from 'commandkit/logger';
+
+export default function log(client: Client) {
+ Logger.info(`Logged in as ${client.user.username}!`);
+}
diff --git a/examples/deno-ts/tsconfig.json b/examples/deno-ts/tsconfig.json
new file mode 100644
index 00000000..2c06b336
--- /dev/null
+++ b/examples/deno-ts/tsconfig.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "compilerOptions": {
+ "lib": ["ESNext", "DOM"],
+ "target": "ESNext",
+ "moduleResolution": "Node",
+ "module": "Preserve",
+ "allowImportingTsExtensions": true,
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "skipDefaultLibCheck": true,
+ "noUncheckedIndexedAccess": true,
+ "removeComments": true,
+ "allowJs": true,
+ "strict": true,
+ "alwaysStrict": true,
+ "noEmit": true,
+ "declaration": false,
+ "jsx": "react-jsx",
+ "jsxImportSource": "commandkit",
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["src", "commandkit.config.ts", "commandkit-env.d.ts"],
+ "exclude": ["dist", "node_modules", ".commandkit"]
+}
diff --git a/examples/without-cli/.gitignore b/examples/without-cli/.gitignore
new file mode 100644
index 00000000..dad27ae6
--- /dev/null
+++ b/examples/without-cli/.gitignore
@@ -0,0 +1,36 @@
+
+# dependencies
+node_modules
+
+# build output
+build
+out
+dist
+
+# commandkit
+.commandkit
+dist
+compiled-commandkit.config.mjs
+
+# env
+**/*.env*
+!**/*.env.example*
+
+# logging
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# yarn v2+
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+# other
+**/*.DS_Store
diff --git a/examples/without-cli/.prettierrc b/examples/without-cli/.prettierrc
new file mode 100644
index 00000000..0a65dacb
--- /dev/null
+++ b/examples/without-cli/.prettierrc
@@ -0,0 +1,10 @@
+{
+ "printWidth": 120,
+ "tabWidth": 2,
+ "useTabs": false,
+ "semi": true,
+ "endOfLine": "lf",
+ "singleQuote": true,
+ "trailingComma": "all",
+ "arrowParens": "always"
+}
diff --git a/examples/without-cli/README.md b/examples/without-cli/README.md
new file mode 100644
index 00000000..3c23b2dc
--- /dev/null
+++ b/examples/without-cli/README.md
@@ -0,0 +1,29 @@
+# CommandKit without CLI
+
+This is an example of a CommandKit project without using the CLI.
+Note that not using CLI has some drawbacks, such as not being able to use some plugins that require syntax transformation.
+
+## To run this project
+
+1. First, install dependencies:
+
+```sh
+pnpm install
+```
+
+2. Add your bot token to the `.env` file.
+
+3. Then, run the project:
+
+```sh
+pnpm start
+# or
+COMMANDKIT_IS_CLI=true node src/index.js
+```
+
+> Note: You must set `COMMANDKIT_IS_CLI=true` environment variable when running the project without CLI. Not setting this variable will cause the project to fail with errors.
+
+## Useful links
+
+- [Documentation](https://commandkit.dev)
+- [Discord](https://ctrl.lol/discord)
diff --git a/examples/without-cli/commandkit-env.d.ts b/examples/without-cli/commandkit-env.d.ts
new file mode 100644
index 00000000..cc2ba6df
--- /dev/null
+++ b/examples/without-cli/commandkit-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/examples/without-cli/commandkit.config.mjs b/examples/without-cli/commandkit.config.mjs
new file mode 100644
index 00000000..57ae7a44
--- /dev/null
+++ b/examples/without-cli/commandkit.config.mjs
@@ -0,0 +1,3 @@
+import { defineConfig } from 'commandkit/config';
+
+export default defineConfig({});
diff --git a/examples/without-cli/jsconfig.json b/examples/without-cli/jsconfig.json
new file mode 100644
index 00000000..4e77fa74
--- /dev/null
+++ b/examples/without-cli/jsconfig.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "compilerOptions": {
+ "lib": ["ESNext", "DOM"],
+ "target": "ESNext",
+ "moduleResolution": "Node",
+ "module": "Preserve",
+ "allowImportingTsExtensions": true,
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "skipLibCheck": true,
+ "skipDefaultLibCheck": true,
+ "noUncheckedIndexedAccess": true,
+ "removeComments": true,
+ "allowJs": true,
+ "checkJs": false,
+ "strict": true,
+ "alwaysStrict": true,
+ "noEmit": true,
+ "declaration": false,
+ "jsx": "react-jsx",
+ "jsxImportSource": "commandkit",
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["src", "commandkit.config.mjs", "commandkit-env.d.ts"],
+ "exclude": ["dist", "node_modules", ".commandkit"]
+}
diff --git a/examples/without-cli/package.json b/examples/without-cli/package.json
new file mode 100644
index 00000000..6d556f8d
--- /dev/null
+++ b/examples/without-cli/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "commandkit-without-cli",
+ "description": "A CommandKit project without using the CLI",
+ "version": "0.1.0",
+ "type": "module",
+ "private": true,
+ "main": "./src/index.js",
+ "scripts": {
+ "start": "cross-env COMMANDKIT_IS_CLI=true node .",
+ "format": "prettier --write \"src/**/*.{js,ts}\""
+ },
+ "dependencies": {
+ "commandkit": "^1.2.0-rc.12",
+ "discord.js": "^14.23.2"
+ },
+ "devDependencies": {
+ "@types/node": "^24.3.3",
+ "cross-env": "^10.0.0",
+ "prettier": "^3.6.2",
+ "typescript": "^5.9.2"
+ }
+}
diff --git a/examples/without-cli/src/app.js b/examples/without-cli/src/app.js
new file mode 100644
index 00000000..ed8d0d48
--- /dev/null
+++ b/examples/without-cli/src/app.js
@@ -0,0 +1,7 @@
+import { Client } from 'discord.js';
+
+const client = new Client({
+ intents: ['Guilds', 'GuildMembers', 'GuildMessages', 'MessageContent'],
+});
+
+export default client;
diff --git a/examples/without-cli/src/app/commands/ping.js b/examples/without-cli/src/app/commands/ping.js
new file mode 100644
index 00000000..201df59d
--- /dev/null
+++ b/examples/without-cli/src/app/commands/ping.js
@@ -0,0 +1,27 @@
+/**
+ * @type {import('commandkit').CommandData}
+ */
+export const command = {
+ name: 'ping',
+ description: "Ping the bot to check if it's online.",
+};
+
+/**
+ * @param {import('commandkit').ChatInputCommandContext} ctx
+ */
+export const chatInput = async (ctx) => {
+ const latency = (ctx.client.ws.ping ?? -1).toString();
+ const response = `Pong! Latency: ${latency}ms`;
+
+ await ctx.interaction.reply(response);
+};
+
+/**
+ * @param {import('commandkit').MessageCommandContext} ctx
+ */
+export const message = async (ctx) => {
+ const latency = (ctx.client.ws.ping ?? -1).toString();
+ const response = `Pong! Latency: ${latency}ms`;
+
+ await ctx.message.reply(response);
+};
diff --git a/examples/without-cli/src/app/events/clientReady/log.js b/examples/without-cli/src/app/events/clientReady/log.js
new file mode 100644
index 00000000..abb2fe51
--- /dev/null
+++ b/examples/without-cli/src/app/events/clientReady/log.js
@@ -0,0 +1,10 @@
+import { Logger } from 'commandkit/logger';
+
+/**
+ * @type {import('commandkit').EventHandler<'clientReady'>}
+ */
+const handler = async (client) => {
+ Logger.info(`Logged in as ${client.user.username}!`);
+};
+
+export default handler;
diff --git a/examples/without-cli/src/index.js b/examples/without-cli/src/index.js
new file mode 100644
index 00000000..5e5e73cd
--- /dev/null
+++ b/examples/without-cli/src/index.js
@@ -0,0 +1,21 @@
+async function bootstrap() {
+ // load .env
+ process.loadEnvFile();
+
+ // start commandkit
+ const { commandkit } = await import('commandkit');
+ const { Client } = await import('discord.js');
+ const app = await import('./app.js').then((m) => m.default ?? m);
+
+ if (!app || !(app instanceof Client)) {
+ throw new Error('The app file must default export the discord.js client instance');
+ }
+
+ commandkit.setClient(app);
+
+ await commandkit.start();
+}
+
+await bootstrap().catch((e) => {
+ console.error('Failed to bootstrap CommandKit application:\n', e.stack);
+});
diff --git a/packages/create-commandkit/README.md b/packages/create-commandkit/README.md
index 707770a3..8ce74229 100644
--- a/packages/create-commandkit/README.md
+++ b/packages/create-commandkit/README.md
@@ -14,6 +14,9 @@ create-commandkit is a CLI utility to quickly instantiate a Discord bot with Com
- Interactive, beautiful command-line interface 🖥️
- Supports CommonJS and ES Modules 📦
+- Dynamic template system with examples from GitHub 🚀
+- Support for all major package managers (npm, pnpm, yarn, bun, deno) 📦
+- TypeScript and JavaScript support 🔧
## Documentation
@@ -21,12 +24,75 @@ You can find the full documentation [here](https://commandkit.dev).
## Usage
-Run the following command in your terminal:
+### Basic Usage
```sh
npx create-commandkit@latest
```
+### With Project Name
+
+```sh
+npx create-commandkit@latest my-bot
+```
+
+### Using Examples
+
+```sh
+# Use a curated example
+npx create-commandkit@latest --example with-database
+
+# Use a custom GitHub repository
+npx create-commandkit@latest --example "https://github.com/user/repo"
+
+# Use a specific path within a repository
+npx create-commandkit@latest --example "https://github.com/user/repo" --example-path "examples/bot"
+```
+
+### CLI Options
+
+- `-h, --help` - Show all available options
+- `-V, --version` - Output the version number
+- `-e, --example ` - An example to bootstrap the app with
+- `--example-path ` - Specify the path to the example separately
+- `--use-npm` - Use npm as package manager
+- `--use-pnpm` - Use pnpm as package manager
+- `--use-yarn` - Use yarn as package manager
+- `--use-bun` - Use bun as package manager
+- `--use-deno` - Use deno as package manager
+- `--skip-install` - Skip installing packages
+- `--no-git` - Skip git initialization
+- `--yes` - Use defaults for all options
+- `--list-examples` - List all available examples from the official repository
+
+### Available Examples
+
+
+- `basic-js` - [examples/basic-js](https://github.com/underctrl-io/commandkit/tree/main/examples/basic-js)
+- `basic-ts` - [examples/basic-ts](https://github.com/underctrl-io/commandkit/tree/main/examples/basic-ts)
+- `deno-ts` - [examples/deno-ts](https://github.com/underctrl-io/commandkit/tree/main/examples/deno-ts)
+- `without-cli` - [examples/without-cli](https://github.com/underctrl-io/commandkit/tree/main/examples/without-cli)
+
+
+### Examples
+
+```sh
+# Create a basic TypeScript bot, skip installation
+npx create-commandkit@latest --example basic-ts --skip-install
+
+# Create a bot with all defaults (no prompts)
+npx create-commandkit@latest --yes
+
+# Create a bot from custom repository
+npx create-commandkit@latest --example "https://github.com/username/my-commandkit-template"
+
+# Create a bot with pnpm
+npx create-commandkit@latest --use-pnpm
+
+# List all available examples
+npx create-commandkit@latest --list-examples
+```
+
## Support and Suggestions
Submit any queries or suggestions in our [Discord community](https://ctrl.lol/discord).
\ No newline at end of file
diff --git a/packages/create-commandkit/package.json b/packages/create-commandkit/package.json
index 66fbd2da..422b7d3e 100644
--- a/packages/create-commandkit/package.json
+++ b/packages/create-commandkit/package.json
@@ -18,8 +18,7 @@
"commands"
],
"files": [
- "dist",
- "templates"
+ "dist"
],
"repository": {
"type": "git",
@@ -30,20 +29,25 @@
"scripts": {
"check-types": "tsc --noEmit",
"dev": "tsc --watch",
- "build": "tsc"
+ "build": "tsc && tsx scripts/sync-available-examples.ts"
},
"dependencies": {
"@clack/prompts": "^0.11.0",
+ "commander": "^14.0.1",
"fs-extra": "^11.1.1",
"gradient-string": "^3.0.0",
"ora": "^8.0.1",
- "picocolors": "^1.1.1"
+ "picocolors": "^1.1.1",
+ "tiged": "^2.12.7",
+ "validate-npm-package-name": "^6.0.2"
},
"devDependencies": {
"@types/fs-extra": "^11.0.4",
"@types/gradient-string": "^1.1.5",
"@types/node": "^22.0.0",
+ "@types/validate-npm-package-name": "^4.0.2",
"tsconfig": "workspace:*",
+ "tsx": "^4.20.6",
"typescript": "catalog:build"
}
}
diff --git a/packages/create-commandkit/scripts/sync-available-examples.ts b/packages/create-commandkit/scripts/sync-available-examples.ts
new file mode 100644
index 00000000..cc6338c5
--- /dev/null
+++ b/packages/create-commandkit/scripts/sync-available-examples.ts
@@ -0,0 +1,34 @@
+import path from 'node:path';
+import fs from 'node:fs';
+
+const BEGIN_MARKER = '';
+const END_MARKER = '';
+
+const README_PATH = path.join(import.meta.dirname, '..', 'README.md');
+const README_CONTENT = fs.readFileSync(README_PATH, 'utf8');
+
+function insertBetween(content: string) {
+ const availableExamples = fs.readdirSync(
+ path.join(import.meta.dirname, '..', '..', '..', 'examples'),
+ );
+
+ const examples = availableExamples
+ .map(
+ (example) =>
+ `- \`${example}\` - [examples/${example}](https://github.com/underctrl-io/commandkit/tree/main/examples/${example})`,
+ )
+ .join('\n');
+
+ const between = `${BEGIN_MARKER}\n${examples}\n${END_MARKER}`;
+ const newContent = [
+ content.split(BEGIN_MARKER)[0],
+ between,
+ content.split(END_MARKER)[1],
+ ].join('');
+
+ return newContent;
+}
+
+const newContent = insertBetween(README_CONTENT);
+
+fs.writeFileSync(README_PATH, newContent);
diff --git a/packages/create-commandkit/src/cli.ts b/packages/create-commandkit/src/cli.ts
new file mode 100644
index 00000000..7461adbf
--- /dev/null
+++ b/packages/create-commandkit/src/cli.ts
@@ -0,0 +1,57 @@
+import { Command } from 'commander';
+import type { CLIOptions } from './types.js';
+
+export function parseCLI(): CLIOptions {
+ const program = new Command();
+
+ program
+ .name('create-commandkit')
+ .description('Effortlessly create a CommandKit project')
+ .version(process.env.npm_package_version || '1.0.0')
+ .argument('[project-directory]', 'Project directory name')
+ .option('-h, --help', 'Show all available options')
+ .option(
+ '-e, --example ',
+ 'An example to bootstrap the app with',
+ )
+ .option(
+ '--example-path ',
+ 'Specify the path to the example separately',
+ )
+ .option('--use-npm', 'Explicitly tell the CLI to bootstrap using npm')
+ .option('--use-pnpm', 'Explicitly tell the CLI to bootstrap using pnpm')
+ .option('--use-yarn', 'Explicitly tell the CLI to bootstrap using yarn')
+ .option('--use-bun', 'Explicitly tell the CLI to bootstrap using bun')
+ .option('--use-deno', 'Explicitly tell the CLI to bootstrap using deno')
+ .option(
+ '--skip-install',
+ 'Explicitly tell the CLI to skip installing packages',
+ )
+ .option('--no-git', 'Explicitly tell the CLI to disable git initialization')
+ .option('--yes', 'Use previous preferences or defaults for all options')
+ .option(
+ '--list-examples',
+ 'List all available examples from the official repository',
+ );
+
+ program.parse();
+
+ const options = program.opts();
+ const args = program.args;
+
+ return {
+ help: options.help,
+ example: options.example,
+ examplePath: options.examplePath,
+ useNpm: options.useNpm,
+ usePnpm: options.usePnpm,
+ useYarn: options.useYarn,
+ useBun: options.useBun,
+ useDeno: options.useDeno,
+ skipInstall: options.skipInstall,
+ noGit: options.noGit,
+ yes: options.yes,
+ listExamples: options.listExamples,
+ projectDirectory: args[0],
+ };
+}
diff --git a/packages/create-commandkit/src/functions/copyTemplates.ts b/packages/create-commandkit/src/functions/copyTemplates.ts
deleted file mode 100644
index 5653b85e..00000000
--- a/packages/create-commandkit/src/functions/copyTemplates.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import fs from 'fs-extra';
-import path from 'node:path';
-import type { Language } from '../types';
-
-const templates = {
- js: path.join(import.meta.dirname, '..', '..', 'templates', 'JavaScript'),
- ts: path.join(import.meta.dirname, '..', '..', 'templates', 'TypeScript'),
-};
-
-const gitignore = `
-# dependencies
-node_modules
-
-# build output
-build
-out
-dist
-
-# commandkit
-.commandkit
-dist
-compiled-commandkit.config.mjs
-
-# env
-**/*.env*
-!**/*.env.example*
-
-# logging
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-.pnpm-debug.log*
-
-# yarn v2+
-.yarn/cache
-.yarn/unplugged
-.yarn/build-state.yml
-.yarn/install-state.gz
-.pnp.*
-
-# other
-**/*.DS_Store
-`;
-
-export async function copyTemplates({
- dir,
- lang,
-}: {
- lang: Language;
- dir: string;
-}) {
- await fs.copy(templates[lang], dir);
- await fs.writeFile(path.join(dir, '.gitignore'), gitignore);
-}
diff --git a/packages/create-commandkit/src/functions/fetchExample.ts b/packages/create-commandkit/src/functions/fetchExample.ts
new file mode 100644
index 00000000..801e78b3
--- /dev/null
+++ b/packages/create-commandkit/src/functions/fetchExample.ts
@@ -0,0 +1,90 @@
+import fs from 'fs-extra';
+import path from 'node:path';
+// @ts-ignore
+import tiged from 'tiged';
+import { validateExampleName } from './validate.js';
+
+export interface FetchExampleOptions {
+ example: string;
+ examplePath?: string;
+ targetDir: string;
+}
+
+export async function fetchExample({
+ example,
+ examplePath,
+ targetDir,
+}: FetchExampleOptions): Promise {
+ const validation = validateExampleName(example);
+ if (!validation.valid) {
+ throw new Error(validation.error);
+ }
+
+ let sourceUrl: string;
+
+ // Check if it's a GitHub URL
+ if (example.startsWith('http://') || example.startsWith('https://')) {
+ sourceUrl = example;
+ } else {
+ // Construct URL for curated examples
+ sourceUrl = `underctrl-io/commandkit/examples/${example}`;
+ }
+
+ // Create temporary directory for download
+ const tempDir = path.join(targetDir, '.temp-example');
+
+ try {
+ // Download the example
+ const emitter = tiged(sourceUrl, {
+ mode: 'tar',
+ disableCache: true,
+ });
+
+ await emitter.clone(tempDir);
+
+ // If examplePath is specified, navigate to that subdirectory
+ const sourceDir = examplePath ? path.join(tempDir, examplePath) : tempDir;
+
+ if (examplePath && !fs.existsSync(sourceDir)) {
+ throw new Error(
+ `Example path '${examplePath}' not found in the repository`,
+ );
+ }
+
+ // Copy contents to target directory
+ const contents = fs.readdirSync(sourceDir);
+
+ for (const item of contents) {
+ const srcPath = path.join(sourceDir, item);
+ const destPath = path.join(targetDir, item);
+
+ if (fs.statSync(srcPath).isDirectory()) {
+ await fs.copy(srcPath, destPath);
+ } else {
+ await fs.copy(srcPath, destPath);
+ }
+ }
+
+ // Clean up temporary directory
+ await fs.remove(tempDir);
+ } catch (error) {
+ // Clean up on error
+ if (fs.existsSync(tempDir)) {
+ await fs.remove(tempDir);
+ }
+
+ if (error instanceof Error) {
+ if (
+ error.message.includes('not found') ||
+ error.message.includes('404')
+ ) {
+ throw new Error(
+ `Example '${example}' not found. Available examples: basic-ts, basic-js, deno-ts, without-cli`,
+ );
+ }
+ throw new Error(`Failed to fetch example: ${error.message}`);
+ }
+
+ throw new Error('Failed to fetch example due to an unknown error');
+ }
+}
diff --git a/packages/create-commandkit/src/functions/installDeps.ts b/packages/create-commandkit/src/functions/installDeps.ts
deleted file mode 100644
index 047d3393..00000000
--- a/packages/create-commandkit/src/functions/installDeps.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { type IOType, execSync } from 'node:child_process';
-import ora from 'ora';
-
-import type { Language, PackageManager } from '../types';
-import { getCommandKitVersion } from '../utils.js';
-
-const getBaseDependencies = () => [
- `commandkit${getCommandKitVersion()}`,
- 'discord.js',
-];
-
-const getDependencies = () => ({
- js: {
- dependencies: getBaseDependencies(),
- devDependencies: ['@types/node', 'typescript', 'prettier'],
- },
- ts: {
- dependencies: getBaseDependencies(),
- devDependencies: ['@types/node', 'typescript', 'prettier'],
- },
-});
-
-interface InstallDepsProps {
- manager: PackageManager;
- dir: string;
- lang: Language;
- 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,
- lang,
- stdio = 'inherit',
-}: InstallDepsProps) {
- const spinner = ora('Installing dependencies...').start();
-
- try {
- const dependencies = getDependencies();
-
- if (dependencies[lang].dependencies.length) {
- const depsCommand = getInstallCommand(
- manager,
- dependencies[lang].dependencies,
- );
-
- execSync(depsCommand, { cwd: dir, stdio });
- }
-
- if (dependencies[lang].devDependencies.length) {
- const devDepsCommand = getInstallCommand(
- manager,
- dependencies[lang].devDependencies,
- true,
- );
-
- execSync(devDepsCommand, { cwd: dir, stdio });
- }
-
- spinner.succeed('Dependencies installed successfully!');
- } catch (error) {
- spinner.fail('Failed to install dependencies');
- throw error;
- }
-}
diff --git a/packages/create-commandkit/src/functions/setup.ts b/packages/create-commandkit/src/functions/setup.ts
deleted file mode 100644
index 6db00a8d..00000000
--- a/packages/create-commandkit/src/functions/setup.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { type IOType, execSync } from 'child_process';
-import fs from 'fs-extra';
-import path from 'node:path';
-
-import type { PackageManager } from '../types';
-import { commands } from '../utils.js';
-
-interface SetupProps {
- manager: PackageManager;
- token: string;
- dir: string;
- stdio?: IOType;
-}
-
-export async function setup({
- manager,
- token,
- dir,
- stdio = 'pipe',
-}: SetupProps) {
- await fs.emptyDir(dir);
-
- if (manager === 'yarn') {
- execSync(commands.init.yarn, { cwd: dir, stdio });
- }
-
- if (manager === 'deno') {
- const denoJsonPath = path.join(dir, 'deno.json');
- const denoJson = {
- compilerOptions: {
- jsx: 'react-jsx',
- jsxImportSource: 'commandkit',
- },
- nodeModulesDir: 'auto',
- lock: true,
- lint: {
- include: ['src/'],
- exclude: ['node_modules/', 'dist/', '.commandkit/'],
- },
- fmt: {
- useTabs: false,
- lineWidth: 120,
- indentWidth: 2,
- endOfLine: 'lf',
- semiColons: true,
- singleQuote: true,
- include: ['src/'],
- exclude: ['node_modules/', 'dist/', '.commandkit/'],
- },
- };
-
- await fs.writeJSON(denoJsonPath, denoJson, { spaces: 2, EOL: '\n' });
- }
-
- const prettierrc = path.join(dir, '.prettierrc');
-
- const prettierConfig = {
- printWidth: 120,
- tabWidth: 2,
- useTabs: false,
- semi: true,
- endOfLine: 'lf',
- singleQuote: true,
- trailingComma: 'all',
- arrowParens: 'always',
- };
-
- await fs.writeJSON(prettierrc, prettierConfig, { spaces: 2, EOL: '\n' });
-
- const packageJsonPath = path.join(dir, 'package.json');
-
- 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',
- format: 'prettier --write "src/**/*.{js,ts}"',
- },
- devDependencies: {},
- dependencies: {},
- };
-
- await fs.writeJSON(packageJsonPath, packageJson, { spaces: 2 });
-
- await fs.writeFile(`${dir}/.env`, `DISCORD_TOKEN="${token || ''}"`);
-}
diff --git a/packages/create-commandkit/src/functions/validate.ts b/packages/create-commandkit/src/functions/validate.ts
new file mode 100644
index 00000000..84fa812e
--- /dev/null
+++ b/packages/create-commandkit/src/functions/validate.ts
@@ -0,0 +1,91 @@
+import fs from 'fs-extra';
+import path from 'node:path';
+import validateNpmPackageName from 'validate-npm-package-name';
+
+export function validateProjectName(name: string): {
+ valid: boolean;
+ error?: string;
+} {
+ const result = validateNpmPackageName(name);
+
+ if (!result.validForNewPackages) {
+ const errors = result.errors || [];
+ const warnings = result.warnings || [];
+ const allIssues = [...errors, ...warnings];
+
+ return {
+ valid: false,
+ error: allIssues.length > 0 ? allIssues[0] : 'Invalid project name',
+ };
+ }
+
+ return { valid: true };
+}
+
+export function validateDirectory(dir: string): {
+ valid: boolean;
+ error?: string;
+} {
+ const resolvedDir = path.resolve(process.cwd(), dir);
+
+ try {
+ const exists = fs.existsSync(resolvedDir);
+
+ if (!exists) {
+ return { valid: true };
+ }
+
+ const contents = fs.readdirSync(resolvedDir);
+ const isEmpty = contents.length === 0;
+
+ if (!isEmpty) {
+ return {
+ valid: false,
+ error: 'Directory is not empty!',
+ };
+ }
+
+ return { valid: true };
+ } catch (error) {
+ return {
+ valid: false,
+ error: 'Unable to access directory',
+ };
+ }
+}
+
+export function validateExampleName(example: string): {
+ valid: boolean;
+ error?: string;
+} {
+ // Check if it's a GitHub URL
+ if (example.startsWith('http://') || example.startsWith('https://')) {
+ try {
+ const url = new URL(example);
+ if (url.hostname === 'github.com' || url.hostname === 'www.github.com') {
+ return { valid: true };
+ }
+ return {
+ valid: false,
+ error: 'Only GitHub URLs are supported',
+ };
+ } catch {
+ return {
+ valid: false,
+ error: 'Invalid URL format',
+ };
+ }
+ }
+
+ // Check if it's a valid example name (alphanumeric, hyphens, underscores)
+ const exampleNameRegex = /^[a-zA-Z0-9-_]+$/;
+ if (!exampleNameRegex.test(example)) {
+ return {
+ valid: false,
+ error:
+ 'Example name can only contain letters, numbers, hyphens, and underscores',
+ };
+ }
+
+ return { valid: true };
+}
diff --git a/packages/create-commandkit/src/index.ts b/packages/create-commandkit/src/index.ts
index 0dfe3e7f..c2a818cd 100755
--- a/packages/create-commandkit/src/index.ts
+++ b/packages/create-commandkit/src/index.ts
@@ -1,125 +1,266 @@
#!/usr/bin/env node
-console.clear();
-import { confirm, intro, outro, password, select, text } from '@clack/prompts';
+import { confirm, intro, outro, password, text } from '@clack/prompts';
import fs from 'fs-extra';
import gradient from 'gradient-string';
import { execSync } from 'node:child_process';
-import path from 'node:path';
+import path, { join } from 'node:path';
import colors from 'picocolors';
-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 { detectPackageManager, textColors } from './utils.js';
+import { parseCLI } from './cli.js';
+import { fetchExample } from './functions/fetchExample.js';
+import {
+ validateDirectory,
+ validateProjectName,
+} from './functions/validate.js';
+import {
+ fetchAvailableExamples,
+ getDefaultExample,
+ getInstallCommand,
+ isOfficialExample,
+ resolvePackageManager,
+ textColors,
+} from './utils.js';
+import { readFile } from 'node:fs/promises';
-const commandkitGradient = gradient(textColors.commandkit)('CommandKit');
+async function main() {
+ const cliOptions = parseCLI();
-intro(`Welcome to ${commandkitGradient}!`);
+ // Handle help and version flags
+ if (cliOptions.help) {
+ console.log(`
+Usage: create-commandkit [options] [project-directory]
-const dir = path.resolve(
- process.cwd(),
- (await text({
- message: 'Enter a project directory:',
- placeholder: 'Leave blank for current directory',
- defaultValue: '.',
- validate: (value) => {
- value = path.resolve(process.cwd(), value);
- let isEmpty;
+Options:
+ -h, --help Show all available options
+ -V, --version Output the version number
+ -e, --example An example to bootstrap the app with
+ --example-path Specify the path to the example separately
+ --use-npm Explicitly tell the CLI to bootstrap using npm
+ --use-pnpm Explicitly tell the CLI to bootstrap using pnpm
+ --use-yarn Explicitly tell the CLI to bootstrap using yarn
+ --use-bun Explicitly tell the CLI to bootstrap using bun
+ --use-deno Explicitly tell the CLI to bootstrap using deno
+ --skip-install Explicitly tell the CLI to skip installing packages
+ --no-git Explicitly tell the CLI to disable git initialization
+ --yes Use previous preferences or defaults for all options
+ --list-examples List all available examples from the official repository
- try {
- const contents = fs.readdirSync(value);
- isEmpty = contents.length === 0;
- } catch {
- isEmpty = true;
+Examples:
+ npx create-commandkit@latest
+ npx create-commandkit@latest my-bot
+ npx create-commandkit@latest --example basic-ts
+ npx create-commandkit@latest --example "https://github.com/user/repo" --example-path "examples/bot"
+ npx create-commandkit@latest --use-pnpm --yes
+ npx create-commandkit@latest --list-examples
+`);
+ process.exit(0);
+ }
+
+ // Handle list examples flag
+ if (cliOptions.listExamples) {
+ console.log(colors.cyan('Fetching available examples...'));
+
+ try {
+ const examples = await fetchAvailableExamples();
+
+ console.log(colors.green('\nAvailable examples:'));
+ console.log('');
+
+ for (const example of examples) {
+ console.log(` ${colors.magenta(example)}`);
}
- return isEmpty ? undefined : 'Directory is not empty!';
- },
- })) as string,
-);
-
-const manager = (await select({
- message: 'Select a package manager:',
- 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;
-
-const lang = (await select({
- message: 'Select the language to use:',
- initialValue: 'ts' as Language,
- options: [
- { label: 'TypeScript', value: 'ts' },
- { label: 'JavaScript', value: 'js' },
- ],
-})) as Language;
-
-const token = (await password({
- message: 'Enter your Discord bot token (stored in .env, optional):',
- mask: colors.gray('*'),
-})) as string;
-
-const gitInit = await confirm({
- message: 'Initialize a git repository?',
- initialValue: true,
-});
+ console.log('');
+ console.log(
+ colors.gray(
+ 'Usage: npx create-commandkit@latest --example ',
+ ),
+ );
+ console.log(
+ colors.gray('Example: npx create-commandkit@latest --example basic-ts'),
+ );
+ } catch (error) {
+ console.error(
+ colors.red(
+ 'Failed to fetch examples list. Please check your internet connection.',
+ ),
+ );
+ process.exit(1);
+ }
-outro(colors.cyan('Setup complete.'));
+ process.exit(0);
+ }
-await setup({
- manager,
- dir,
- token,
-});
+ const commandkitGradient = gradient(textColors.commandkit)('CommandKit');
+ intro(`Welcome to ${commandkitGradient}!`);
+
+ // Determine project directory
+ let projectDir: string;
+ if (cliOptions.projectDirectory) {
+ projectDir = path.resolve(process.cwd(), cliOptions.projectDirectory);
+
+ // Validate project name if provided
+ const projectName = path.basename(projectDir);
+ const nameValidation = validateProjectName(projectName);
+ if (!nameValidation.valid) {
+ console.error(colors.red(`Error: ${nameValidation.error}`));
+ process.exit(1);
+ }
+ } else if (cliOptions.yes) {
+ projectDir = path.resolve(process.cwd(), 'commandkit-project');
+ } else {
+ projectDir = path.resolve(
+ process.cwd(),
+ (await text({
+ message: 'Enter a project directory:',
+ placeholder: 'Leave blank for current directory',
+ defaultValue: '.',
+ validate: (value) => {
+ value = path.resolve(process.cwd(), value);
+ const validation = validateDirectory(value);
+ return validation.valid ? undefined : validation.error;
+ },
+ })) as string,
+ );
+ }
+
+ // Validate directory
+ const dirValidation = validateDirectory(projectDir);
+ if (!dirValidation.valid) {
+ console.error(colors.red(`Error: ${dirValidation.error}`));
+ process.exit(1);
+ }
+
+ // Determine package manager
+ const manager = resolvePackageManager(cliOptions);
+
+ // Get Discord token
+ let token: string;
+ if (cliOptions.yes) {
+ token = '';
+ } else {
+ token = (await password({
+ message: 'Enter your Discord bot token (stored in .env, optional):',
+ mask: colors.gray('*'),
+ })) as string;
+ }
-await copyTemplates({ dir, lang });
+ // Determine git initialization
+ const gitInit = cliOptions.noGit
+ ? false
+ : cliOptions.yes
+ ? true
+ : await confirm({
+ message: 'Initialize a git repository?',
+ initialValue: true,
+ });
-if (gitInit) {
+ outro(colors.cyan('Setup complete.'));
+
+ // Fetch example from GitHub
try {
- execSync('git init', { cwd: dir, stdio: 'pipe' });
+ const example = cliOptions.example || getDefaultExample(cliOptions);
+ await fetchExample({
+ example,
+ examplePath: cliOptions.examplePath,
+ targetDir: projectDir,
+ });
+ // Create .env file with token
+ await fs.writeFile(`${projectDir}/.env`, `DISCORD_TOKEN="${token || ''}"`);
+
+ // Install packages for official examples
+ if (isOfficialExample(example) && !cliOptions.skipInstall) {
+ console.log(
+ colors.cyan('Installing dependencies for official example...'),
+ );
+
+ try {
+ const tagMap = [
+ ['-dev.', 'dev'],
+ ['-rc.', 'next'],
+ ];
+
+ const tag = await readFile(
+ join(import.meta.dirname, '..', 'package.json'),
+ 'utf-8',
+ )
+ .then((data) => {
+ const version = JSON.parse(data).version;
+
+ return (
+ tagMap.find(([suffix]) => version.includes(suffix))?.[1] ||
+ 'latest'
+ );
+ })
+ .catch(() => 'latest');
+
+ // Install dependencies
+ const depsCommand = getInstallCommand(manager, [
+ `commandkit@${tag}`,
+ 'discord.js',
+ ]);
+ execSync(depsCommand, { cwd: projectDir, stdio: 'pipe' });
+
+ // Install dev dependencies
+ const devDepsCommand = getInstallCommand(
+ manager,
+ ['typescript', '@types/node'],
+ true,
+ );
+ execSync(devDepsCommand, { cwd: projectDir, stdio: 'pipe' });
+
+ console.log(colors.green('Dependencies installed successfully!'));
+ } catch (error) {
+ console.log(
+ colors.yellow(
+ 'Warning: Failed to install dependencies. You may need to install them manually.',
+ ),
+ );
+ }
+ }
} catch (error) {
- console.log(
- colors.yellow(
- 'Warning: Git initialization failed. Make sure Git is installed on your system.',
+ console.error(
+ colors.red(
+ `Error fetching example: ${error instanceof Error ? error.message : 'Unknown error'}`,
),
);
+ process.exit(1);
}
-}
-
-installDeps({
- dir,
- manager,
- lang,
- 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;
+ // Initialize git if requested
+ if (gitInit) {
+ try {
+ execSync('git init', { cwd: projectDir, stdio: 'pipe' });
+ } catch (error) {
+ console.log(
+ colors.yellow(
+ 'Warning: Git initialization failed. Make sure Git is installed on your system.',
+ ),
+ );
+ }
}
-};
-console.log(
- `${gradient(textColors.commandkit)('Thank you for choosing CommandKit!')}
+ 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;
+ }
+ };
-To start your bot, use the following commands:
+ console.log(
+ `${gradient(textColors.commandkit)('Thank you for choosing CommandKit!')}
+
+To start your bot${projectDir !== '.' ? `, ${colors.magenta(`cd ${projectDir}`)}` : ''}${projectDir !== '.' ? ' and' : ''} use the following commands:
${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
@@ -130,4 +271,14 @@ To start your bot, use the following commands:
• Discord community: ${colors.blue('https://ctrl.lol/discord')}
Happy coding! 🚀`,
-);
+ );
+}
+
+main().catch((error) => {
+ console.error(
+ colors.red(
+ `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,
+ ),
+ );
+ process.exit(1);
+});
diff --git a/packages/create-commandkit/src/types.ts b/packages/create-commandkit/src/types.ts
index 4beaa26d..98405296 100644
--- a/packages/create-commandkit/src/types.ts
+++ b/packages/create-commandkit/src/types.ts
@@ -1,2 +1,17 @@
-export type Language = 'js' | 'ts';
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';
+
+export interface CLIOptions {
+ help?: boolean;
+ example?: string;
+ examplePath?: string;
+ useNpm?: boolean;
+ usePnpm?: boolean;
+ useYarn?: boolean;
+ useBun?: boolean;
+ useDeno?: boolean;
+ skipInstall?: boolean;
+ noGit?: boolean;
+ yes?: boolean;
+ listExamples?: boolean;
+ projectDirectory?: string;
+}
diff --git a/packages/create-commandkit/src/utils.ts b/packages/create-commandkit/src/utils.ts
index f7186739..f897cb47 100644
--- a/packages/create-commandkit/src/utils.ts
+++ b/packages/create-commandkit/src/utils.ts
@@ -1,7 +1,4 @@
-import fs from 'fs-extra';
-import path from 'node:path';
-import { fileURLToPath } from 'node:url';
-import type { PackageManager } from './types';
+import type { CLIOptions, PackageManager } from './types';
export const textColors = {
commandkit: ['#fdba74', '#e4a5a2', '#c288de', '#b27bf9'],
@@ -9,12 +6,6 @@ export const textColors = {
ts: ['#2480c5', '#2480c5'],
};
-export const commands = {
- init: {
- yarn: 'yarn set version stable; yarn config set nodeLinker node-modules;',
- },
-};
-
export function detectPackageManager(): PackageManager {
const packageManager = process.env.npm_config_user_agent;
@@ -27,26 +18,124 @@ export function detectPackageManager(): PackageManager {
return 'npm';
}
-export function getCommandKitVersion(): string {
+export function getPackageManagerFromCLI(options: {
+ useNpm?: boolean;
+ usePnpm?: boolean;
+ useYarn?: boolean;
+ useBun?: boolean;
+ useDeno?: boolean;
+}): PackageManager | null {
+ if (options.useNpm) return 'npm';
+ if (options.usePnpm) return 'pnpm';
+ if (options.useYarn) return 'yarn';
+ if (options.useBun) return 'bun';
+ if (options.useDeno) return 'deno';
+
+ return null;
+}
+
+export function resolvePackageManager(cliOptions: {
+ useNpm?: boolean;
+ usePnpm?: boolean;
+ useYarn?: boolean;
+ useBun?: boolean;
+ useDeno?: boolean;
+}): PackageManager {
+ const cliManager = getPackageManagerFromCLI(cliOptions);
+ return cliManager || detectPackageManager();
+}
+
+export function getDefaultExample(cliOptions: CLIOptions): string {
+ if (cliOptions.useDeno) {
+ return 'deno-ts';
+ }
+
+ return 'basic-ts';
+}
+
+export function isOfficialExample(example: string): boolean {
+ // Check if it's a GitHub URL pointing to underctrl-io/commandkit
+ if (example.startsWith('http://') || example.startsWith('https://')) {
+ try {
+ const url = new URL(example);
+ return (
+ url.hostname === 'github.com' &&
+ url.pathname.startsWith('/underctrl-io/commandkit')
+ );
+ } catch {
+ return false;
+ }
+ }
+
+ // If it's just an example name, it's official
+ return true;
+}
+
+export function getInstallCommand(
+ manager: PackageManager,
+ deps: string[],
+ dev = false,
+): string {
+ 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 async function fetchAvailableExamples(): Promise {
+ let controller: AbortController | null = null;
+ let timeoutId: NodeJS.Timeout | null = null;
+
try {
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = path.dirname(__filename);
-
- const packageJsonPath = path.resolve(__dirname, '..', 'package.json');
- const packageJson = fs.readJsonSync(packageJsonPath);
- const currentVersion = packageJson.version as string;
-
- if (currentVersion.includes('dev.')) {
- return '@dev';
- } else if (currentVersion.includes('rc.')) {
- return '@next';
- } else {
- return '@latest';
+ controller = new AbortController();
+ timeoutId = setTimeout(() => controller!.abort(), 10000); // 10 second timeout
+
+ const response = await fetch(
+ 'https://api.github.com/repos/underctrl-io/commandkit/contents/examples',
+ {
+ signal: controller.signal,
+ headers: {
+ 'User-Agent': 'create-commandkit',
+ },
+ },
+ );
+
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ timeoutId = null;
}
+
+ if (!response.ok) {
+ throw new Error(`GitHub API error: ${response.status}`);
+ }
+
+ const data = (await response.json()) as Array<{
+ name: string;
+ type: string;
+ }>;
+
+ // Filter for directories only and return their names
+ return data
+ .filter((item) => item.type === 'dir')
+ .map((item) => item.name)
+ .sort();
} catch (error) {
- console.warn(
- 'Could not determine create-commandkit version, defaulting to commandkit@latest',
- );
- return '@latest';
+ // Clean up on error
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ if (controller) {
+ controller.abort();
+ }
+
+ // Fallback to few known examples if API fails
+ return ['basic-ts', 'basic-js', 'deno-ts', 'without-cli'];
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c4f78500..7e5c0e54 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -330,6 +330,9 @@ importers:
'@clack/prompts':
specifier: ^0.11.0
version: 0.11.0
+ commander:
+ specifier: ^14.0.1
+ version: 14.0.1
fs-extra:
specifier: ^11.1.1
version: 11.3.2
@@ -342,6 +345,12 @@ importers:
picocolors:
specifier: ^1.1.1
version: 1.1.1
+ tiged:
+ specifier: ^2.12.7
+ version: 2.12.7
+ validate-npm-package-name:
+ specifier: ^6.0.2
+ version: 6.0.2
devDependencies:
'@types/fs-extra':
specifier: ^11.0.4
@@ -352,9 +361,15 @@ importers:
'@types/node':
specifier: ^22.0.0
version: 22.18.8
+ '@types/validate-npm-package-name':
+ specifier: ^4.0.2
+ version: 4.0.2
tsconfig:
specifier: workspace:*
version: link:../tsconfig
+ tsx:
+ specifier: ^4.20.6
+ version: 4.20.6
typescript:
specifier: catalog:build
version: 5.9.3
@@ -1950,312 +1965,156 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.25.9':
- resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/android-arm64@0.25.10':
resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.25.9':
- resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm@0.25.10':
resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.25.9':
- resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-x64@0.25.10':
resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.25.9':
- resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
'@esbuild/darwin-arm64@0.25.10':
resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.25.9':
- resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.25.10':
resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.9':
- resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/freebsd-arm64@0.25.10':
resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.25.9':
- resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.25.10':
resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.9':
- resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/linux-arm64@0.25.10':
resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.25.9':
- resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm@0.25.10':
resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.25.9':
- resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-ia32@0.25.10':
resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.25.9':
- resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-loong64@0.25.10':
resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.25.9':
- resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-mips64el@0.25.10':
resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.25.9':
- resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-ppc64@0.25.10':
resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.25.9':
- resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.25.10':
resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.9':
- resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-s390x@0.25.10':
resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.25.9':
- resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-x64@0.25.10':
resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.25.9':
- resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
'@esbuild/netbsd-arm64@0.25.10':
resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.25.9':
- resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.25.10':
resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.9':
- resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/openbsd-arm64@0.25.10':
resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.25.9':
- resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.25.10':
resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.9':
- resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
'@esbuild/openharmony-arm64@0.25.10':
resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/openharmony-arm64@0.25.9':
- resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
'@esbuild/sunos-x64@0.25.10':
resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.25.9':
- resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/win32-arm64@0.25.10':
resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.25.9':
- resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-ia32@0.25.10':
resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.25.9':
- resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-x64@0.25.10':
resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.25.9':
- resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
'@eslint-community/eslint-utils@4.9.0':
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2479,8 +2338,8 @@ packages:
cpu: [x64]
os: [win32]
- '@napi-rs/wasm-runtime@1.0.6':
- resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==}
+ '@napi-rs/wasm-runtime@1.0.7':
+ resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -3005,85 +2864,85 @@ packages:
'@radix-ui/rect@1.1.1':
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
- '@rolldown/binding-android-arm64@1.0.0-beta.42':
- resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==}
+ '@rolldown/binding-android-arm64@1.0.0-beta.43':
+ resolution: {integrity: sha512-TP8bcPOb1s6UmY5syhXrDn9k0XkYcw+XaoylTN4cJxf0JOVS2j682I3aTcpfT51hOFGr2bRwNKN9RZ19XxeQbA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@rolldown/binding-darwin-arm64@1.0.0-beta.42':
- resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==}
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.43':
+ resolution: {integrity: sha512-kuVWnZsE4vEjMF/10SbSUyzucIW2zmdsqFghYMqy+fsjXnRHg0luTU6qWF8IqJf4Cbpm9NEZRnjIEPpAbdiSNQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@rolldown/binding-darwin-x64@1.0.0-beta.42':
- resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==}
+ '@rolldown/binding-darwin-x64@1.0.0-beta.43':
+ resolution: {integrity: sha512-u9Ps4sh6lcmJ3vgLtyEg/x4jlhI64U0mM93Ew+tlfFdLDe7yKyA+Fe80cpr2n1mNCeZXrvTSbZluKpXQ0GxLjw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@rolldown/binding-freebsd-x64@1.0.0-beta.42':
- resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==}
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.43':
+ resolution: {integrity: sha512-h9lUtVtXgfbk/tnicMpbFfZ3DJvk5Zn2IvmlC1/e0+nUfwoc/TFqpfrRRqcNBXk/e+xiWMSKv6b0MF8N+Rtvlg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42':
- resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==}
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.43':
+ resolution: {integrity: sha512-IX2C6bA6wM2rX/RvD75ko+ix9yxPKjKGGq7pOhB8wGI4Z4fqX5B1nDHga/qMDmAdCAR1m9ymzxkmqhm/AFYf7A==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42':
- resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==}
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.43':
+ resolution: {integrity: sha512-mcjd57vEj+CEQbZAzUiaxNzNgwwgOpFtZBWcINm8DNscvkXl5b/s622Z1dqGNWSdrZmdjdC6LWMvu8iHM6v9sQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42':
- resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==}
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.43':
+ resolution: {integrity: sha512-Pa8QMwlkrztTo/1mVjZmPIQ44tCSci10TBqxzVBvXVA5CFh5EpiEi99fPSll2dHG2uT4dCOMeC6fIhyDdb0zXA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42':
- resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==}
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.43':
+ resolution: {integrity: sha512-BgynXKMjeaX4AfWLARhOKDetBOOghnSiVRjAHVvhiAaDXgdQN8e65mSmXRiVoVtD3cHXx/cfU8Gw0p0K+qYKVQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.42':
- resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==}
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.43':
+ resolution: {integrity: sha512-VIsoPlOB/tDSAw9CySckBYysoIBqLeps1/umNSYUD8pMtalJyzMTneAVI1HrUdf4ceFmQ5vARoLIXSsPwVFxNg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.42':
- resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==}
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.43':
+ resolution: {integrity: sha512-YDXTxVJG67PqTQMKyjVJSddoPbSWJ4yRz/E3xzTLHqNrTDGY0UuhG8EMr8zsYnfH/0cPFJ3wjQd/hJWHuR6nkA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.42':
- resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==}
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.43':
+ resolution: {integrity: sha512-3M+2DmorXvDuAIGYQ9Z93Oy1G9ETkejLwdXXb1uRTgKN9pMcu7N+KG2zDrJwqyxeeLIFE22AZGtSJm3PJbNu9Q==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42':
- resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==}
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43':
+ resolution: {integrity: sha512-/B1j1pJs33y9ywtslOMxryUPHq8zIGu/OGEc2gyed0slimJ8fX2uR/SaJVhB4+NEgCFIeYDR4CX6jynAkeRuCA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42':
- resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==}
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.43':
+ resolution: {integrity: sha512-29oG1swCz7hNP+CQYrsM4EtylsKwuYzM8ljqbqC5TsQwmKat7P8ouDpImsqg/GZxFSXcPP9ezQm0Q0wQwGM3JA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42':
- resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==}
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.43':
+ resolution: {integrity: sha512-eWBV1Ef3gfGNehxVGCyXs7wLayRIgCmyItuCZwYYXW5bsk4EvR4n2GP5m3ohjnx7wdiY3nLmwQfH2Knb5gbNZw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -3091,8 +2950,8 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
- '@rolldown/pluginutils@1.0.0-beta.42':
- resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==}
+ '@rolldown/pluginutils@1.0.0-beta.43':
+ resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==}
'@rollup/plugin-json@6.1.0':
resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
@@ -4036,6 +3895,9 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+ '@types/validate-npm-package-name@4.0.2':
+ resolution: {integrity: sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==}
+
'@types/ws@8.18.1':
resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
@@ -4232,6 +4094,10 @@ packages:
resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
engines: {node: '>= 10.0.0'}
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
agent-base@7.1.4:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
@@ -4282,6 +4148,10 @@ packages:
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ ansi-colors@4.1.3:
+ resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+ engines: {node: '>=6'}
+
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -4634,6 +4504,10 @@ packages:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
chownr@3.0.0:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
@@ -4716,6 +4590,9 @@ packages:
colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+ colorette@1.2.1:
+ resolution: {integrity: sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==}
+
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -4738,6 +4615,10 @@ packages:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
+ commander@14.0.1:
+ resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==}
+ engines: {node: '>=20'}
+
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -5462,6 +5343,10 @@ packages:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
+ enquirer@2.3.6:
+ resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
+ engines: {node: '>=8.6'}
+
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@@ -5502,11 +5387,6 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.25.9:
- resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
- engines: {node: '>=18'}
- hasBin: true
-
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -5842,6 +5722,10 @@ packages:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -5853,6 +5737,9 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ fuzzysearch@1.0.3:
+ resolution: {integrity: sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg==}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -5934,6 +5821,9 @@ packages:
resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
engines: {node: '>=18'}
+ globalyzer@0.1.0:
+ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
+
globby@10.0.2:
resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==}
engines: {node: '>=8'}
@@ -5946,6 +5836,9 @@ packages:
resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -6136,6 +6029,10 @@ packages:
resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
engines: {node: '>=10.19.0'}
+ https-proxy-agent@5.0.0:
+ resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==}
+ engines: {node: '>= 6'}
+
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
@@ -7104,10 +7001,22 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
minizlib@3.1.0:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'}
@@ -7116,9 +7025,18 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
mlly@1.7.4:
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+ mri@1.1.6:
+ resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==}
+ engines: {node: '>=4'}
+
mrmime@2.0.0:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
@@ -8357,8 +8275,8 @@ packages:
vue-tsc:
optional: true
- rolldown@1.0.0-beta.42:
- resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==}
+ rolldown@1.0.0-beta.43:
+ resolution: {integrity: sha512-6RcqyRx0tY1MlRLnjXPp/849Rl/CPFhzpGGwNPEPjKwqBMqPq/Rbbkxasa8s0x+IkUk46ty4jazb5skZ/Vgdhw==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -8787,6 +8705,10 @@ packages:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+
tar@7.5.1:
resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
engines: {node: '>=18'}
@@ -8831,6 +8753,14 @@ packages:
thunky@1.1.0:
resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
+ tiged@2.12.7:
+ resolution: {integrity: sha512-6TwlABgdshi1h9atXFRx86IhuDANtNqfD1OuWmZKKdqqwWNEJXHLa2hrRiyve9kLwHPb2ADc8RU3mSc4MVBE5A==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+
+ tiny-glob@0.2.8:
+ resolution: {integrity: sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==}
+
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -9217,6 +9147,10 @@ packages:
resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ validate-npm-package-name@6.0.2:
+ resolution: {integrity: sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
value-equal@1.0.1:
resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==}
@@ -9543,6 +9477,9 @@ packages:
yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
@@ -12395,159 +12332,81 @@ snapshots:
'@esbuild/aix-ppc64@0.25.10':
optional: true
- '@esbuild/aix-ppc64@0.25.9':
- optional: true
-
'@esbuild/android-arm64@0.25.10':
optional: true
- '@esbuild/android-arm64@0.25.9':
- optional: true
-
'@esbuild/android-arm@0.25.10':
optional: true
- '@esbuild/android-arm@0.25.9':
- optional: true
-
'@esbuild/android-x64@0.25.10':
optional: true
- '@esbuild/android-x64@0.25.9':
- optional: true
-
'@esbuild/darwin-arm64@0.25.10':
optional: true
- '@esbuild/darwin-arm64@0.25.9':
- optional: true
-
'@esbuild/darwin-x64@0.25.10':
optional: true
- '@esbuild/darwin-x64@0.25.9':
- optional: true
-
'@esbuild/freebsd-arm64@0.25.10':
optional: true
- '@esbuild/freebsd-arm64@0.25.9':
- optional: true
-
'@esbuild/freebsd-x64@0.25.10':
optional: true
- '@esbuild/freebsd-x64@0.25.9':
- optional: true
-
'@esbuild/linux-arm64@0.25.10':
optional: true
- '@esbuild/linux-arm64@0.25.9':
- optional: true
-
'@esbuild/linux-arm@0.25.10':
optional: true
- '@esbuild/linux-arm@0.25.9':
- optional: true
-
'@esbuild/linux-ia32@0.25.10':
optional: true
- '@esbuild/linux-ia32@0.25.9':
- optional: true
-
'@esbuild/linux-loong64@0.25.10':
optional: true
- '@esbuild/linux-loong64@0.25.9':
- optional: true
-
'@esbuild/linux-mips64el@0.25.10':
optional: true
- '@esbuild/linux-mips64el@0.25.9':
- optional: true
-
'@esbuild/linux-ppc64@0.25.10':
optional: true
- '@esbuild/linux-ppc64@0.25.9':
- optional: true
-
'@esbuild/linux-riscv64@0.25.10':
optional: true
- '@esbuild/linux-riscv64@0.25.9':
- optional: true
-
'@esbuild/linux-s390x@0.25.10':
optional: true
- '@esbuild/linux-s390x@0.25.9':
- optional: true
-
'@esbuild/linux-x64@0.25.10':
optional: true
- '@esbuild/linux-x64@0.25.9':
- optional: true
-
'@esbuild/netbsd-arm64@0.25.10':
optional: true
- '@esbuild/netbsd-arm64@0.25.9':
- optional: true
-
'@esbuild/netbsd-x64@0.25.10':
optional: true
- '@esbuild/netbsd-x64@0.25.9':
- optional: true
-
'@esbuild/openbsd-arm64@0.25.10':
optional: true
- '@esbuild/openbsd-arm64@0.25.9':
- optional: true
-
'@esbuild/openbsd-x64@0.25.10':
optional: true
- '@esbuild/openbsd-x64@0.25.9':
- optional: true
-
'@esbuild/openharmony-arm64@0.25.10':
optional: true
- '@esbuild/openharmony-arm64@0.25.9':
- optional: true
-
'@esbuild/sunos-x64@0.25.10':
optional: true
- '@esbuild/sunos-x64@0.25.9':
- optional: true
-
'@esbuild/win32-arm64@0.25.10':
optional: true
- '@esbuild/win32-arm64@0.25.9':
- optional: true
-
'@esbuild/win32-ia32@0.25.10':
optional: true
- '@esbuild/win32-ia32@0.25.9':
- optional: true
-
'@esbuild/win32-x64@0.25.10':
optional: true
- '@esbuild/win32-x64@0.25.9':
- optional: true
-
'@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))':
dependencies:
eslint: 9.37.0(jiti@2.6.1)
@@ -12813,7 +12672,7 @@ snapshots:
'@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3':
optional: true
- '@napi-rs/wasm-runtime@1.0.6':
+ '@napi-rs/wasm-runtime@1.0.7':
dependencies:
'@emnapi/core': 1.5.0
'@emnapi/runtime': 1.5.0
@@ -13342,53 +13201,53 @@ snapshots:
'@radix-ui/rect@1.1.1': {}
- '@rolldown/binding-android-arm64@1.0.0-beta.42':
+ '@rolldown/binding-android-arm64@1.0.0-beta.43':
optional: true
- '@rolldown/binding-darwin-arm64@1.0.0-beta.42':
+ '@rolldown/binding-darwin-arm64@1.0.0-beta.43':
optional: true
- '@rolldown/binding-darwin-x64@1.0.0-beta.42':
+ '@rolldown/binding-darwin-x64@1.0.0-beta.43':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0-beta.42':
+ '@rolldown/binding-freebsd-x64@1.0.0-beta.43':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42':
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.43':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42':
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.43':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42':
+ '@rolldown/binding-linux-arm64-musl@1.0.0-beta.43':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42':
+ '@rolldown/binding-linux-x64-gnu@1.0.0-beta.43':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0-beta.42':
+ '@rolldown/binding-linux-x64-musl@1.0.0-beta.43':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0-beta.42':
+ '@rolldown/binding-openharmony-arm64@1.0.0-beta.43':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0-beta.42':
+ '@rolldown/binding-wasm32-wasi@1.0.0-beta.43':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.6
+ '@napi-rs/wasm-runtime': 1.0.7
optional: true
- '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42':
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43':
optional: true
- '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42':
+ '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.43':
optional: true
- '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42':
+ '@rolldown/binding-win32-x64-msvc@1.0.0-beta.43':
optional: true
'@rolldown/pluginutils@1.0.0-beta.27': {}
- '@rolldown/pluginutils@1.0.0-beta.42': {}
+ '@rolldown/pluginutils@1.0.0-beta.43': {}
'@rollup/plugin-json@6.1.0(rollup@4.52.4)':
dependencies:
@@ -14339,6 +14198,8 @@ snapshots:
'@types/unist@3.0.3': {}
+ '@types/validate-npm-package-name@4.0.2': {}
+
'@types/ws@8.18.1':
dependencies:
'@types/node': 22.18.8
@@ -14606,6 +14467,12 @@ snapshots:
address@1.2.2: {}
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
agent-base@7.1.4: {}
aggregate-error@3.1.0:
@@ -14673,6 +14540,8 @@ snapshots:
dependencies:
string-width: 4.2.3
+ ansi-colors@4.1.3: {}
+
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
@@ -15140,6 +15009,8 @@ snapshots:
dependencies:
readdirp: 4.1.1
+ chownr@2.0.0: {}
+
chownr@3.0.0: {}
chrome-trace-event@1.0.4: {}
@@ -15204,6 +15075,8 @@ snapshots:
colord@2.9.3: {}
+ colorette@1.2.1: {}
+
colorette@2.0.20: {}
combine-promises@1.2.0: {}
@@ -15218,6 +15091,8 @@ snapshots:
commander@13.1.0: {}
+ commander@14.0.1: {}
+
commander@2.20.3: {}
commander@4.1.1: {}
@@ -15794,7 +15669,7 @@ snapshots:
detect-port@1.6.1:
dependencies:
address: 1.2.2
- debug: 4.4.1
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -15963,6 +15838,10 @@ snapshots:
graceful-fs: 4.2.11
tapable: 2.3.0
+ enquirer@2.3.6:
+ dependencies:
+ ansi-colors: 4.1.3
+
entities@2.2.0: {}
entities@4.5.0: {}
@@ -16031,35 +15910,6 @@ snapshots:
'@esbuild/win32-ia32': 0.25.10
'@esbuild/win32-x64': 0.25.10
- esbuild@0.25.9:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.9
- '@esbuild/android-arm': 0.25.9
- '@esbuild/android-arm64': 0.25.9
- '@esbuild/android-x64': 0.25.9
- '@esbuild/darwin-arm64': 0.25.9
- '@esbuild/darwin-x64': 0.25.9
- '@esbuild/freebsd-arm64': 0.25.9
- '@esbuild/freebsd-x64': 0.25.9
- '@esbuild/linux-arm': 0.25.9
- '@esbuild/linux-arm64': 0.25.9
- '@esbuild/linux-ia32': 0.25.9
- '@esbuild/linux-loong64': 0.25.9
- '@esbuild/linux-mips64el': 0.25.9
- '@esbuild/linux-ppc64': 0.25.9
- '@esbuild/linux-riscv64': 0.25.9
- '@esbuild/linux-s390x': 0.25.9
- '@esbuild/linux-x64': 0.25.9
- '@esbuild/netbsd-arm64': 0.25.9
- '@esbuild/netbsd-x64': 0.25.9
- '@esbuild/openbsd-arm64': 0.25.9
- '@esbuild/openbsd-x64': 0.25.9
- '@esbuild/openharmony-arm64': 0.25.9
- '@esbuild/sunos-x64': 0.25.9
- '@esbuild/win32-arm64': 0.25.9
- '@esbuild/win32-ia32': 0.25.9
- '@esbuild/win32-x64': 0.25.9
-
escalade@3.2.0: {}
escape-goat@4.0.0: {}
@@ -16466,6 +16316,10 @@ snapshots:
jsonfile: 6.2.0
universalify: 2.0.1
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@@ -16473,6 +16327,8 @@ snapshots:
function-bind@1.1.2: {}
+ fuzzysearch@1.0.3: {}
+
gensync@1.0.0-beta.2: {}
get-east-asian-width@1.3.0: {}
@@ -16564,6 +16420,8 @@ snapshots:
globals@16.4.0: {}
+ globalyzer@0.1.0: {}
+
globby@10.0.2:
dependencies:
'@types/glob': 7.2.0
@@ -16592,6 +16450,8 @@ snapshots:
merge2: 1.4.1
slash: 4.0.0
+ globrex@0.1.2: {}
+
gopd@1.2.0: {}
got@12.6.1:
@@ -16894,6 +16754,13 @@ snapshots:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
+ https-proxy-agent@5.0.0:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.4
@@ -18073,8 +17940,19 @@ snapshots:
minimist@1.2.8: {}
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
minipass@7.1.2: {}
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+
minizlib@3.1.0:
dependencies:
minipass: 7.1.2
@@ -18083,6 +17961,8 @@ snapshots:
dependencies:
minimist: 1.2.8
+ mkdirp@1.0.4: {}
+
mlly@1.7.4:
dependencies:
acorn: 8.15.0
@@ -18090,6 +17970,8 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.1
+ mri@1.1.6: {}
+
mrmime@2.0.0: {}
ms@2.0.0: {}
@@ -19465,7 +19347,7 @@ snapshots:
robust-predicates@3.0.2: {}
- rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.42)(typescript@5.9.3):
+ rolldown-plugin-dts@0.16.11(rolldown@1.0.0-beta.43)(typescript@5.9.3):
dependencies:
'@babel/generator': 7.28.3
'@babel/parser': 7.28.4
@@ -19476,33 +19358,33 @@ snapshots:
dts-resolver: 2.1.2
get-tsconfig: 4.11.0
magic-string: 0.30.19
- rolldown: 1.0.0-beta.42
+ rolldown: 1.0.0-beta.43
optionalDependencies:
typescript: 5.9.3
transitivePeerDependencies:
- oxc-resolver
- supports-color
- rolldown@1.0.0-beta.42:
+ rolldown@1.0.0-beta.43:
dependencies:
'@oxc-project/types': 0.94.0
- '@rolldown/pluginutils': 1.0.0-beta.42
+ '@rolldown/pluginutils': 1.0.0-beta.43
ansis: 4.2.0
optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-beta.42
- '@rolldown/binding-darwin-arm64': 1.0.0-beta.42
- '@rolldown/binding-darwin-x64': 1.0.0-beta.42
- '@rolldown/binding-freebsd-x64': 1.0.0-beta.42
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42
- '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42
- '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42
- '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42
- '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42
- '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42
- '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42
- '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42
+ '@rolldown/binding-android-arm64': 1.0.0-beta.43
+ '@rolldown/binding-darwin-arm64': 1.0.0-beta.43
+ '@rolldown/binding-darwin-x64': 1.0.0-beta.43
+ '@rolldown/binding-freebsd-x64': 1.0.0-beta.43
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.43
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.43
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.43
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.43
+ '@rolldown/binding-linux-x64-musl': 1.0.0-beta.43
+ '@rolldown/binding-openharmony-arm64': 1.0.0-beta.43
+ '@rolldown/binding-wasm32-wasi': 1.0.0-beta.43
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.43
+ '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.43
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.43
rollup@4.45.1:
dependencies:
@@ -20061,6 +19943,15 @@ snapshots:
tapable@2.3.0: {}
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
tar@7.5.1:
dependencies:
'@isaacs/fs-minipass': 4.0.1
@@ -20103,6 +19994,25 @@ snapshots:
thunky@1.1.0: {}
+ tiged@2.12.7:
+ dependencies:
+ colorette: 1.2.1
+ enquirer: 2.3.6
+ fs-extra: 10.1.0
+ fuzzysearch: 1.0.3
+ https-proxy-agent: 5.0.0
+ mri: 1.1.6
+ rimraf: 3.0.2
+ tar: 6.2.1
+ tiny-glob: 0.2.8
+ transitivePeerDependencies:
+ - supports-color
+
+ tiny-glob@0.2.8:
+ dependencies:
+ globalyzer: 0.1.0
+ globrex: 0.1.2
+
tiny-invariant@1.3.3: {}
tiny-warning@1.0.3: {}
@@ -20200,8 +20110,8 @@ snapshots:
diff: 8.0.2
empathic: 2.0.0
hookable: 5.5.3
- rolldown: 1.0.0-beta.42
- rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.42)(typescript@5.9.3)
+ rolldown: 1.0.0-beta.43
+ rolldown-plugin-dts: 0.16.11(rolldown@1.0.0-beta.43)(typescript@5.9.3)
semver: 7.7.2
tinyexec: 1.0.1
tinyglobby: 0.2.15
@@ -20474,6 +20384,8 @@ snapshots:
validate-npm-package-name@5.0.1: {}
+ validate-npm-package-name@6.0.2: {}
+
value-equal@1.0.1: {}
vary@1.1.2: {}
@@ -20542,7 +20454,7 @@ snapshots:
vite@7.0.6(@types/node@22.18.8)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.20.6)(yaml@2.8.1):
dependencies:
- esbuild: 0.25.9
+ esbuild: 0.25.10
fdir: 6.4.6(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
@@ -20842,6 +20754,8 @@ snapshots:
yallist@3.1.1: {}
+ yallist@4.0.0: {}
+
yallist@5.0.0: {}
yaml@2.8.1: {}