create-taserjs 0.1.11 → 0.2.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/README.md +8 -44
- package/dist/cli-9fkoNOJg.js +1237 -0
- package/dist/cli-9fkoNOJg.js.map +1 -0
- package/dist/cli-DkZddFtU.cjs +1398 -0
- package/dist/cli.cjs +4 -0
- package/dist/cli.d.cts +4 -0
- package/dist/cli.d.cts.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/index.cjs +25 -0
- package/dist/index.d.cts +119 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/package.json +39 -9
- package/src/addons/drizzle/index.ts +37 -40
- package/src/addons/kysely/index.ts +19 -22
- package/src/addons/pino/index.ts +2 -2
- package/src/addons/prisma/index.ts +18 -22
- package/src/addons/registry.ts +37 -73
- package/src/addons/types.ts +12 -13
- package/src/addons/validators.ts +22 -23
- package/src/addons/winston/index.ts +3 -3
- package/src/cli.ts +96 -56
- package/src/commands/create.ts +118 -249
- package/src/core/package-manager.ts +36 -55
- package/src/core/scaffold-engine.ts +100 -75
- package/src/core/targets.ts +20 -56
- package/src/core/types.ts +18 -53
- package/src/index.ts +8 -0
- package/src/templates/base.ts +139 -51
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
- package/dist/cjs/addons/arktype/index.cjs +0 -6
- package/dist/cjs/addons/arktype/index.cjs.map +0 -1
- package/dist/cjs/addons/arktype/index.d.cts +0 -1
- package/dist/cjs/addons/drizzle/index.cjs +0 -131
- package/dist/cjs/addons/drizzle/index.cjs.map +0 -1
- package/dist/cjs/addons/drizzle/index.d.cts +0 -2
- package/dist/cjs/addons/kysely/index.cjs +0 -103
- package/dist/cjs/addons/kysely/index.cjs.map +0 -1
- package/dist/cjs/addons/kysely/index.d.cts +0 -2
- package/dist/cjs/addons/pino/index.cjs +0 -30
- package/dist/cjs/addons/pino/index.cjs.map +0 -1
- package/dist/cjs/addons/pino/index.d.cts +0 -2
- package/dist/cjs/addons/prisma/index.cjs +0 -133
- package/dist/cjs/addons/prisma/index.cjs.map +0 -1
- package/dist/cjs/addons/prisma/index.d.cts +0 -2
- package/dist/cjs/addons/registry.cjs +0 -65
- package/dist/cjs/addons/registry.cjs.map +0 -1
- package/dist/cjs/addons/registry.d.cts +0 -5
- package/dist/cjs/addons/types.d.cts +0 -16
- package/dist/cjs/addons/valibot/index.cjs +0 -6
- package/dist/cjs/addons/valibot/index.cjs.map +0 -1
- package/dist/cjs/addons/valibot/index.d.cts +0 -1
- package/dist/cjs/addons/validators.cjs +0 -38
- package/dist/cjs/addons/validators.cjs.map +0 -1
- package/dist/cjs/addons/validators.d.cts +0 -5
- package/dist/cjs/addons/winston/index.cjs +0 -34
- package/dist/cjs/addons/winston/index.cjs.map +0 -1
- package/dist/cjs/addons/winston/index.d.cts +0 -2
- package/dist/cjs/addons/zod/index.cjs +0 -6
- package/dist/cjs/addons/zod/index.cjs.map +0 -1
- package/dist/cjs/addons/zod/index.d.cts +0 -1
- package/dist/cjs/cli.cjs +0 -65
- package/dist/cjs/cli.cjs.map +0 -1
- package/dist/cjs/cli.d.cts +0 -2
- package/dist/cjs/commands/create.cjs +0 -332
- package/dist/cjs/commands/create.cjs.map +0 -1
- package/dist/cjs/commands/create.d.cts +0 -14
- package/dist/cjs/core/json-output.cjs +0 -16
- package/dist/cjs/core/json-output.cjs.map +0 -1
- package/dist/cjs/core/json-output.d.cts +0 -4
- package/dist/cjs/core/package-manager.cjs +0 -56
- package/dist/cjs/core/package-manager.cjs.map +0 -1
- package/dist/cjs/core/package-manager.d.cts +0 -8
- package/dist/cjs/core/parse-options.cjs +0 -95
- package/dist/cjs/core/parse-options.cjs.map +0 -1
- package/dist/cjs/core/parse-options.d.cts +0 -35
- package/dist/cjs/core/project-config.cjs +0 -23
- package/dist/cjs/core/project-config.cjs.map +0 -1
- package/dist/cjs/core/project-config.d.cts +0 -2
- package/dist/cjs/core/resolve-packages.cjs +0 -58
- package/dist/cjs/core/resolve-packages.cjs.map +0 -1
- package/dist/cjs/core/resolve-packages.d.cts +0 -2
- package/dist/cjs/core/scaffold-engine.cjs +0 -72
- package/dist/cjs/core/scaffold-engine.cjs.map +0 -1
- package/dist/cjs/core/scaffold-engine.d.cts +0 -2
- package/dist/cjs/core/targets.cjs +0 -171
- package/dist/cjs/core/targets.cjs.map +0 -1
- package/dist/cjs/core/targets.d.cts +0 -49
- package/dist/cjs/core/types.cjs +0 -52
- package/dist/cjs/core/types.cjs.map +0 -1
- package/dist/cjs/core/types.d.cts +0 -57
- package/dist/cjs/core/validate-project-name.cjs +0 -44
- package/dist/cjs/core/validate-project-name.cjs.map +0 -1
- package/dist/cjs/core/validate-project-name.d.cts +0 -1
- package/dist/cjs/frameworks/index.cjs +0 -116
- package/dist/cjs/frameworks/index.cjs.map +0 -1
- package/dist/cjs/frameworks/index.d.cts +0 -18
- package/dist/cjs/scaffold.d.cts +0 -3
- package/dist/cjs/templates/base.cjs +0 -97
- package/dist/cjs/templates/base.cjs.map +0 -1
- package/dist/cjs/templates/base.d.cts +0 -9
- package/dist/cjs/types.d.cts +0 -1
- package/dist/esm/addons/arktype/index.d.ts +0 -1
- package/dist/esm/addons/arktype/index.js +0 -7
- package/dist/esm/addons/arktype/index.js.map +0 -1
- package/dist/esm/addons/drizzle/index.d.ts +0 -2
- package/dist/esm/addons/drizzle/index.js +0 -131
- package/dist/esm/addons/drizzle/index.js.map +0 -1
- package/dist/esm/addons/kysely/index.d.ts +0 -2
- package/dist/esm/addons/kysely/index.js +0 -103
- package/dist/esm/addons/kysely/index.js.map +0 -1
- package/dist/esm/addons/pino/index.d.ts +0 -2
- package/dist/esm/addons/pino/index.js +0 -30
- package/dist/esm/addons/pino/index.js.map +0 -1
- package/dist/esm/addons/prisma/index.d.ts +0 -2
- package/dist/esm/addons/prisma/index.js +0 -133
- package/dist/esm/addons/prisma/index.js.map +0 -1
- package/dist/esm/addons/registry.d.ts +0 -5
- package/dist/esm/addons/registry.js +0 -63
- package/dist/esm/addons/registry.js.map +0 -1
- package/dist/esm/addons/types.d.ts +0 -16
- package/dist/esm/addons/valibot/index.d.ts +0 -1
- package/dist/esm/addons/valibot/index.js +0 -7
- package/dist/esm/addons/valibot/index.js.map +0 -1
- package/dist/esm/addons/validators.d.ts +0 -5
- package/dist/esm/addons/validators.js +0 -36
- package/dist/esm/addons/validators.js.map +0 -1
- package/dist/esm/addons/winston/index.d.ts +0 -2
- package/dist/esm/addons/winston/index.js +0 -34
- package/dist/esm/addons/winston/index.js.map +0 -1
- package/dist/esm/addons/zod/index.d.ts +0 -1
- package/dist/esm/addons/zod/index.js +0 -7
- package/dist/esm/addons/zod/index.js.map +0 -1
- package/dist/esm/cli.d.ts +0 -2
- package/dist/esm/cli.js +0 -62
- package/dist/esm/cli.js.map +0 -1
- package/dist/esm/commands/create.d.ts +0 -14
- package/dist/esm/commands/create.js +0 -327
- package/dist/esm/commands/create.js.map +0 -1
- package/dist/esm/core/json-output.d.ts +0 -4
- package/dist/esm/core/json-output.js +0 -14
- package/dist/esm/core/json-output.js.map +0 -1
- package/dist/esm/core/package-manager.d.ts +0 -8
- package/dist/esm/core/package-manager.js +0 -53
- package/dist/esm/core/package-manager.js.map +0 -1
- package/dist/esm/core/parse-options.d.ts +0 -35
- package/dist/esm/core/parse-options.js +0 -89
- package/dist/esm/core/parse-options.js.map +0 -1
- package/dist/esm/core/project-config.d.ts +0 -2
- package/dist/esm/core/project-config.js +0 -21
- package/dist/esm/core/project-config.js.map +0 -1
- package/dist/esm/core/resolve-packages.d.ts +0 -2
- package/dist/esm/core/resolve-packages.js +0 -58
- package/dist/esm/core/resolve-packages.js.map +0 -1
- package/dist/esm/core/scaffold-engine.d.ts +0 -2
- package/dist/esm/core/scaffold-engine.js +0 -70
- package/dist/esm/core/scaffold-engine.js.map +0 -1
- package/dist/esm/core/targets.d.ts +0 -49
- package/dist/esm/core/targets.js +0 -166
- package/dist/esm/core/targets.js.map +0 -1
- package/dist/esm/core/types.d.ts +0 -57
- package/dist/esm/core/types.js +0 -45
- package/dist/esm/core/types.js.map +0 -1
- package/dist/esm/core/validate-project-name.d.ts +0 -1
- package/dist/esm/core/validate-project-name.js +0 -42
- package/dist/esm/core/validate-project-name.js.map +0 -1
- package/dist/esm/frameworks/index.d.ts +0 -18
- package/dist/esm/frameworks/index.js +0 -112
- package/dist/esm/frameworks/index.js.map +0 -1
- package/dist/esm/scaffold.d.ts +0 -3
- package/dist/esm/templates/base.d.ts +0 -9
- package/dist/esm/templates/base.js +0 -91
- package/dist/esm/templates/base.js.map +0 -1
- package/dist/esm/types.d.ts +0 -1
- package/src/addons/arktype/index.ts +0 -3
- package/src/addons/valibot/index.ts +0 -3
- package/src/addons/zod/index.ts +0 -3
- package/src/core/json-output.ts +0 -13
- package/src/core/parse-options.ts +0 -167
- package/src/core/project-config.ts +0 -32
- package/src/core/resolve-packages.ts +0 -69
- package/src/core/validate-project-name.ts +0 -55
- package/src/frameworks/index.ts +0 -120
- package/src/scaffold.ts +0 -3
- package/src/types.ts +0 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-9fkoNOJg.js","names":["schemaSource","dbIndexSource","envExample","driverPackages","driverDevPackages","dbIndexSource","driverPackages","driverDevPackages","envExample"],"sources":["../src/core/types.ts","../src/addons/drizzle/index.ts","../src/addons/kysely/index.ts","../src/addons/pino/index.ts","../src/addons/prisma/index.ts","../src/addons/validators.ts","../src/addons/winston/index.ts","../src/addons/registry.ts","../src/core/package-manager.ts","../src/core/targets.ts","../src/templates/base.ts","../src/core/scaffold-engine.ts","../src/commands/create.ts","../src/cli.ts"],"sourcesContent":["import type { Agent } from \"package-manager-detector\";\n\nexport type Runtime = \"node\" | \"bun\" | \"deno\";\nexport const RUNTIMES: readonly Runtime[] = [\"node\", \"bun\", \"deno\"];\n\nexport type DeployTarget =\n | \"none\"\n | \"node-server\"\n | \"node-cluster\"\n | \"bun\"\n | \"deno-server\"\n | \"deno-deploy\"\n | \"cloudflare-module\"\n | \"vercel\"\n | \"aws-lambda\"\n | \"netlify\";\n\nexport const DEPLOY_TARGETS: readonly DeployTarget[] = [\n \"none\",\n \"node-server\",\n \"node-cluster\",\n \"bun\",\n \"deno-server\",\n \"deno-deploy\",\n \"cloudflare-module\",\n \"vercel\",\n \"aws-lambda\",\n \"netlify\",\n];\n\nexport type DbOdm = \"drizzle\" | \"prisma\" | \"kysely\";\nexport const DB_ODMS: readonly DbOdm[] = [\"drizzle\", \"prisma\", \"kysely\"];\n\nexport type DbDriver = \"postgres\" | \"sqlite\" | \"mysql\";\nexport const DB_DRIVERS: readonly DbDriver[] = [\"postgres\", \"sqlite\", \"mysql\"];\nexport const DEFAULT_DB_DRIVER: DbDriver = \"sqlite\";\n\nexport type LoggerId = \"pino\" | \"winston\";\nexport const LOGGERS: readonly LoggerId[] = [\"pino\", \"winston\"];\n\nexport type ValidatorId = \"zod\" | \"arktype\" | \"valibot\";\nexport const VALIDATORS: readonly ValidatorId[] = [\"zod\", \"arktype\", \"valibot\"];\n\nexport interface ScaffoldContext {\n projectName: string;\n targetDir: string;\n preset?: DeployTarget | undefined;\n runtime?: Runtime | undefined;\n db?: DbOdm | undefined;\n driver?: DbDriver | undefined;\n logger?: LoggerId | undefined;\n validator?: ValidatorId | undefined;\n packageVersions?: Record<string, string> | undefined;\n}\n\nexport interface ScaffoldOptions extends ScaffoldContext {\n skipInstall?: boolean | undefined;\n agent?: Agent | undefined;\n}\n\nexport interface ScaffoldResult extends ScaffoldContext {\n files: string[];\n}\n","import type { AddonDefinition } from \"../types.js\";\nimport type { DbDriver } from \"../../core/types.js\";\n\nfunction schemaSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { pgTable, serial, text } from \"drizzle-orm/pg-core\";\n\nexport const users = pgTable(\"users\", {\n id: serial(\"id\").primaryKey(),\n email: text(\"email\").notNull(),\n});\n`;\n case \"mysql\":\n return `import { mysqlTable, serial, varchar } from \"drizzle-orm/mysql-core\";\n\nexport const users = mysqlTable(\"users\", {\n id: serial(\"id\").primaryKey(),\n email: varchar(\"email\", { length: 255 }).notNull(),\n});\n`;\n case \"sqlite\":\n default:\n return `import { sqliteTable, integer, text } from \"drizzle-orm/sqlite-core\";\n\nexport const users = sqliteTable(\"users\", {\n id: integer(\"id\").primaryKey({ autoIncrement: true }),\n email: text(\"email\").notNull(),\n});\n`;\n }\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { drizzle } from \"drizzle-orm/node-postgres\";\nimport pg from \"pg\";\nimport * as schema from \"./schema.js\";\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n });\n return drizzle(pool, { schema });\n}\n`;\n case \"mysql\":\n return `import { drizzle } from \"drizzle-orm/mysql2\";\nimport mysql from \"mysql2/promise\";\nimport * as schema from \"./schema.js\";\n\nexport function createDb() {\n const pool = mysql.createPool(process.env.DATABASE_URL ?? \"\");\n return drizzle(pool, { schema, mode: \"default\" });\n}\n`;\n case \"sqlite\":\n default:\n return `import Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport * as schema from \"./schema.js\";\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? \"file:./local.db\").replace(/^file:/, \"\");\n const client = new Database(filePath);\n return drizzle(client, { schema });\n}\n`;\n }\n}\n\nfunction drizzleConfigSource(driver: DbDriver): string {\n const dialect = driver === \"postgres\" ? \"postgresql\" : driver === \"mysql\" ? \"mysql\" : \"sqlite\";\n return `import { defineConfig } from \"drizzle-kit\";\n\nexport default defineConfig({\n schema: \"./src/db/schema.ts\",\n out: \"./drizzle\",\n dialect: \"${dialect}\",\n dbCredentials: {\n url: process.env.DATABASE_URL ?? \"\",\n },\n});\n`;\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n\";\n case \"mysql\":\n return \"DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n\";\n case \"sqlite\":\n default:\n return \"DATABASE_URL=file:./local.db\\n\";\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"pg\"];\n case \"mysql\":\n return [\"mysql2\"];\n case \"sqlite\":\n default:\n return [\"better-sqlite3\"];\n }\n}\n\nfunction driverDevPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"@types/pg\"];\n case \"sqlite\":\n return [\"@types/better-sqlite3\"];\n case \"mysql\":\n default:\n return [];\n }\n}\n\nexport const drizzleAddon: AddonDefinition = {\n id: \"drizzle\",\n category: \"database\",\n dependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"drizzle-orm\", ...driverPackages(driver)];\n },\n devDependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"drizzle-kit\", ...driverDevPackages(driver)];\n },\n scripts() {\n return {\n \"db:generate\": \"drizzle-kit generate\",\n \"db:push\": \"drizzle-kit push\",\n };\n },\n bootBinding() {\n return {\n key: \"db\",\n importPath: \"./db/index.js\",\n factoryName: \"createDb\",\n };\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? \"sqlite\";\n await write(\"src/db/schema.ts\", schemaSource(driver));\n await write(\"src/db/index.ts\", dbIndexSource(driver));\n await write(\"drizzle.config.ts\", drizzleConfigSource(driver));\n await write(\".env.example\", envExample(driver));\n },\n};\n","import type { AddonDefinition } from \"../types.js\";\nimport type { DbDriver } from \"../../core/types.js\";\n\nfunction schemaTypesSource(): string {\n return `export interface UserTable {\n id: number;\n email: string;\n}\n\nexport interface DB {\n users: UserTable;\n}\n`;\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { Kysely, PostgresDialect } from \"kysely\";\nimport pg from \"pg\";\nimport type { DB } from \"./schema.js\";\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n });\n return new Kysely<DB>({\n dialect: new PostgresDialect({ pool }),\n });\n}\n`;\n case \"mysql\":\n return `import { Kysely, MysqlDialect } from \"kysely\";\nimport { createPool } from \"mysql2\";\nimport type { DB } from \"./schema.js\";\n\nexport function createDb() {\n const pool = createPool(process.env.DATABASE_URL ?? \"\");\n return new Kysely<DB>({\n dialect: new MysqlDialect({ pool }),\n });\n}\n`;\n case \"sqlite\":\n default:\n return `import Database from \"better-sqlite3\";\nimport { Kysely, SqliteDialect } from \"kysely\";\nimport type { DB } from \"./schema.js\";\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? \"file:./local.db\").replace(/^file:/, \"\");\n const database = new Database(filePath);\n return new Kysely<DB>({\n dialect: new SqliteDialect({ database }),\n });\n}\n`;\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"pg\"];\n case \"mysql\":\n return [\"mysql2\"];\n case \"sqlite\":\n default:\n return [\"better-sqlite3\"];\n }\n}\n\nfunction driverDevPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"@types/pg\"];\n case \"sqlite\":\n return [\"@types/better-sqlite3\"];\n case \"mysql\":\n default:\n return [];\n }\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n\";\n case \"mysql\":\n return \"DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n\";\n case \"sqlite\":\n default:\n return \"DATABASE_URL=file:./local.db\\n\";\n }\n}\n\nexport const kyselyAddon: AddonDefinition = {\n id: \"kysely\",\n category: \"database\",\n dependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"kysely\", ...driverPackages(driver)];\n },\n devDependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return driverDevPackages(driver);\n },\n bootBinding() {\n return {\n key: \"db\",\n importPath: \"./db/index.js\",\n factoryName: \"createDb\",\n };\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? \"sqlite\";\n await write(\"src/db/schema.ts\", schemaTypesSource());\n await write(\"src/db/index.ts\", dbIndexSource(driver));\n await write(\".env.example\", envExample(driver));\n },\n};\n","import type { AddonDefinition } from \"../types.js\";\n\nexport const pinoAddon: AddonDefinition = {\n id: \"pino\",\n category: \"logger\",\n dependencies() {\n return [\"pino\"];\n },\n devDependencies() {\n return [];\n },\n bootBinding() {\n return {\n key: \"logger\",\n importPath: \"./logger.js\",\n factoryName: \"createLogger\",\n };\n },\n async apply(_ctx, write) {\n await write(\n \"src/logger.ts\",\n `import pino from \"pino\";\n\nexport function createLogger() {\n return pino({ level: process.env.LOG_LEVEL ?? \"info\" });\n}\n`,\n );\n },\n};\n","import type { AddonDefinition } from \"../types.js\";\nimport type { DbDriver } from \"../../core/types.js\";\n\nconst PRISMA_VERSION = \"^7.10.0\";\n\nfunction prismaPackage(name: string): string {\n return `${name}@${PRISMA_VERSION}`;\n}\n\nfunction prismaProvider(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"postgresql\";\n case \"mysql\":\n return \"mysql\";\n case \"sqlite\":\n default:\n return \"sqlite\";\n }\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n\";\n case \"mysql\":\n return \"DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n\";\n case \"sqlite\":\n default:\n return \"DATABASE_URL=file:./local.db\\n\";\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [prismaPackage(\"@prisma/adapter-pg\"), \"pg\"];\n case \"mysql\":\n return [prismaPackage(\"@prisma/adapter-mariadb\"), \"mariadb\"];\n case \"sqlite\":\n default:\n return [prismaPackage(\"@prisma/adapter-better-sqlite3\"), \"better-sqlite3\"];\n }\n}\n\nfunction driverDevPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"@types/pg\"];\n case \"sqlite\":\n return [\"@types/better-sqlite3\"];\n case \"mysql\":\n default:\n return [];\n }\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { PrismaPg } from \"@prisma/adapter-pg\";\nimport { PrismaClient } from \"./prisma/client.js\";\n\nexport function createDb() {\n const adapter = new PrismaPg({\n connectionString: process.env.DATABASE_URL,\n });\n return new PrismaClient({ adapter });\n}\n`;\n case \"mysql\":\n return `import { PrismaMariaDb } from \"@prisma/adapter-mariadb\";\nimport { PrismaClient } from \"./prisma/client.js\";\n\nexport function createDb() {\n const adapter = new PrismaMariaDb(process.env.DATABASE_URL ?? \"mariadb://root:@localhost:3306/mydb\");\n return new PrismaClient({ adapter });\n}\n`;\n case \"sqlite\":\n default:\n return `import { PrismaBetterSqlite3 } from \"@prisma/adapter-better-sqlite3\";\nimport { PrismaClient } from \"./prisma/client.js\";\n\nexport function createDb() {\n const adapter = new PrismaBetterSqlite3({\n url: process.env.DATABASE_URL ?? \"file:./local.db\",\n });\n return new PrismaClient({ adapter });\n}\n`;\n }\n}\n\nfunction prismaConfigSource(): string {\n return `import \"dotenv/config\";\nimport { defineConfig, env } from \"prisma/config\";\n\nexport default defineConfig({\n schema: \"prisma/schema.prisma\",\n datasource: {\n url: env(\"DATABASE_URL\"),\n },\n});\n`;\n}\n\nfunction schemaSource(driver: DbDriver): string {\n const provider = prismaProvider(driver);\n return `generator client {\n provider = \"prisma-client\"\n output = \"../src/db/prisma\"\n}\n\ndatasource db {\n provider = \"${provider}\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n email String\n}\n`;\n}\n\nexport const prismaAddon: AddonDefinition = {\n id: \"prisma\",\n category: \"database\",\n dependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [prismaPackage(\"@prisma/client\"), ...driverPackages(driver)];\n },\n devDependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [prismaPackage(\"prisma\"), ...driverDevPackages(driver)];\n },\n scripts() {\n return {\n \"db:generate\": \"prisma generate\",\n \"db:push\": \"prisma db push\",\n };\n },\n bootBinding() {\n return {\n key: \"db\",\n importPath: \"./db/index.js\",\n factoryName: \"createDb\",\n };\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? \"sqlite\";\n await write(\"prisma.config.ts\", prismaConfigSource());\n await write(\"prisma/schema.prisma\", schemaSource(driver));\n await write(\"src/db/index.ts\", dbIndexSource(driver));\n await write(\".env.example\", envExample(driver));\n },\n};\n","import type { ValidatorId } from \"../core/types.js\";\nimport type { AddonDefinition } from \"./types.js\";\n\nexport const IMPORT_LINES: Record<ValidatorId, string> = {\n zod: `import { z } from \"zod\";`,\n arktype: `import { type } from \"arktype\";`,\n valibot: `import * as v from \"valibot\";`,\n};\n\nexport const QUERY_SCHEMA_EXPR: Record<ValidatorId, string> = {\n zod: `z.object({ name: z.string().default(\"Taser.js\") })`,\n arktype: `type({ \"name?\": 'string = \"Taser.js\"' })`,\n valibot: `v.object({ name: v.optional(v.string(), \"Taser.js\") })`,\n};\n\nexport const ValidatorAddon = (validator: ValidatorId): AddonDefinition => {\n return {\n id: validator,\n category: \"validator\",\n dependencies: () => [validator],\n devDependencies: () => [],\n apply: async (_ctx, write) => {\n const content = `import { t } from \"@taserjs/router\";\n${IMPORT_LINES[validator]}\n\nexport default t\n .get(\"/\")\n .query(${QUERY_SCHEMA_EXPR[validator]})\n .handler(({ req }) => {\n return Response.json({ message: \\`Hello, \\${req.query.name}!\\` });\n });\n`;\n await write(\"src/routes/index.get.ts\", content);\n },\n };\n};\n","import type { AddonDefinition } from \"../types.js\";\n\nexport const winstonAddon: AddonDefinition = {\n id: \"winston\",\n category: \"logger\",\n dependencies() {\n return [\"winston\"];\n },\n devDependencies() {\n return [];\n },\n bootBinding() {\n return {\n key: \"logger\",\n importPath: \"./logger.js\",\n factoryName: \"createLogger\",\n };\n },\n async apply(_ctx, write) {\n await write(\n \"src/logger.ts\",\n `import winston from \"winston\";\n\nexport function createLogger() {\n return winston.createLogger({\n level: process.env.LOG_LEVEL ?? \"info\",\n format: winston.format.json(),\n transports: [new winston.transports.Console()],\n });\n}\n`,\n );\n },\n};\n","import { drizzleAddon } from \"./drizzle/index.js\";\nimport { kyselyAddon } from \"./kysely/index.js\";\nimport { pinoAddon } from \"./pino/index.js\";\nimport { prismaAddon } from \"./prisma/index.js\";\nimport type { AddonDefinition, BootBinding } from \"./types.js\";\nimport { ValidatorAddon } from \"./validators.js\";\nimport { winstonAddon } from \"./winston/index.js\";\nimport type { ScaffoldContext } from \"../core/types.js\";\n\nexport const ADDONS: Record<string, AddonDefinition> = {\n drizzle: drizzleAddon,\n prisma: prismaAddon,\n kysely: kyselyAddon,\n pino: pinoAddon,\n winston: winstonAddon,\n zod: ValidatorAddon(\"zod\"),\n arktype: ValidatorAddon(\"arktype\"),\n valibot: ValidatorAddon(\"valibot\"),\n};\n\nexport function resolveAddons(ctx: ScaffoldContext): AddonDefinition[] {\n const result: AddonDefinition[] = [];\n if (ctx.db && ADDONS[ctx.db]) {\n const addon = ADDONS[ctx.db];\n if (addon) result.push(addon);\n }\n if (ctx.logger && ADDONS[ctx.logger]) {\n const addon = ADDONS[ctx.logger];\n if (addon) result.push(addon);\n }\n if (ctx.validator && ADDONS[ctx.validator]) {\n const addon = ADDONS[ctx.validator];\n if (addon) result.push(addon);\n }\n return result;\n}\n\nexport function collectBootBindings(ctx: ScaffoldContext): BootBinding[] {\n const addons = resolveAddons(ctx);\n const bindings: BootBinding[] = [];\n for (const addon of addons) {\n if (addon.bootBinding) {\n const binding = addon.bootBinding(ctx);\n if (binding) {\n bindings.push(binding);\n }\n }\n }\n return bindings;\n}\n","import { execSync } from \"node:child_process\";\nimport { getUserAgent, resolveCommand, type Agent } from \"package-manager-detector\";\n\nexport function resolveUserAgent(): Agent {\n const detected = getUserAgent();\n return (detected as Agent) || \"pnpm\";\n}\n\nexport function runScript(agent: Agent, script: string): string {\n switch (agent) {\n case \"npm\":\n return `npm run ${script}`;\n case \"yarn\":\n return `yarn ${script}`;\n case \"bun\":\n return `bun run ${script}`;\n case \"pnpm\":\n default:\n return `pnpm ${script}`;\n }\n}\n\nexport async function installPackages(\n agent: Agent,\n cwd: string,\n packages: {\n dependencies: string[];\n devDependencies: string[];\n },\n): Promise<void> {\n if (packages.dependencies.length > 0) {\n const cmd = resolveCommand(agent, \"add\", packages.dependencies);\n if (cmd) {\n execSync(`${cmd.command} ${cmd.args.join(\" \")}`, {\n cwd,\n stdio: \"ignore\",\n });\n }\n }\n\n if (packages.devDependencies.length > 0) {\n const cmd = resolveCommand(agent, \"add\", [\n ...(agent === \"npm\" ? [\"--save-dev\"] : [\"-D\"]),\n ...packages.devDependencies,\n ]);\n if (cmd) {\n execSync(`${cmd.command} ${cmd.args.join(\" \")}`, {\n cwd,\n stdio: \"ignore\",\n });\n }\n }\n}\n","import { DEPLOY_TARGETS, type DeployTarget, type Runtime } from \"./types.js\";\n\nexport interface PlatformFile {\n name: string;\n content: string | ((ctx: { projectName: string }) => string);\n}\n\nexport interface DeployEntry {\n id: DeployTarget;\n impliedRuntime: Runtime | \"workerd\";\n selfHosted: boolean;\n startScript: string | null;\n devDeps: string[];\n files: PlatformFile[];\n}\n\nconst NITRO_NODE_START = \"node .output/server/index.mjs\";\n\nexport const DEPLOY_ENTRIES: Record<DeployTarget, DeployEntry> = {\n none: {\n id: \"none\",\n impliedRuntime: \"node\",\n selfHosted: true,\n startScript: \"node dist/serve.mjs\",\n devDeps: [\"srvx\"],\n files: [],\n },\n \"node-server\": {\n id: \"node-server\",\n impliedRuntime: \"node\",\n selfHosted: true,\n startScript: NITRO_NODE_START,\n devDeps: [\"nitro\"],\n files: [],\n },\n \"node-cluster\": {\n id: \"node-cluster\",\n impliedRuntime: \"node\",\n selfHosted: true,\n startScript: NITRO_NODE_START,\n devDeps: [\"nitro\"],\n files: [],\n },\n bun: {\n id: \"bun\",\n impliedRuntime: \"bun\",\n selfHosted: true,\n startScript: \"bun .output/server/index.mjs\",\n devDeps: [\"nitro\", \"@types/bun\"],\n files: [],\n },\n \"deno-server\": {\n id: \"deno-server\",\n impliedRuntime: \"deno\",\n selfHosted: true,\n startScript: \"deno run -A .output/server/index.mjs\",\n devDeps: [\"nitro\"],\n files: [],\n },\n \"deno-deploy\": {\n id: \"deno-deploy\",\n impliedRuntime: \"deno\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\"],\n files: [],\n },\n \"cloudflare-module\": {\n id: \"cloudflare-module\",\n impliedRuntime: \"workerd\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\", \"wrangler\", \"@cloudflare/workers-types\"],\n files: [\n {\n name: \"wrangler.jsonc\",\n content: ({ projectName }) =>\n `${JSON.stringify(\n {\n $schema: \"node_modules/wrangler/config-schema.json\",\n name: projectName,\n main: \".output/server/index.mjs\",\n compatibility_date: \"2024-11-01\",\n },\n null,\n 2,\n )}\\n`,\n },\n ],\n },\n vercel: {\n id: \"vercel\",\n impliedRuntime: \"node\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\", \"@vercel/node\"],\n files: [],\n },\n \"aws-lambda\": {\n id: \"aws-lambda\",\n impliedRuntime: \"node\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\", \"@types/aws-lambda\"],\n files: [],\n },\n netlify: {\n id: \"netlify\",\n impliedRuntime: \"node\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\"],\n files: [],\n },\n};\n\nconst RUNTIME_OVERRIDES: Partial<Record<DeployTarget, readonly Runtime[]>> = {\n none: [\"node\", \"bun\"],\n \"node-server\": [\"node\", \"bun\"],\n \"node-cluster\": [\"node\", \"bun\"],\n};\n\nexport const DEFAULT_DEPLOY: DeployTarget = \"none\";\n\nexport function isCuratedDeploy(value: string): value is DeployTarget {\n return (DEPLOY_TARGETS as readonly string[]).includes(value);\n}\n\nexport function resolveDeployEntry(id: string): { entry: DeployEntry; curated: boolean } {\n if (isCuratedDeploy(id)) {\n return { entry: DEPLOY_ENTRIES[id], curated: true };\n }\n return {\n entry: {\n id: id as DeployTarget,\n impliedRuntime: \"node\",\n selfHosted: false,\n startScript: null,\n devDeps: [\"nitro\"],\n files: [],\n },\n curated: false,\n };\n}\n\nexport function allowedRuntimeOverrides(id: DeployTarget): readonly Runtime[] {\n return RUNTIME_OVERRIDES[id] ?? [];\n}\n\nexport type CombinationError = { ok: false; reason: string };\nexport type CombinationOk = { ok: true; runtime: Runtime | \"workerd\" };\n\nexport function validateCombination(\n runtimeOverride: Runtime | undefined,\n deploy: string,\n): CombinationOk | CombinationError {\n const { entry } = resolveDeployEntry(deploy);\n\n if (runtimeOverride !== undefined) {\n const allowed = entry.selfHosted ? allowedRuntimeOverrides(entry.id) : [];\n if (!allowed.includes(runtimeOverride)) {\n return {\n ok: false,\n reason:\n `Runtime \"${runtimeOverride}\" is not valid for deploy target \"${entry.id}\". ` +\n (allowed.length > 0\n ? `Allowed overrides: ${allowed.join(\", \")}.`\n : `It implies runtime \"${String(entry.impliedRuntime)}\".`),\n };\n }\n }\n\n const effective = runtimeOverride ?? entry.impliedRuntime;\n return { ok: true, runtime: effective };\n}\n","import type { BootBinding } from \"../addons/types.js\";\n\nexport function packageJsonTemplate(\n projectName: string,\n scripts: Record<string, string> = {},\n): string {\n const pkg = {\n name: projectName,\n version: \"0.0.1\",\n private: true,\n type: \"module\",\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n start: \"node dist/serve.mjs\",\n ...scripts,\n },\n };\n\n return `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\nexport function tsconfigTemplate(): string {\n return `${JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n module: \"NodeNext\",\n moduleResolution: \"NodeNext\",\n strict: true,\n skipLibCheck: true,\n esModuleInterop: true,\n },\n include: [\n \"src/**/*\",\n \"src/.taserjs/**/*\",\n \"taserjs.config.ts\",\n \"vite.config.ts\",\n \"nitro.config.ts\",\n ],\n },\n null,\n 2,\n )}\\n`;\n}\n\nexport function gitignoreTemplate(): string {\n return `node_modules/\ndist/\n.output/\n.taserjs/\n.env\n.env.*\n!.env.example\n*.log\nlocal.db\ndrizzle/\n`;\n}\n\nexport function taserConfigTemplate(): string {\n return `import { defineConfig } from \"@taserjs/cli\";\n\nexport default defineConfig({\n serverDir: \"src\",\n routesDir: \"routes\",\n outputDir: \".taserjs\",\n app: \"taser.ts\",\n});\n`;\n}\n\nexport function viteConfigTemplate(preset: string = \"none\"): string {\n if (preset === \"none\") {\n return `import { defineConfig } from \"vite\";\nimport { taser } from \"@taserjs/plugin/vite\";\n\nexport default defineConfig({\n plugins: [taser()],\n});\n`;\n }\n\n return `import { defineConfig } from \"vite\";\nimport { nitro } from \"nitro/vite\";\nimport { taser } from \"@taserjs/plugin/vite\";\n\nexport default defineConfig({\n plugins: [taser(), nitro()],\n});\n`;\n}\n\nexport function nitroConfigTemplate(preset: string): string {\n return `import { defineConfig } from \"nitro/config\";\nimport { taser } from \"@taserjs/plugin/nitro\";\n\nexport default defineConfig({\n preset: \"${preset}\",\n modules: [taser({ standalone: true })],\n});\n`;\n}\n\nexport function contextTemplate(bindings: BootBinding[]): string {\n const imports = bindings.map((b) => `import { ${b.factoryName} } from \"${b.importPath}\";`);\n\n const bootBody =\n bindings.length > 0 ? bindings.map((b) => ` ${b.key}: ${b.factoryName}(),`).join(\"\\n\") : \"\";\n\n const bootBlock = bindings.length > 0 ? ` boot: () => ({\\n${bootBody}\\n }),\\n` : \"\";\n const importBlock = imports.length > 0 ? `${imports.join(\"\\n\")}\\n\\n` : \"\";\n\n return `${importBlock}import { createContext } from \"@taserjs/router\";\n\nexport const context = createContext({\n${bootBlock} request: () => ({\n requestId: crypto.randomUUID(),\n }),\n});\n`;\n}\n\nexport function taserTsTemplate(): string {\n return `import { defineTaser } from \"@taserjs/router\";\nimport { context } from \"./context.js\";\n\nexport default defineTaser().context(context);\n`;\n}\n\nexport function rootLayoutTemplate(): string {\n return `import { t } from \"@taserjs/router\";\n\nexport default t.layout(\"/*\").use(async (_args, next) => {\n return await next();\n});\n`;\n}\n\nexport function indexRouteTemplate(): string {\n return `import { t } from \"@taserjs/router\";\n\nexport default t.get(\"/\").handler(() => {\n return Response.json({ message: \"Welcome to Taser.js!\" });\n});\n`;\n}\n\nexport function staticRoutesGenTemplate(): string {\n return `// @ts-nocheck\nimport { createTaserApp } from \"@taserjs/runtime\";\nimport taser from \"../taser.js\";\nimport layout_0 from \"../routes/$.js\";\nimport route_0 from \"../routes/index.get.js\";\n\nexport type LayoutTree = {\n \"/*\": typeof layout_0;\n};\n\nexport const layoutManifest = {\n \"/*\": layout_0,\n} as const;\n\nexport const routeManifest = {\n layouts: layoutManifest,\n routes: {\n \"/\": {\n GET: {\n layouts: [\"/*\"],\n route: route_0,\n },\n },\n },\n} as const;\n\nexport type RouteManifest = typeof routeManifest;\n\nexport const app = createTaserApp(routeManifest, taser);\nexport default app;\nexport const createApp = (overrideTaser?: typeof taser) =>\n createTaserApp(routeManifest, overrideTaser ?? taser);\n\nexport type RoutePath = \"/\";\n\nexport type LayoutHierarchy = {\n \"/*\": readonly [];\n};\n\nexport type RouteByPathMethod = {\n \"/\": {\n GET: {\n layouts: readonly [\"/*\"];\n };\n };\n};\n\nexport type AppContext = typeof taser.$Infer.Context;\n\ndeclare module \"@taserjs/router\" {\n interface RouterRegister {\n RoutePath: RoutePath;\n LayoutTree: LayoutTree;\n LayoutHierarchy: LayoutHierarchy;\n RouteByPathMethod: RouteByPathMethod;\n AppContext: AppContext;\n }\n}\n`;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { collectBootBindings, resolveAddons } from \"../addons/registry.js\";\nimport { installPackages, resolveUserAgent } from \"./package-manager.js\";\nimport { resolveDeployEntry, validateCombination } from \"./targets.js\";\nimport type { ScaffoldOptions, ScaffoldResult } from \"./types.js\";\nimport {\n contextTemplate,\n gitignoreTemplate,\n indexRouteTemplate,\n nitroConfigTemplate,\n packageJsonTemplate,\n rootLayoutTemplate,\n staticRoutesGenTemplate,\n taserConfigTemplate,\n taserTsTemplate,\n tsconfigTemplate,\n viteConfigTemplate,\n} from \"../templates/base.js\";\n\nasync function write(filePath: string, contents: string): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, contents.trimStart(), \"utf-8\");\n}\n\nexport async function scaffoldProject(options: ScaffoldOptions): Promise<ScaffoldResult> {\n const root = options.targetDir;\n const preset = options.preset ?? \"none\";\n\n const combination = validateCombination(options.runtime, preset);\n if (!combination.ok) {\n throw new Error(combination.reason);\n }\n\n const writtenFiles: string[] = [];\n const trackedWrite = async (relPath: string, contents: string) => {\n const fullPath = join(root, relPath);\n await write(fullPath, contents);\n writtenFiles.push(relPath);\n };\n\n const addons = resolveAddons(options);\n const bootBindings = collectBootBindings(options);\n const { entry: deployEntry } = resolveDeployEntry(preset);\n\n // Collect scripts & dependencies\n const scripts: Record<string, string> = {};\n if (deployEntry.startScript) {\n scripts.start = deployEntry.startScript;\n }\n\n const dependencies: string[] = [\"@taserjs/router\", \"@taserjs/runtime\"];\n const devDependencies: string[] = [\"@taserjs/cli\", \"@taserjs/plugin\", \"typescript\", \"vite\"];\n\n for (const dep of deployEntry.devDeps) {\n devDependencies.push(dep);\n }\n\n for (const addon of addons) {\n dependencies.push(...addon.dependencies(options));\n devDependencies.push(...addon.devDependencies(options));\n if (addon.scripts) {\n Object.assign(scripts, addon.scripts(options));\n }\n }\n\n // Override versions from packageVersions if provided\n const formatDep = (pkg: string): string => {\n const ver = options.packageVersions?.[pkg];\n return ver ? `${pkg}@${ver}` : pkg;\n };\n\n const resolvedDeps = [...new Set(dependencies)].map(formatDep);\n const resolvedDevDeps = [...new Set(devDependencies)].map(formatDep);\n\n // 1. package.json\n await trackedWrite(\"package.json\", packageJsonTemplate(options.projectName, scripts));\n\n // 2. tsconfig.json\n await trackedWrite(\"tsconfig.json\", tsconfigTemplate());\n\n // 3. .gitignore\n await trackedWrite(\".gitignore\", gitignoreTemplate());\n\n // 4. taserjs.config.ts\n await trackedWrite(\"taserjs.config.ts\", taserConfigTemplate());\n\n // 5. vite.config.ts\n await trackedWrite(\"vite.config.ts\", viteConfigTemplate(preset));\n\n // 6. nitro.config.ts (if preset is selected)\n if (preset !== \"none\") {\n await trackedWrite(\"nitro.config.ts\", nitroConfigTemplate(preset));\n }\n\n // 7. Platform files (e.g. wrangler.jsonc)\n await Promise.all(\n deployEntry.files.map(async (file) => {\n const content =\n typeof file.content === \"function\"\n ? file.content({ projectName: options.projectName })\n : file.content;\n await trackedWrite(file.name, content);\n }),\n );\n\n // 8. src/context.ts\n await trackedWrite(\"src/context.ts\", contextTemplate(bootBindings));\n\n // 9. src/taser.ts\n await trackedWrite(\"src/taser.ts\", taserTsTemplate());\n\n // 10. Routes: src/routes/index.get.ts & src/routes/$.ts\n await trackedWrite(\"src/routes/index.get.ts\", indexRouteTemplate());\n await trackedWrite(\"src/routes/$.ts\", rootLayoutTemplate());\n\n // 12. Apply Addons (custom routes, db schemas, configs)\n await Promise.all(\n addons.map(async (addon) => {\n await addon.apply(options, async (relPath, contents) => {\n await trackedWrite(relPath, contents);\n });\n }),\n );\n\n // 13. Static routes.gen.ts starter manifest\n await trackedWrite(\"src/.taserjs/routes.gen.ts\", staticRoutesGenTemplate());\n\n // Install dependencies if not skipped\n if (!options.skipInstall) {\n const agent = options.agent ?? resolveUserAgent();\n await installPackages(agent, root, {\n dependencies: resolvedDeps,\n devDependencies: resolvedDevDeps,\n });\n }\n\n return {\n ...options,\n files: writtenFiles,\n };\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { resolveUserAgent, runScript } from \"../core/package-manager.js\";\nimport { scaffoldProject } from \"../core/scaffold-engine.js\";\nimport { allowedRuntimeOverrides, DEFAULT_DEPLOY } from \"../core/targets.js\";\nimport type {\n DbDriver,\n DbOdm,\n DeployTarget,\n LoggerId,\n Runtime,\n ScaffoldOptions,\n ScaffoldResult,\n ValidatorId,\n} from \"../core/types.js\";\nimport { DEPLOY_TARGETS } from \"../core/types.js\";\n\nconst DEPLOY_LABELS: Record<DeployTarget, string> = {\n none: \"None (Standalone Vite SSR)\",\n \"node-server\": \"Node.js server (Nitro)\",\n \"node-cluster\": \"Node.js cluster (Nitro)\",\n bun: \"Bun (Nitro)\",\n \"deno-server\": \"Deno (Nitro)\",\n \"deno-deploy\": \"Deno Deploy (Nitro)\",\n \"cloudflare-module\": \"Cloudflare Workers (Nitro)\",\n vercel: \"Vercel (Nitro)\",\n \"aws-lambda\": \"AWS Lambda (Nitro)\",\n netlify: \"Netlify (Nitro)\",\n};\n\nexport interface RunCreateCommandOptions {\n projectName?: string | undefined;\n preset?: DeployTarget | undefined;\n runtime?: Runtime | undefined;\n db?: DbOdm | undefined;\n driver?: DbDriver | undefined;\n logger?: LoggerId | undefined;\n validator?: ValidatorId | undefined;\n skipInstall?: boolean | undefined;\n interactive?: boolean | undefined;\n targetDir?: string | undefined;\n packageVersions?: Record<string, string> | undefined;\n}\n\nexport async function promptInteractiveOptions(\n defaults: RunCreateCommandOptions,\n): Promise<RunCreateCommandOptions> {\n const projectName =\n defaults.projectName ??\n (await p.text({\n message: \"Project name\",\n placeholder: \"my-taser-app\",\n defaultValue: \"my-taser-app\",\n validate(value) {\n if (!value || value.trim().length === 0) return \"Project name cannot be empty\";\n if (/[^a-zA-Z0-9_-]/.test(value)) return \"Project name contains invalid characters\";\n return undefined;\n },\n }));\n\n if (p.isCancel(projectName)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n\n const preset =\n defaults.preset ??\n (await p.select({\n message: \"Deployment target\",\n options: DEPLOY_TARGETS.map((id) => ({\n value: id,\n label: DEPLOY_LABELS[id],\n })),\n initialValue: \"none\",\n }));\n\n if (p.isCancel(preset)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n\n let runtime: Runtime | undefined;\n const runtimeOverrides = allowedRuntimeOverrides(preset as DeployTarget);\n if (runtimeOverrides.length > 0) {\n const runtimeChoice =\n defaults.runtime ??\n (await p.select({\n message: \"Runtime override\",\n options: [\n ...runtimeOverrides.map((rt) => ({ value: rt, label: rt })),\n { value: \"default\", label: \"Preset default\", hint: \"no override\" },\n ],\n initialValue: \"default\",\n }));\n\n if (p.isCancel(runtimeChoice)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n runtime = runtimeChoice === \"default\" ? undefined : (runtimeChoice as Runtime);\n }\n\n const validatorChoice =\n defaults.validator ??\n (await p.select({\n message: \"Standard Schema Validator\",\n options: [\n { value: \"none\", label: \"None\", hint: \"default\" },\n { value: \"zod\", label: \"Zod\" },\n { value: \"valibot\", label: \"Valibot\" },\n { value: \"arktype\", label: \"Arktype\" },\n ],\n initialValue: \"none\",\n }));\n\n if (p.isCancel(validatorChoice)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n\n const validator = validatorChoice === \"none\" ? undefined : (validatorChoice as ValidatorId);\n\n const dbChoice =\n defaults.db ??\n (await p.select({\n message: \"Database ORM / Query Builder\",\n options: [\n { value: \"none\", label: \"None\", hint: \"default\" },\n { value: \"drizzle\", label: \"Drizzle\" },\n { value: \"prisma\", label: \"Prisma\" },\n { value: \"kysely\", label: \"Kysely\" },\n ],\n initialValue: \"none\",\n }));\n\n if (p.isCancel(dbChoice)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n\n let db: DbOdm | undefined;\n let driver: DbDriver | undefined;\n\n if (dbChoice !== \"none\") {\n db = dbChoice as DbOdm;\n const driverChoice =\n defaults.driver ??\n (await p.select({\n message: \"Database driver\",\n options: [\n { value: \"sqlite\", label: \"SQLite\", hint: \"default\" },\n { value: \"postgres\", label: \"PostgreSQL\" },\n { value: \"mysql\", label: \"MySQL\" },\n ],\n initialValue: \"sqlite\",\n }));\n\n if (p.isCancel(driverChoice)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n driver = driverChoice as DbDriver;\n }\n\n const loggerChoice =\n defaults.logger ??\n (await p.select({\n message: \"Logger\",\n options: [\n { value: \"none\", label: \"None\", hint: \"default\" },\n { value: \"pino\", label: \"Pino\" },\n { value: \"winston\", label: \"Winston\" },\n ],\n initialValue: \"none\",\n }));\n\n if (p.isCancel(loggerChoice)) {\n p.cancel(\"Scaffold cancelled.\");\n process.exit(0);\n }\n\n const logger = loggerChoice === \"none\" ? undefined : (loggerChoice as LoggerId);\n\n return {\n projectName: String(projectName).trim(),\n preset: preset as DeployTarget,\n ...(runtime ? { runtime } : {}),\n ...(validator ? { validator } : {}),\n ...(db ? { db, driver } : {}),\n ...(logger ? { logger } : {}),\n skipInstall: defaults.skipInstall,\n };\n}\n\nexport async function runCreateCommand(\n args: RunCreateCommandOptions = {},\n): Promise<ScaffoldResult> {\n const isInteractive =\n args.interactive ?? (Boolean(process.stdout.isTTY) && process.env.NODE_ENV !== \"test\");\n\n const resolved = isInteractive\n ? await promptInteractiveOptions(args)\n : {\n ...args,\n projectName: args.projectName ?? \"my-taser-app\",\n preset: args.preset ?? DEFAULT_DEPLOY,\n };\n\n const cwd = process.cwd();\n const projectName = resolved.projectName || \"my-taser-app\";\n const targetDir = args.targetDir\n ? path.resolve(cwd, args.targetDir)\n : path.resolve(cwd, projectName);\n\n const scaffoldOpts: ScaffoldOptions = {\n projectName,\n targetDir,\n ...(resolved.preset !== undefined ? { preset: resolved.preset } : {}),\n ...(resolved.runtime !== undefined ? { runtime: resolved.runtime } : {}),\n ...(resolved.validator !== undefined ? { validator: resolved.validator } : {}),\n ...(resolved.db !== undefined ? { db: resolved.db } : {}),\n ...(resolved.driver !== undefined ? { driver: resolved.driver } : {}),\n ...(resolved.logger !== undefined ? { logger: resolved.logger } : {}),\n ...(args.packageVersions !== undefined ? { packageVersions: args.packageVersions } : {}),\n skipInstall: resolved.skipInstall ?? process.env.NODE_ENV === \"test\",\n };\n\n if (isInteractive) {\n const s = p.spinner();\n s.start(\"Scaffolding project\");\n const result = await scaffoldProject(scaffoldOpts);\n s.stop(\"Project created\");\n\n const agent = resolveUserAgent();\n p.outro(pc.green(\"Done!\"));\n console.log(`\\nNext steps:`);\n console.log(` cd ${path.relative(cwd, targetDir) || \".\"}`);\n if (scaffoldOpts.skipInstall) {\n console.log(` ${runScript(agent, \"install\")}`);\n }\n console.log(` ${runScript(agent, \"dev\")}\\n`);\n return result;\n }\n\n return await scaffoldProject(scaffoldOpts);\n}\n","#!/usr/bin/env node\nimport yargs from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport { runCreateCommand, type RunCreateCommandOptions } from \"./commands/create.js\";\nimport type {\n DbDriver,\n DbOdm,\n DeployTarget,\n LoggerId,\n Runtime,\n ValidatorId,\n} from \"./core/types.js\";\n\nexport async function run(argv: string[] = hideBin(process.argv)): Promise<void> {\n const parser = yargs(argv)\n .scriptName(\"create-taserjs\")\n .usage(\"$0 [dir] [options]\")\n .command(\n \"$0 [dir]\",\n \"Scaffold a new Taser.js application\",\n (y: any) =>\n y\n .positional(\"dir\", {\n type: \"string\",\n description: \"Directory or project name\",\n })\n .option(\"preset\", {\n alias: \"p\",\n type: \"string\",\n description: \"Deployment preset\",\n })\n .option(\"runtime\", {\n type: \"string\",\n description: \"Runtime override (node, bun, deno)\",\n })\n .option(\"validator\", {\n alias: \"v\",\n type: \"string\",\n choices: [\"zod\", \"valibot\", \"arktype\", \"none\"],\n description: \"Standard Schema validator\",\n })\n .option(\"db\", {\n type: \"string\",\n choices: [\"drizzle\", \"prisma\", \"kysely\", \"none\"],\n description: \"Database ORM / Query builder\",\n })\n .option(\"driver\", {\n type: \"string\",\n choices: [\"sqlite\", \"postgres\", \"mysql\"],\n description: \"Database driver\",\n })\n .option(\"logger\", {\n alias: \"l\",\n type: \"string\",\n choices: [\"pino\", \"winston\", \"none\"],\n description: \"Logger addon\",\n })\n .option(\"skip-install\", {\n type: \"boolean\",\n description: \"Skip dependency installation\",\n default: false,\n })\n .option(\"yes\", {\n alias: \"y\",\n type: \"boolean\",\n description: \"Skip prompts and use defaults\",\n default: false,\n }),\n async (args: any) => {\n const createOpts: RunCreateCommandOptions = {\n targetDir: args.dir as string | undefined,\n projectName: args.dir as string | undefined,\n preset: args.preset as DeployTarget | undefined,\n runtime: args.runtime as Runtime | undefined,\n validator: (args.validator === \"none\" ? undefined : args.validator) as\n | ValidatorId\n | undefined,\n db: (args.db === \"none\" ? undefined : args.db) as DbOdm | undefined,\n driver: args.driver as DbDriver | undefined,\n logger: (args.logger === \"none\" ? undefined : args.logger) as LoggerId | undefined,\n skipInstall: Boolean(args.skipInstall),\n interactive: !args.yes,\n };\n await runCreateCommand(createOpts);\n },\n )\n .help()\n .alias(\"help\", \"h\")\n .version()\n .alias(\"version\", \"V\")\n .strict()\n .exitProcess(false);\n\n await parser.parse();\n}\n\nif (process.argv[1] && process.argv[1].endsWith(\"cli.js\")) {\n run().catch((err: unknown) => {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n });\n}\n"],"mappings":";;;;;;;;;AAGA,MAAa,WAA+B;CAAC;CAAQ;CAAO;AAAM;AAclE,MAAa,iBAA0C;CACrD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAGA,MAAa,UAA4B;CAAC;CAAW;CAAU;AAAQ;AAGvE,MAAa,aAAkC;CAAC;CAAY;CAAU;AAAO;AAC7E,MAAa,oBAA8B;AAG3C,MAAa,UAA+B,CAAC,QAAQ,SAAS;AAG9D,MAAa,aAAqC;CAAC;CAAO;CAAW;AAAS;;;ACtC9E,SAASA,eAAa,QAA0B;CAC9C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;EAOT,KAAK,SACH,OAAO;;;;;;;EAQT,SACE,OAAO;;;;;;;CAOX;AACF;AAEA,SAASC,gBAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;EAWT,KAAK,SACH,OAAO;;;;;;;;;EAUT,SACE,OAAO;;;;;;;;;;CAUX;AACF;AAEA,SAAS,oBAAoB,QAA0B;CAErD,OAAO;;;;;cADS,WAAW,aAAa,eAAe,WAAW,UAAU,UAAU,SAMlE;;;;;;AAMtB;AAEA,SAASC,aAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAASC,iBAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,SAASC,oBAAkB,QAA4B;CACrD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,WAAW;EACrB,KAAK,UACH,OAAO,CAAC,uBAAuB;EAEjC,SACE,OAAO,CAAC;CACZ;AACF;AAEA,MAAa,eAAgC;CAC3C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,eAAe,GAAGD,iBADX,IAAI,UAAU,QACkB,CAAC;CAClD;CACA,gBAAgB,KAAK;EAEnB,OAAO,CAAC,eAAe,GAAGC,oBADX,IAAI,UAAU,QACqB,CAAC;CACrD;CACA,UAAU;EACR,OAAO;GACL,eAAe;GACf,WAAW;EACb;CACF;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoBJ,eAAa,MAAM,CAAC;EACpD,MAAM,MAAM,mBAAmBC,gBAAc,MAAM,CAAC;EACpD,MAAM,MAAM,qBAAqB,oBAAoB,MAAM,CAAC;EAC5D,MAAM,MAAM,gBAAgBC,aAAW,MAAM,CAAC;CAChD;AACF;;;ACvJA,SAAS,oBAA4B;CACnC,OAAO;;;;;;;;;AAST;AAEA,SAASG,gBAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;;;EAaT,KAAK,SACH,OAAO;;;;;;;;;;;EAYT,SACE,OAAO;;;;;;;;;;;;CAYX;AACF;AAEA,SAASC,iBAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,SAASC,oBAAkB,QAA4B;CACrD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,WAAW;EACrB,KAAK,UACH,OAAO,CAAC,uBAAuB;EAEjC,SACE,OAAO,CAAC;CACZ;AACF;AAEA,SAASC,aAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,MAAa,cAA+B;CAC1C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,UAAU,GAAGF,iBADN,IAAI,UAAU,QACa,CAAC;CAC7C;CACA,gBAAgB,KAAK;EAEnB,OAAOC,oBADQ,IAAI,UAAU,QACE;CACjC;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,kBAAkB,CAAC;EACnD,MAAM,MAAM,mBAAmBF,gBAAc,MAAM,CAAC;EACpD,MAAM,MAAM,gBAAgBG,aAAW,MAAM,CAAC;CAChD;AACF;;;ACtHA,MAAa,YAA6B;CACxC,IAAI;CACJ,UAAU;CACV,eAAe;EACb,OAAO,CAAC,MAAM;CAChB;CACA,kBAAkB;EAChB,OAAO,CAAC;CACV;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,MAAM,OAAO;EACvB,MAAM,MACJ,iBACA;;;;;CAMF;CACF;AACF;;;AC1BA,MAAM,iBAAiB;AAEvB,SAAS,cAAc,MAAsB;CAC3C,OAAO,GAAG,KAAK,GAAG;AACpB;AAEA,SAAS,eAAe,QAA0B;CAChD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAAS,eAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,cAAc,oBAAoB,GAAG,IAAI;EACnD,KAAK,SACH,OAAO,CAAC,cAAc,yBAAyB,GAAG,SAAS;EAE7D,SACE,OAAO,CAAC,cAAc,gCAAgC,GAAG,gBAAgB;CAC7E;AACF;AAEA,SAAS,kBAAkB,QAA4B;CACrD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,WAAW;EACrB,KAAK,UACH,OAAO,CAAC,uBAAuB;EAEjC,SACE,OAAO,CAAC;CACZ;AACF;AAEA,SAAS,cAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;EAUT,KAAK,SACH,OAAO;;;;;;;;EAST,SACE,OAAO;;;;;;;;;;CAUX;AACF;AAEA,SAAS,qBAA6B;CACpC,OAAO;;;;;;;;;;AAUT;AAEA,SAAS,aAAa,QAA0B;CAE9C,OAAO;;;;;;gBADU,eAAe,MAOX,EAAE;;;;;;;;AAQzB;AAEA,MAAa,cAA+B;CAC1C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAChB,MAAM,SAAS,IAAI,UAAU;EAC7B,OAAO,CAAC,cAAc,gBAAgB,GAAG,GAAG,eAAe,MAAM,CAAC;CACpE;CACA,gBAAgB,KAAK;EACnB,MAAM,SAAS,IAAI,UAAU;EAC7B,OAAO,CAAC,cAAc,QAAQ,GAAG,GAAG,kBAAkB,MAAM,CAAC;CAC/D;CACA,UAAU;EACR,OAAO;GACL,eAAe;GACf,WAAW;EACb;CACF;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,mBAAmB,CAAC;EACpD,MAAM,MAAM,wBAAwB,aAAa,MAAM,CAAC;EACxD,MAAM,MAAM,mBAAmB,cAAc,MAAM,CAAC;EACpD,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF;;;ACzJA,MAAa,eAA4C;CACvD,KAAK;CACL,SAAS;CACT,SAAS;AACX;AAEA,MAAa,oBAAiD;CAC5D,KAAK;CACL,SAAS;CACT,SAAS;AACX;AAEA,MAAa,kBAAkB,cAA4C;CACzE,OAAO;EACL,IAAI;EACJ,UAAU;EACV,oBAAoB,CAAC,SAAS;EAC9B,uBAAuB,CAAC;EACxB,OAAO,OAAO,MAAM,UAAU;GAW5B,MAAM,MAAM,2BAA2B;EAT3C,aAAa,WAAW;;;;WAIf,kBAAkB,WAAW;;;;CAKY;EAChD;CACF;AACF;;;AE1BA,MAAa,SAA0C;CACrD,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;EDXT,IAAI;EACJ,UAAU;EACV,eAAe;GACb,OAAO,CAAC,SAAS;EACnB;EACA,kBAAkB;GAChB,OAAO,CAAC;EACV;EACA,cAAc;GACZ,OAAO;IACL,KAAK;IACL,YAAY;IACZ,aAAa;GACf;EACF;EACA,MAAM,MAAM,MAAM,OAAO;GACvB,MAAM,MACJ,iBACA;;;;;;;;;CAUF;EACF;CClBS;CACT,KAAK,eAAe,KAAK;CACzB,SAAS,eAAe,SAAS;CACjC,SAAS,eAAe,SAAS;AACnC;AAEA,SAAgB,cAAc,KAAyC;CACrE,MAAM,SAA4B,CAAC;CACnC,IAAI,IAAI,MAAM,OAAO,IAAI,KAAK;EAC5B,MAAM,QAAQ,OAAO,IAAI;EACzB,IAAI,OAAO,OAAO,KAAK,KAAK;CAC9B;CACA,IAAI,IAAI,UAAU,OAAO,IAAI,SAAS;EACpC,MAAM,QAAQ,OAAO,IAAI;EACzB,IAAI,OAAO,OAAO,KAAK,KAAK;CAC9B;CACA,IAAI,IAAI,aAAa,OAAO,IAAI,YAAY;EAC1C,MAAM,QAAQ,OAAO,IAAI;EACzB,IAAI,OAAO,OAAO,KAAK,KAAK;CAC9B;CACA,OAAO;AACT;AAEA,SAAgB,oBAAoB,KAAqC;CACvE,MAAM,SAAS,cAAc,GAAG;CAChC,MAAM,WAA0B,CAAC;CACjC,KAAK,MAAM,SAAS,QAClB,IAAI,MAAM,aAAa;EACrB,MAAM,UAAU,MAAM,YAAY,GAAG;EACrC,IAAI,SACF,SAAS,KAAK,OAAO;CAEzB;CAEF,OAAO;AACT;;;AC9CA,SAAgB,mBAA0B;CAExC,OADiB,aACF,KAAe;AAChC;AAEA,SAAgB,UAAU,OAAc,QAAwB;CAC9D,QAAQ,OAAR;EACE,KAAK,OACH,OAAO,WAAW;EACpB,KAAK,QACH,OAAO,QAAQ;EACjB,KAAK,OACH,OAAO,WAAW;EAEpB,SACE,OAAO,QAAQ;CACnB;AACF;AAEA,eAAsB,gBACpB,OACA,KACA,UAIe;CACf,IAAI,SAAS,aAAa,SAAS,GAAG;EACpC,MAAM,MAAM,eAAe,OAAO,OAAO,SAAS,YAAY;EAC9D,IAAI,KACF,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,KAAK,KAAK,GAAG,KAAK;GAC/C;GACA,OAAO;EACT,CAAC;CAEL;CAEA,IAAI,SAAS,gBAAgB,SAAS,GAAG;EACvC,MAAM,MAAM,eAAe,OAAO,OAAO,CACvC,GAAI,UAAU,QAAQ,CAAC,YAAY,IAAI,CAAC,IAAI,GAC5C,GAAG,SAAS,eACd,CAAC;EACD,IAAI,KACF,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,KAAK,KAAK,GAAG,KAAK;GAC/C;GACA,OAAO;EACT,CAAC;CAEL;AACF;;;ACpCA,MAAM,mBAAmB;AAEzB,MAAa,iBAAoD;CAC/D,MAAM;EACJ,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,MAAM;EAChB,OAAO,CAAC;CACV;CACA,eAAe;EACb,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,OAAO,CAAC;CACV;CACA,gBAAgB;EACd,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,OAAO,CAAC;CACV;CACA,KAAK;EACH,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,SAAS,YAAY;EAC/B,OAAO,CAAC;CACV;CACA,eAAe;EACb,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,OAAO,CAAC;CACV;CACA,eAAe;EACb,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,OAAO,CAAC;CACV;CACA,qBAAqB;EACnB,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS;GAAC;GAAS;GAAY;EAA2B;EAC1D,OAAO,CACL;GACE,MAAM;GACN,UAAU,EAAE,kBACV,GAAG,KAAK,UACN;IACE,SAAS;IACT,MAAM;IACN,MAAM;IACN,oBAAoB;GACtB,GACA,MACA,CACF,EAAE;EACN,CACF;CACF;CACA,QAAQ;EACN,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,SAAS,cAAc;EACjC,OAAO,CAAC;CACV;CACA,cAAc;EACZ,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,SAAS,mBAAmB;EACtC,OAAO,CAAC;CACV;CACA,SAAS;EACP,IAAI;EACJ,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,SAAS,CAAC,OAAO;EACjB,OAAO,CAAC;CACV;AACF;AAEA,MAAM,oBAAuE;CAC3E,MAAM,CAAC,QAAQ,KAAK;CACpB,eAAe,CAAC,QAAQ,KAAK;CAC7B,gBAAgB,CAAC,QAAQ,KAAK;AAChC;AAEA,MAAa,iBAA+B;AAE5C,SAAgB,gBAAgB,OAAsC;CACpE,OAAQ,eAAqC,SAAS,KAAK;AAC7D;AAEA,SAAgB,mBAAmB,IAAsD;CACvF,IAAI,gBAAgB,EAAE,GACpB,OAAO;EAAE,OAAO,eAAe;EAAK,SAAS;CAAK;CAEpD,OAAO;EACL,OAAO;GACD;GACJ,gBAAgB;GAChB,YAAY;GACZ,aAAa;GACb,SAAS,CAAC,OAAO;GACjB,OAAO,CAAC;EACV;EACA,SAAS;CACX;AACF;AAEA,SAAgB,wBAAwB,IAAsC;CAC5E,OAAO,kBAAkB,OAAO,CAAC;AACnC;AAKA,SAAgB,oBACd,iBACA,QACkC;CAClC,MAAM,EAAE,UAAU,mBAAmB,MAAM;CAE3C,IAAI,oBAAoB,KAAA,GAAW;EACjC,MAAM,UAAU,MAAM,aAAa,wBAAwB,MAAM,EAAE,IAAI,CAAC;EACxE,IAAI,CAAC,QAAQ,SAAS,eAAe,GACnC,OAAO;GACL,IAAI;GACJ,QACE,YAAY,gBAAgB,oCAAoC,MAAM,GAAG,QACxE,QAAQ,SAAS,IACd,sBAAsB,QAAQ,KAAK,IAAI,EAAE,KACzC,uBAAuB,OAAO,MAAM,cAAc,EAAE;EAC5D;CAEJ;CAGA,OAAO;EAAE,IAAI;EAAM,SADD,mBAAmB,MAAM;CACL;AACxC;;;AC5KA,SAAgB,oBACd,aACA,UAAkC,CAAC,GAC3B;CACR,MAAM,MAAM;EACV,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,OAAO;GACP,GAAG;EACL;CACF;CAEA,OAAO,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE;AACzC;AAEA,SAAgB,mBAA2B;CACzC,OAAO,GAAG,KAAK,UACb;EACE,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,kBAAkB;GAClB,QAAQ;GACR,cAAc;GACd,iBAAiB;EACnB;EACA,SAAS;GACP;GACA;GACA;GACA;GACA;EACF;CACF,GACA,MACA,CACF,EAAE;AACJ;AAEA,SAAgB,oBAA4B;CAC1C,OAAO;;;;;;;;;;;AAWT;AAEA,SAAgB,sBAA8B;CAC5C,OAAO;;;;;;;;;AAST;AAEA,SAAgB,mBAAmB,SAAiB,QAAgB;CAClE,IAAI,WAAW,QACb,OAAO;;;;;;;CAST,OAAO;;;;;;;;AAQT;AAEA,SAAgB,oBAAoB,QAAwB;CAC1D,OAAO;;;;aAII,OAAO;;;;AAIpB;AAEA,SAAgB,gBAAgB,UAAiC;CAC/D,MAAM,UAAU,SAAS,KAAK,MAAM,YAAY,EAAE,YAAY,WAAW,EAAE,WAAW,GAAG;CAEzF,MAAM,WACJ,SAAS,SAAS,IAAI,SAAS,KAAK,MAAM,OAAO,EAAE,IAAI,IAAI,EAAE,YAAY,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI;CAE9F,MAAM,YAAY,SAAS,SAAS,IAAI,qBAAqB,SAAS,aAAa;CAGnF,OAAO,GAFa,QAAQ,SAAS,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,QAAQ,GAEjD;;;EAGtB,UAAU;;;;;AAKZ;AAEA,SAAgB,kBAA0B;CACxC,OAAO;;;;;AAKT;AAEA,SAAgB,qBAA6B;CAC3C,OAAO;;;;;;AAMT;AAEA,SAAgB,qBAA6B;CAC3C,OAAO;;;;;;AAMT;AAEA,SAAgB,0BAAkC;CAChD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT;;;AC7LA,eAAe,MAAM,UAAkB,UAAiC;CACtE,MAAM,MAAM,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;CAClD,MAAM,UAAU,UAAU,SAAS,UAAU,GAAG,OAAO;AACzD;AAEA,eAAsB,gBAAgB,SAAmD;CACvF,MAAM,OAAO,QAAQ;CACrB,MAAM,SAAS,QAAQ,UAAU;CAEjC,MAAM,cAAc,oBAAoB,QAAQ,SAAS,MAAM;CAC/D,IAAI,CAAC,YAAY,IACf,MAAM,IAAI,MAAM,YAAY,MAAM;CAGpC,MAAM,eAAyB,CAAC;CAChC,MAAM,eAAe,OAAO,SAAiB,aAAqB;EAEhE,MAAM,MADW,KAAK,MAAM,OACT,GAAG,QAAQ;EAC9B,aAAa,KAAK,OAAO;CAC3B;CAEA,MAAM,SAAS,cAAc,OAAO;CACpC,MAAM,eAAe,oBAAoB,OAAO;CAChD,MAAM,EAAE,OAAO,gBAAgB,mBAAmB,MAAM;CAGxD,MAAM,UAAkC,CAAC;CACzC,IAAI,YAAY,aACd,QAAQ,QAAQ,YAAY;CAG9B,MAAM,eAAyB,CAAC,mBAAmB,kBAAkB;CACrE,MAAM,kBAA4B;EAAC;EAAgB;EAAmB;EAAc;CAAM;CAE1F,KAAK,MAAM,OAAO,YAAY,SAC5B,gBAAgB,KAAK,GAAG;CAG1B,KAAK,MAAM,SAAS,QAAQ;EAC1B,aAAa,KAAK,GAAG,MAAM,aAAa,OAAO,CAAC;EAChD,gBAAgB,KAAK,GAAG,MAAM,gBAAgB,OAAO,CAAC;EACtD,IAAI,MAAM,SACR,OAAO,OAAO,SAAS,MAAM,QAAQ,OAAO,CAAC;CAEjD;CAGA,MAAM,aAAa,QAAwB;EACzC,MAAM,MAAM,QAAQ,kBAAkB;EACtC,OAAO,MAAM,GAAG,IAAI,GAAG,QAAQ;CACjC;CAEA,MAAM,eAAe,CAAC,GAAG,IAAI,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,SAAS;CAC7D,MAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,SAAS;CAGnE,MAAM,aAAa,gBAAgB,oBAAoB,QAAQ,aAAa,OAAO,CAAC;CAGpF,MAAM,aAAa,iBAAiB,iBAAiB,CAAC;CAGtD,MAAM,aAAa,cAAc,kBAAkB,CAAC;CAGpD,MAAM,aAAa,qBAAqB,oBAAoB,CAAC;CAG7D,MAAM,aAAa,kBAAkB,mBAAmB,MAAM,CAAC;CAG/D,IAAI,WAAW,QACb,MAAM,aAAa,mBAAmB,oBAAoB,MAAM,CAAC;CAInE,MAAM,QAAQ,IACZ,YAAY,MAAM,IAAI,OAAO,SAAS;EACpC,MAAM,UACJ,OAAO,KAAK,YAAY,aACpB,KAAK,QAAQ,EAAE,aAAa,QAAQ,YAAY,CAAC,IACjD,KAAK;EACX,MAAM,aAAa,KAAK,MAAM,OAAO;CACvC,CAAC,CACH;CAGA,MAAM,aAAa,kBAAkB,gBAAgB,YAAY,CAAC;CAGlE,MAAM,aAAa,gBAAgB,gBAAgB,CAAC;CAGpD,MAAM,aAAa,2BAA2B,mBAAmB,CAAC;CAClE,MAAM,aAAa,mBAAmB,mBAAmB,CAAC;CAG1D,MAAM,QAAQ,IACZ,OAAO,IAAI,OAAO,UAAU;EAC1B,MAAM,MAAM,MAAM,SAAS,OAAO,SAAS,aAAa;GACtD,MAAM,aAAa,SAAS,QAAQ;EACtC,CAAC;CACH,CAAC,CACH;CAGA,MAAM,aAAa,8BAA8B,wBAAwB,CAAC;CAG1E,IAAI,CAAC,QAAQ,aAEX,MAAM,gBADQ,QAAQ,SAAS,iBAAiB,GACnB,MAAM;EACjC,cAAc;EACd,iBAAiB;CACnB,CAAC;CAGH,OAAO;EACL,GAAG;EACH,OAAO;CACT;AACF;;;AC3HA,MAAM,gBAA8C;CAClD,MAAM;CACN,eAAe;CACf,gBAAgB;CAChB,KAAK;CACL,eAAe;CACf,eAAe;CACf,qBAAqB;CACrB,QAAQ;CACR,cAAc;CACd,SAAS;AACX;AAgBA,eAAsB,yBACpB,UACkC;CAClC,MAAM,cACJ,SAAS,eACR,MAAM,EAAE,KAAK;EACZ,SAAS;EACT,aAAa;EACb,cAAc;EACd,SAAS,OAAO;GACd,IAAI,CAAC,SAAS,MAAM,KAAK,CAAC,CAAC,WAAW,GAAG,OAAO;GAChD,IAAI,iBAAiB,KAAK,KAAK,GAAG,OAAO;EAE3C;CACF,CAAC;CAEH,IAAI,EAAE,SAAS,WAAW,GAAG;EAC3B,EAAE,OAAO,qBAAqB;EAC9B,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,SACJ,SAAS,UACR,MAAM,EAAE,OAAO;EACd,SAAS;EACT,SAAS,eAAe,KAAK,QAAQ;GACnC,OAAO;GACP,OAAO,cAAc;EACvB,EAAE;EACF,cAAc;CAChB,CAAC;CAEH,IAAI,EAAE,SAAS,MAAM,GAAG;EACtB,EAAE,OAAO,qBAAqB;EAC9B,QAAQ,KAAK,CAAC;CAChB;CAEA,IAAI;CACJ,MAAM,mBAAmB,wBAAwB,MAAsB;CACvE,IAAI,iBAAiB,SAAS,GAAG;EAC/B,MAAM,gBACJ,SAAS,WACR,MAAM,EAAE,OAAO;GACd,SAAS;GACT,SAAS,CACP,GAAG,iBAAiB,KAAK,QAAQ;IAAE,OAAO;IAAI,OAAO;GAAG,EAAE,GAC1D;IAAE,OAAO;IAAW,OAAO;IAAkB,MAAM;GAAc,CACnE;GACA,cAAc;EAChB,CAAC;EAEH,IAAI,EAAE,SAAS,aAAa,GAAG;GAC7B,EAAE,OAAO,qBAAqB;GAC9B,QAAQ,KAAK,CAAC;EAChB;EACA,UAAU,kBAAkB,YAAY,KAAA,IAAa;CACvD;CAEA,MAAM,kBACJ,SAAS,aACR,MAAM,EAAE,OAAO;EACd,SAAS;EACT,SAAS;GACP;IAAE,OAAO;IAAQ,OAAO;IAAQ,MAAM;GAAU;GAChD;IAAE,OAAO;IAAO,OAAO;GAAM;GAC7B;IAAE,OAAO;IAAW,OAAO;GAAU;GACrC;IAAE,OAAO;IAAW,OAAO;GAAU;EACvC;EACA,cAAc;CAChB,CAAC;CAEH,IAAI,EAAE,SAAS,eAAe,GAAG;EAC/B,EAAE,OAAO,qBAAqB;EAC9B,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,YAAY,oBAAoB,SAAS,KAAA,IAAa;CAE5D,MAAM,WACJ,SAAS,MACR,MAAM,EAAE,OAAO;EACd,SAAS;EACT,SAAS;GACP;IAAE,OAAO;IAAQ,OAAO;IAAQ,MAAM;GAAU;GAChD;IAAE,OAAO;IAAW,OAAO;GAAU;GACrC;IAAE,OAAO;IAAU,OAAO;GAAS;GACnC;IAAE,OAAO;IAAU,OAAO;GAAS;EACrC;EACA,cAAc;CAChB,CAAC;CAEH,IAAI,EAAE,SAAS,QAAQ,GAAG;EACxB,EAAE,OAAO,qBAAqB;EAC9B,QAAQ,KAAK,CAAC;CAChB;CAEA,IAAI;CACJ,IAAI;CAEJ,IAAI,aAAa,QAAQ;EACvB,KAAK;EACL,MAAM,eACJ,SAAS,UACR,MAAM,EAAE,OAAO;GACd,SAAS;GACT,SAAS;IACP;KAAE,OAAO;KAAU,OAAO;KAAU,MAAM;IAAU;IACpD;KAAE,OAAO;KAAY,OAAO;IAAa;IACzC;KAAE,OAAO;KAAS,OAAO;IAAQ;GACnC;GACA,cAAc;EAChB,CAAC;EAEH,IAAI,EAAE,SAAS,YAAY,GAAG;GAC5B,EAAE,OAAO,qBAAqB;GAC9B,QAAQ,KAAK,CAAC;EAChB;EACA,SAAS;CACX;CAEA,MAAM,eACJ,SAAS,UACR,MAAM,EAAE,OAAO;EACd,SAAS;EACT,SAAS;GACP;IAAE,OAAO;IAAQ,OAAO;IAAQ,MAAM;GAAU;GAChD;IAAE,OAAO;IAAQ,OAAO;GAAO;GAC/B;IAAE,OAAO;IAAW,OAAO;GAAU;EACvC;EACA,cAAc;CAChB,CAAC;CAEH,IAAI,EAAE,SAAS,YAAY,GAAG;EAC5B,EAAE,OAAO,qBAAqB;EAC9B,QAAQ,KAAK,CAAC;CAChB;CAEA,MAAM,SAAS,iBAAiB,SAAS,KAAA,IAAa;CAEtD,OAAO;EACL,aAAa,OAAO,WAAW,CAAC,CAAC,KAAK;EAC9B;EACR,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;EAC7B,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;EACjC,GAAI,KAAK;GAAE;GAAI;EAAO,IAAI,CAAC;EAC3B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;EAC3B,aAAa,SAAS;CACxB;AACF;AAEA,eAAsB,iBACpB,OAAgC,CAAC,GACR;CACzB,MAAM,gBACJ,KAAK,gBAAgB,QAAQ,QAAQ,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa;CAEjF,MAAM,WAAW,gBACb,MAAM,yBAAyB,IAAI,IACnC;EACE,GAAG;EACH,aAAa,KAAK,eAAe;EACjC,QAAQ,KAAK,UAAA;CACf;CAEJ,MAAM,MAAM,QAAQ,IAAI;CACxB,MAAM,cAAc,SAAS,eAAe;CAC5C,MAAM,YAAY,KAAK,YACnB,KAAK,QAAQ,KAAK,KAAK,SAAS,IAChC,KAAK,QAAQ,KAAK,WAAW;CAEjC,MAAM,eAAgC;EACpC;EACA;EACA,GAAI,SAAS,WAAW,KAAA,IAAY,EAAE,QAAQ,SAAS,OAAO,IAAI,CAAC;EACnE,GAAI,SAAS,YAAY,KAAA,IAAY,EAAE,SAAS,SAAS,QAAQ,IAAI,CAAC;EACtE,GAAI,SAAS,cAAc,KAAA,IAAY,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;EAC5E,GAAI,SAAS,OAAO,KAAA,IAAY,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC;EACvD,GAAI,SAAS,WAAW,KAAA,IAAY,EAAE,QAAQ,SAAS,OAAO,IAAI,CAAC;EACnE,GAAI,SAAS,WAAW,KAAA,IAAY,EAAE,QAAQ,SAAS,OAAO,IAAI,CAAC;EACnE,GAAI,KAAK,oBAAoB,KAAA,IAAY,EAAE,iBAAiB,KAAK,gBAAgB,IAAI,CAAC;EACtF,aAAa,SAAS,eAAe,QAAQ,IAAI,aAAa;CAChE;CAEA,IAAI,eAAe;EACjB,MAAM,IAAI,EAAE,QAAQ;EACpB,EAAE,MAAM,qBAAqB;EAC7B,MAAM,SAAS,MAAM,gBAAgB,YAAY;EACjD,EAAE,KAAK,iBAAiB;EAExB,MAAM,QAAQ,iBAAiB;EAC/B,EAAE,MAAM,GAAG,MAAM,OAAO,CAAC;EACzB,QAAQ,IAAI,eAAe;EAC3B,QAAQ,IAAI,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,KAAK;EAC1D,IAAI,aAAa,aACf,QAAQ,IAAI,KAAK,UAAU,OAAO,SAAS,GAAG;EAEhD,QAAQ,IAAI,KAAK,UAAU,OAAO,KAAK,EAAE,GAAG;EAC5C,OAAO;CACT;CAEA,OAAO,MAAM,gBAAgB,YAAY;AAC3C;;;ACzOA,eAAsB,IAAI,OAAiB,QAAQ,QAAQ,IAAI,GAAkB;CAgF/E,MA/Ee,MAAM,IAAI,CAAC,CACvB,WAAW,gBAAgB,CAAC,CAC5B,MAAM,oBAAoB,CAAC,CAC3B,QACC,YACA,wCACC,MACC,EACG,WAAW,OAAO;EACjB,MAAM;EACN,aAAa;CACf,CAAC,CAAC,CACD,OAAO,UAAU;EAChB,OAAO;EACP,MAAM;EACN,aAAa;CACf,CAAC,CAAC,CACD,OAAO,WAAW;EACjB,MAAM;EACN,aAAa;CACf,CAAC,CAAC,CACD,OAAO,aAAa;EACnB,OAAO;EACP,MAAM;EACN,SAAS;GAAC;GAAO;GAAW;GAAW;EAAM;EAC7C,aAAa;CACf,CAAC,CAAC,CACD,OAAO,MAAM;EACZ,MAAM;EACN,SAAS;GAAC;GAAW;GAAU;GAAU;EAAM;EAC/C,aAAa;CACf,CAAC,CAAC,CACD,OAAO,UAAU;EAChB,MAAM;EACN,SAAS;GAAC;GAAU;GAAY;EAAO;EACvC,aAAa;CACf,CAAC,CAAC,CACD,OAAO,UAAU;EAChB,OAAO;EACP,MAAM;EACN,SAAS;GAAC;GAAQ;GAAW;EAAM;EACnC,aAAa;CACf,CAAC,CAAC,CACD,OAAO,gBAAgB;EACtB,MAAM;EACN,aAAa;EACb,SAAS;CACX,CAAC,CAAC,CACD,OAAO,OAAO;EACb,OAAO;EACP,MAAM;EACN,aAAa;EACb,SAAS;CACX,CAAC,GACL,OAAO,SAAc;EAenB,MAAM,iBAAiB;GAbrB,WAAW,KAAK;GAChB,aAAa,KAAK;GAClB,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,WAAY,KAAK,cAAc,SAAS,KAAA,IAAY,KAAK;GAGzD,IAAK,KAAK,OAAO,SAAS,KAAA,IAAY,KAAK;GAC3C,QAAQ,KAAK;GACb,QAAS,KAAK,WAAW,SAAS,KAAA,IAAY,KAAK;GACnD,aAAa,QAAQ,KAAK,WAAW;GACrC,aAAa,CAAC,KAAK;EAEE,CAAU;CACnC,CACF,CAAC,CACA,KAAK,CAAC,CACN,MAAM,QAAQ,GAAG,CAAC,CAClB,QAAQ,CAAC,CACT,MAAM,WAAW,GAAG,CAAC,CACrB,OAAO,CAAC,CACR,YAAY,KAEJ,CAAC,CAAC,MAAM;AACrB;AAEA,IAAI,QAAQ,KAAK,MAAM,QAAQ,KAAK,EAAE,CAAC,SAAS,QAAQ,GACtD,IAAI,CAAC,CAAC,OAAO,QAAiB;CAC5B,QAAQ,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;CAC9D,QAAQ,KAAK,CAAC;AAChB,CAAC"}
|