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.
- package/dist/index.mjs +220 -13
- 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(
|
|
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(
|
|
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: {
|
|
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.
|
|
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
|
}
|