honotan 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +220 -13
  2. package/package.json +3 -2
package/dist/index.mjs CHANGED
@@ -4119,7 +4119,7 @@ export default defineConfig({
4119
4119
 
4120
4120
  //#endregion
4121
4121
  //#region src/templates/standalone-api/dockerfile.template.ts
4122
- function generateStandaloneDockerfile(name) {
4122
+ function generateStandaloneDockerfile() {
4123
4123
  return `FROM oven/bun:1.3.1-alpine AS base
4124
4124
  WORKDIR /app
4125
4125
 
@@ -4860,7 +4860,7 @@ async function generateApi(name, framework, architecture, outputDir) {
4860
4860
  description: "tsdown.config.ts"
4861
4861
  }, {
4862
4862
  path: "Dockerfile",
4863
- content: generateStandaloneDockerfile(kebabName),
4863
+ content: generateStandaloneDockerfile(),
4864
4864
  description: "Dockerfile"
4865
4865
  }, {
4866
4866
  path: "docker-compose.yml",
@@ -5650,6 +5650,11 @@ function generateRootPackageJson(data) {
5650
5650
  typescript: "^5",
5651
5651
  "@types/node": "^22.13.14"
5652
5652
  };
5653
+ if (data.hasDbTurso) {
5654
+ catalog["@libsql/client"] = "^0.14.0";
5655
+ catalog["drizzle-orm"] = "^0.41.0";
5656
+ catalog["drizzle-kit"] = "^0.30.1";
5657
+ }
5653
5658
  if (data.hasEventDriven) catalog["amqplib"] = "^0.10.4";
5654
5659
  if (data.hasAuth) catalog["better-auth"] = "^1.2.0";
5655
5660
  const pkg = {
@@ -5737,6 +5742,7 @@ function generateEnvExample(data) {
5737
5742
  "CORS_ORIGIN=http://localhost:3000"
5738
5743
  ];
5739
5744
  if (data.hasDb) lines.push("", "# Database", `DATABASE_URL=postgresql://${data.kebabName}:${data.kebabName}_password@localhost:5432/${data.kebabName}`);
5745
+ if (data.hasDbTurso) lines.push("", "# Database (Turso SQLite)", "# For local development you can use: TURSO_DATABASE_URL=file:local.db", "TURSO_DATABASE_URL=libsql://your-db-name.turso.io", "TURSO_AUTH_TOKEN=your-turso-auth-token");
5740
5746
  if (data.hasCache) lines.push("", "# Cache", "REDIS_URL=redis://localhost:6379");
5741
5747
  if (data.hasEventDriven) lines.push("", "# Event-Driven", `RABBITMQ_URL=amqp://${data.kebabName}:${data.kebabName}_password@localhost:5672`);
5742
5748
  if (data.hasAuth) lines.push("", "# Auth (better-auth)", "BETTER_AUTH_SECRET=your-secret-key-at-least-32-characters-long", "BETTER_AUTH_URL=http://localhost:3000");
@@ -5768,7 +5774,7 @@ coverage
5768
5774
  //#region src/templates/monorepo/root/dockerfile.template.ts
5769
5775
  function generateDockerfile(data) {
5770
5776
  const conditionalCopyLines = [];
5771
- if (data.hasDb) conditionalCopyLines.push("COPY packages/db/package.json ./packages/db/");
5777
+ if (data.hasDb || data.hasDbTurso) conditionalCopyLines.push("COPY packages/db/package.json ./packages/db/");
5772
5778
  if (data.hasCache) conditionalCopyLines.push("COPY packages/cache/package.json ./packages/cache/");
5773
5779
  if (data.hasEventDriven) conditionalCopyLines.push("COPY packages/event-driven/package.json ./packages/event-driven/");
5774
5780
  return `FROM oven/bun:1.3.1-alpine AS base
@@ -6004,10 +6010,11 @@ ${dependsOnBlock}${networkLine}`;
6004
6010
  //#endregion
6005
6011
  //#region src/templates/monorepo/root/readme.template.ts
6006
6012
  function generateMonorepoReadme(data) {
6007
- const { projectName, apiFramework, hasClient, hasDb, hasCache, hasEventDriven, hasAuth } = data;
6013
+ const { projectName, apiFramework, hasClient, hasDb, hasDbTurso, hasCache, hasEventDriven, hasAuth } = data;
6008
6014
  const features = [];
6009
6015
  if (hasClient) features.push("🎨 **Full-stack ready** with TanStack Router + React client");
6010
6016
  if (hasDb) features.push("🗄️ **Database integration** with Drizzle ORM");
6017
+ if (hasDbTurso) features.push("🗄️ **Turso SQLite** with Drizzle ORM + libsql client");
6011
6018
  if (hasCache) features.push("⚡ **Redis caching** for performance");
6012
6019
  if (hasEventDriven) features.push("📨 **Event-driven architecture** with RabbitMQ");
6013
6020
  if (hasAuth) features.push("🔐 **Authentication** ready with shared auth package");
@@ -6046,7 +6053,7 @@ ${projectName}/
6046
6053
  ${hasClient ? `│ └── client/ # React + TanStack Router client\n` : ""}├── packages/
6047
6054
  │ ├── config/ # Shared TypeScript configs
6048
6055
  │ ├── env/ # Environment variable validation
6049
- ${hasDb ? `│ ├── db/ # Database client and schemas\n` : ""}${hasCache ? `│ ├── cache/ # Redis cache client\n` : ""}${hasEventDriven ? `│ ├── event-driven/ # RabbitMQ client and event handlers\n` : ""}${hasAuth ? `│ └── auth/ # Authentication utilities\n` : ""}└── turbo.json # Turborepo pipeline configuration
6056
+ ${hasDb ? `│ ├── db/ # Database client and schemas\n` : ""}${hasDbTurso ? `│ ├── db/ # Turso SQLite client and schema\n` : ""}${hasCache ? `│ ├── cache/ # Redis cache client\n` : ""}${hasEventDriven ? `│ ├── event-driven/ # RabbitMQ client and event handlers\n` : ""}${hasAuth ? `│ └── auth/ # Authentication utilities\n` : ""}└── turbo.json # Turborepo pipeline configuration
6050
6057
  \`\`\`
6051
6058
 
6052
6059
  ## ✨ Features
@@ -6281,7 +6288,7 @@ docker-compose up -d
6281
6288
 
6282
6289
  Remember to set production environment variables:
6283
6290
 
6284
- ${hasDb ? `- \`DATABASE_URL\`: PostgreSQL connection string\n` : ""}${hasCache ? `- \`REDIS_URL\`: Redis connection string\n` : ""}${hasEventDriven ? `- \`RABBITMQ_URL\`: RabbitMQ connection string\n` : ""}- \`PORT\`: Server port (default: 3000)
6291
+ ${hasDb ? `- \`DATABASE_URL\`: PostgreSQL connection string\n` : ""}${hasDbTurso ? `- \`TURSO_DATABASE_URL\`: Turso database URL (e.g. libsql://your-db.turso.io)\n- \`TURSO_AUTH_TOKEN\`: Turso auth token\n` : ""}${hasCache ? `- \`REDIS_URL\`: Redis connection string\n` : ""}${hasEventDriven ? `- \`RABBITMQ_URL\`: RabbitMQ connection string\n` : ""}- \`PORT\`: Server port (default: 3000)
6285
6292
  - \`NODE_ENV\`: Set to \`production\`
6286
6293
 
6287
6294
  ## 📖 Learn More
@@ -6300,7 +6307,7 @@ ${hasClient ? "- [TanStack Router](https://tanstack.com/router)" : ""}
6300
6307
  //#endregion
6301
6308
  //#region src/templates/monorepo/root/agents.template.ts
6302
6309
  function generateMonorepoAgents(data) {
6303
- const { projectName, apiFramework, hasClient, hasDb, hasCache, hasEventDriven, hasAuth } = data;
6310
+ const { projectName, apiFramework, hasClient, hasDb, hasDbTurso, hasCache, hasEventDriven, hasAuth } = data;
6304
6311
  return `# AI Coding Assistant Guide
6305
6312
  ## Project Overview
6306
6313
 
@@ -6355,7 +6362,7 @@ ${projectName}/
6355
6362
  ${hasClient ? `│ └── client/ # Frontend app\n` : ""}├── packages/
6356
6363
  │ ├── config/ # Shared configs
6357
6364
  │ ├── env/ # Env validation
6358
- ${hasDb ? `│ ├── db/ # Database\n` : ""}${hasCache ? `│ ├── cache/ # Cache\n` : ""}${hasEventDriven ? `│ ├── event-driven/ # Events/messaging\n` : ""}${hasAuth ? `│ └── auth/ # Authentication\n` : ""}└── turbo.json
6365
+ ${hasDb ? `│ ├── db/ # Database\n` : ""}${hasDbTurso ? `│ ├── db/ # Turso SQLite\n` : ""}${hasCache ? `│ ├── cache/ # Cache\n` : ""}${hasEventDriven ? `│ ├── event-driven/ # Events/messaging\n` : ""}${hasAuth ? `│ └── auth/ # Authentication\n` : ""}└── turbo.json
6359
6366
  \`\`\`
6360
6367
 
6361
6368
  ## Code Generation Guidelines
@@ -6421,7 +6428,7 @@ Use workspace aliases for shared packages:
6421
6428
 
6422
6429
  \`\`\`typescript
6423
6430
  import { env } from '@${data.scope}/env/server';
6424
- ${hasDb ? `import { db } from '@${data.scope}/db';\n` : ""}${hasCache ? `import { cache } from '@${data.scope}/cache';\n` : ""}${hasAuth ? `import { auth } from '@${data.scope}/auth';\n` : ""}
6431
+ ${hasDb || hasDbTurso ? `import { db } from '@${data.scope}/db';\n` : ""}${hasCache ? `import { cache } from '@${data.scope}/cache';\n` : ""}${hasAuth ? `import { auth } from '@${data.scope}/auth';\n` : ""}
6425
6432
  \`\`\`
6426
6433
 
6427
6434
  ## Common Patterns
@@ -6599,6 +6606,21 @@ import { db } from '@${data.scope}/db';
6599
6606
 
6600
6607
  const users = await db.select().from(schema.users);
6601
6608
  \`\`\`
6609
+ ` : ""}${hasDbTurso ? `
6610
+ ### @${data.scope}/db
6611
+
6612
+ Turso SQLite client (Drizzle ORM + libsql):
6613
+
6614
+ \`\`\`typescript
6615
+ import { db } from '@${data.scope}/db';
6616
+ import * as schema from '@${data.scope}/db/schema';
6617
+
6618
+ const users = await db.select().from(schema.users);
6619
+ \`\`\`
6620
+
6621
+ Run migrations: \`bun --filter @${data.scope}/db db:migrate\`
6622
+ Push schema: \`bun --filter @${data.scope}/db db:push\`
6623
+ Studio: \`bun --filter @${data.scope}/db db:studio\`
6602
6624
  ` : ""}${hasCache ? `
6603
6625
  ### @${data.scope}/cache
6604
6626
 
@@ -6716,7 +6738,7 @@ try {
6716
6738
  - **Test Framework**: Vitest (recommended) or Jest
6717
6739
  - **Validation**: Zod
6718
6740
  - **Workspace Scope**: \`@${data.scope}\`
6719
- ${hasDb ? `- **Database**: PostgreSQL + Drizzle ORM\n` : ""}${hasCache ? `- **Cache**: Redis\n` : ""}${hasEventDriven ? `- **Message Queue**: RabbitMQ\n` : ""}${hasClient ? `- **Frontend**: React + TanStack Router\n` : ""}
6741
+ ${hasDb ? `- **Database**: PostgreSQL + Drizzle ORM\n` : ""}${hasDbTurso ? `- **Database**: Turso SQLite + Drizzle ORM\n` : ""}${hasCache ? `- **Cache**: Redis\n` : ""}${hasEventDriven ? `- **Message Queue**: RabbitMQ\n` : ""}${hasClient ? `- **Frontend**: React + TanStack Router\n` : ""}
6720
6742
  ---
6721
6743
 
6722
6744
  **Remember**: The goal is clean, maintainable, testable code. When in doubt, favor simplicity and adherence to hexagonal architecture principles.
@@ -6770,7 +6792,10 @@ function generateEnvPackageJson(data) {
6770
6792
  version: "0.0.0",
6771
6793
  private: true,
6772
6794
  type: "module",
6773
- exports: { "./server": "./src/server.ts" },
6795
+ exports: {
6796
+ "./server": "./src/server.ts",
6797
+ ...data.hasClient ? { "./client": "./src/client.ts" } : {}
6798
+ },
6774
6799
  dependencies: {
6775
6800
  "@t3-oss/env-core": "^0.13.1",
6776
6801
  zod: "catalog:"
@@ -6808,6 +6833,10 @@ function generateEnvServer(data) {
6808
6833
  ` CORS_ORIGIN: z.string().url(),`
6809
6834
  ];
6810
6835
  if (data.hasDb) envVars.push(` DATABASE_URL: z.string().url(),`);
6836
+ if (data.hasDbTurso) {
6837
+ envVars.push(` TURSO_DATABASE_URL: z.string().url(),`);
6838
+ envVars.push(` TURSO_AUTH_TOKEN: z.string().optional(),`);
6839
+ }
6811
6840
  if (data.hasCache) envVars.push(` REDIS_URL: z.string().url(),`);
6812
6841
  if (data.hasEventDriven) envVars.push(` RABBITMQ_URL: z.string().url(),`);
6813
6842
  if (data.hasAuth) {
@@ -6827,6 +6856,25 @@ ${envVars.join("\n")}
6827
6856
  `;
6828
6857
  }
6829
6858
 
6859
+ //#endregion
6860
+ //#region src/templates/monorepo/packages/env/client.template.ts
6861
+ function generateEnvClient(data) {
6862
+ const clientVars = [` VITE_API_URL: z.string().url(),`];
6863
+ if (data.hasAuth) clientVars.push(` VITE_AUTH_URL: z.string().url(),`);
6864
+ return `import { createEnv } from "@t3-oss/env-core";
6865
+ import { z } from "zod";
6866
+
6867
+ export const env = createEnv({
6868
+ clientPrefix: "VITE_",
6869
+ client: {
6870
+ ${clientVars.join("\n")}
6871
+ },
6872
+ runtimeEnv: import.meta.env,
6873
+ emptyStringAsUndefined: true,
6874
+ });
6875
+ `;
6876
+ }
6877
+
6830
6878
  //#endregion
6831
6879
  //#region src/templates/monorepo/packages/db/package-json.template.ts
6832
6880
  function generateDbPackageJson(data) {
@@ -7348,6 +7396,130 @@ export class RabbitMQClient {
7348
7396
  `;
7349
7397
  }
7350
7398
 
7399
+ //#endregion
7400
+ //#region src/templates/monorepo/packages/db-turso/package-json.template.ts
7401
+ function generateDbTursoPackageJson(data) {
7402
+ const pkg = {
7403
+ name: `${data.scope}/db`,
7404
+ version: "0.0.0",
7405
+ private: true,
7406
+ type: "module",
7407
+ exports: {
7408
+ ".": "./src/index.ts",
7409
+ "./schema": "./src/schema.ts"
7410
+ },
7411
+ scripts: {
7412
+ "db:generate": "drizzle-kit generate",
7413
+ "db:migrate": "bun src/migrate.ts",
7414
+ "db:push": "drizzle-kit push",
7415
+ "db:studio": "drizzle-kit studio"
7416
+ },
7417
+ dependencies: {
7418
+ "@libsql/client": "catalog:",
7419
+ "drizzle-orm": "catalog:",
7420
+ [`${data.scope}/env`]: "workspace:*"
7421
+ },
7422
+ devDependencies: {
7423
+ [`${data.scope}/config`]: "workspace:*",
7424
+ "@types/node": "catalog:",
7425
+ "drizzle-kit": "catalog:",
7426
+ typescript: "catalog:"
7427
+ }
7428
+ };
7429
+ return JSON.stringify(pkg, null, 2) + "\n";
7430
+ }
7431
+
7432
+ //#endregion
7433
+ //#region src/templates/monorepo/packages/db-turso/tsconfig.template.ts
7434
+ function generateDbTursoTsconfig(data) {
7435
+ const config = {
7436
+ extends: `${data.scope}/config/tsconfig.base.json`,
7437
+ compilerOptions: {
7438
+ composite: true,
7439
+ outDir: "dist"
7440
+ },
7441
+ include: ["src/**/*", "drizzle.config.ts"],
7442
+ exclude: ["node_modules", "dist"]
7443
+ };
7444
+ return JSON.stringify(config, null, 2) + "\n";
7445
+ }
7446
+
7447
+ //#endregion
7448
+ //#region src/templates/monorepo/packages/db-turso/index.template.ts
7449
+ function generateDbTursoIndex(data) {
7450
+ return `import { createClient } from "@libsql/client";
7451
+ import { drizzle } from "drizzle-orm/libsql";
7452
+ import { env } from "${data.scope}/env/server";
7453
+ import * as schema from "./schema";
7454
+
7455
+ const client = createClient({
7456
+ url: env.TURSO_DATABASE_URL,
7457
+ authToken: env.TURSO_AUTH_TOKEN,
7458
+ });
7459
+
7460
+ export const db = drizzle(client, { schema });
7461
+
7462
+ export * from "./schema";
7463
+ `;
7464
+ }
7465
+
7466
+ //#endregion
7467
+ //#region src/templates/monorepo/packages/db-turso/schema.template.ts
7468
+ function generateDbTursoSchema(_data) {
7469
+ return `import { text, integer, sqliteTable } from "drizzle-orm/sqlite-core";
7470
+
7471
+ // Define your tables here using Drizzle ORM sqlite-core.
7472
+ // Example:
7473
+ // export const users = sqliteTable("users", {
7474
+ // id: text("id").primaryKey(),
7475
+ // name: text("name").notNull(),
7476
+ // email: text("email").notNull().unique(),
7477
+ // createdAt: integer("created_at", { mode: "timestamp" })
7478
+ // .notNull()
7479
+ // .$defaultFn(() => new Date()),
7480
+ // });
7481
+ `;
7482
+ }
7483
+
7484
+ //#endregion
7485
+ //#region src/templates/monorepo/packages/db-turso/drizzle-config.template.ts
7486
+ function generateDbTursoDrizzleConfig(_data) {
7487
+ return `import { defineConfig } from "drizzle-kit";
7488
+
7489
+ export default defineConfig({
7490
+ schema: "./src/schema.ts",
7491
+ out: "./drizzle",
7492
+ dialect: "turso",
7493
+ dbCredentials: {
7494
+ url: process.env.TURSO_DATABASE_URL!,
7495
+ authToken: process.env.TURSO_AUTH_TOKEN,
7496
+ },
7497
+ });
7498
+ `;
7499
+ }
7500
+
7501
+ //#endregion
7502
+ //#region src/templates/monorepo/packages/db-turso/migrate.template.ts
7503
+ function generateDbTursoMigrate(data) {
7504
+ return `import { createClient } from "@libsql/client";
7505
+ import { drizzle } from "drizzle-orm/libsql";
7506
+ import { migrate } from "drizzle-orm/libsql/migrator";
7507
+ import { env } from "${data.scope}/env/server";
7508
+
7509
+ const client = createClient({
7510
+ url: env.TURSO_DATABASE_URL,
7511
+ authToken: env.TURSO_AUTH_TOKEN,
7512
+ });
7513
+
7514
+ const db = drizzle(client);
7515
+
7516
+ await migrate(db, { migrationsFolder: "./drizzle" });
7517
+
7518
+ console.log("Migrations applied successfully");
7519
+ client.close();
7520
+ `;
7521
+ }
7522
+
7351
7523
  //#endregion
7352
7524
  //#region src/templates/monorepo/packages/auth/package-json.template.ts
7353
7525
  function generateAuthPackageJson(data) {
@@ -7425,7 +7597,7 @@ export type User = typeof auth.$Infer.Session.user;
7425
7597
  //#endregion
7426
7598
  //#region src/templates/monorepo/apps/server/package-json.template.ts
7427
7599
  function generateServerPackageJson(data) {
7428
- const { scope, apiFramework: framework, hasDb, hasCache, hasEventDriven } = data;
7600
+ const { scope, apiFramework: framework, hasDb, hasDbTurso, hasCache, hasEventDriven } = data;
7429
7601
  const dependencies = {};
7430
7602
  if (framework === "hono") {
7431
7603
  dependencies["hono"] = "^4.0.0";
@@ -7440,7 +7612,7 @@ function generateServerPackageJson(data) {
7440
7612
  dependencies["zod"] = "catalog:";
7441
7613
  }
7442
7614
  dependencies[`${scope}/env`] = "workspace:*";
7443
- if (hasDb) dependencies[`${scope}/db`] = "workspace:*";
7615
+ if (hasDb || hasDbTurso) dependencies[`${scope}/db`] = "workspace:*";
7444
7616
  if (hasCache) dependencies[`${scope}/cache`] = "workspace:*";
7445
7617
  if (hasEventDriven) dependencies[`${scope}/event-driven`] = "workspace:*";
7446
7618
  if (data.hasAuth) dependencies[`${scope}/auth`] = "workspace:*";
@@ -7597,6 +7769,7 @@ function buildMonorepoTemplateData(projectName, frameworks, infraPackages) {
7597
7769
  apiFramework,
7598
7770
  infraPackages,
7599
7771
  hasDb: infraPackages.includes("db") || infraPackages.includes("auth"),
7772
+ hasDbTurso: infraPackages.includes("db-turso"),
7600
7773
  hasCache: infraPackages.includes("cache"),
7601
7774
  hasEventDriven: infraPackages.includes("event-driven"),
7602
7775
  hasAuth: infraPackages.includes("auth"),
@@ -7696,6 +7869,11 @@ function collectFiles(data) {
7696
7869
  content: generateEnvServer(data),
7697
7870
  description: "packages/env/src/server.ts"
7698
7871
  });
7872
+ if (data.hasClient) files.push({
7873
+ path: "packages/env/src/client.ts",
7874
+ content: generateEnvClient(data),
7875
+ description: "packages/env/src/client.ts"
7876
+ });
7699
7877
  if (data.hasDb) files.push({
7700
7878
  path: "packages/db/package.json",
7701
7879
  content: generateDbPackageJson(data),
@@ -7713,6 +7891,31 @@ function collectFiles(data) {
7713
7891
  content: generateDbTypes(data),
7714
7892
  description: "packages/db/src/types.ts"
7715
7893
  });
7894
+ if (data.hasDbTurso) files.push({
7895
+ path: "packages/db/package.json",
7896
+ content: generateDbTursoPackageJson(data),
7897
+ description: "packages/db/package.json"
7898
+ }, {
7899
+ path: "packages/db/tsconfig.json",
7900
+ content: generateDbTursoTsconfig(data),
7901
+ description: "packages/db/tsconfig.json"
7902
+ }, {
7903
+ path: "packages/db/drizzle.config.ts",
7904
+ content: generateDbTursoDrizzleConfig(data),
7905
+ description: "packages/db/drizzle.config.ts"
7906
+ }, {
7907
+ path: "packages/db/src/index.ts",
7908
+ content: generateDbTursoIndex(data),
7909
+ description: "packages/db/src/index.ts"
7910
+ }, {
7911
+ path: "packages/db/src/schema.ts",
7912
+ content: generateDbTursoSchema(data),
7913
+ description: "packages/db/src/schema.ts"
7914
+ }, {
7915
+ path: "packages/db/src/migrate.ts",
7916
+ content: generateDbTursoMigrate(data),
7917
+ description: "packages/db/src/migrate.ts"
7918
+ });
7716
7919
  if (data.hasCache) files.push({
7717
7920
  path: "packages/cache/package.json",
7718
7921
  content: generateCachePackageJson(data),
@@ -8085,6 +8288,10 @@ async function promptInfraPackages() {
8085
8288
  name: "DB (Postgres via Bun.sql)",
8086
8289
  value: "db"
8087
8290
  },
8291
+ {
8292
+ name: "DB (Turso SQLite via @libsql/client + Drizzle)",
8293
+ value: "db-turso"
8294
+ },
8088
8295
  {
8089
8296
  name: "Cache (Redis via Bun.redis)",
8090
8297
  value: "cache"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "honotan",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "CLI toolkit for generating Hexagonal & Vertical Slice architecture in turbo monorepo",
5
5
  "keywords": [
6
6
  "cli",
@@ -35,13 +35,14 @@
35
35
  "prepublishOnly": "bun run build"
36
36
  },
37
37
  "dependencies": {
38
+ "chalk": "^5.3.0",
38
39
  "commander": "^12.1.0",
39
40
  "inquirer": "^12.0.1",
40
- "chalk": "^5.3.0",
41
41
  "ora": "^8.1.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^22.0.0",
45
+ "bun-types": "^1.3.9",
45
46
  "tsdown": "^0.16.5",
46
47
  "typescript": "^5.0.0"
47
48
  }