@drzl/cli 0.0.1 → 0.0.3
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 +7 -0
- package/dist/cli.cjs +12 -8
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +12 -8
- package/dist/cli.js.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
# @drzl/cli
|
|
4
4
|
|
|
5
|
+
<div align="center">
|
|
6
|
+
|
|
7
|
+
[](https://github.com/use-drzl/drzl/actions/workflows/ci.yml)
|
|
8
|
+
[](https://www.npmjs.com/package/@drzl/cli)
|
|
9
|
+
|
|
10
|
+
</div>
|
|
11
|
+
|
|
5
12
|
Analyze your Drizzle schema and generate validation, services, and routers.
|
|
6
13
|
|
|
7
14
|
</div>
|
package/dist/cli.cjs
CHANGED
|
@@ -229,9 +229,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
229
229
|
} catch (e) {
|
|
230
230
|
progress.stop();
|
|
231
231
|
console.error(
|
|
232
|
-
import_chalk.default.red("Service generator missing
|
|
233
|
-
|
|
232
|
+
import_chalk.default.red("Service generator missing."),
|
|
233
|
+
import_chalk.default.yellow("\nInstall with: npm install @drzl/generator-service")
|
|
234
234
|
);
|
|
235
|
+
console.error(import_chalk.default.gray("Error details:"), e?.message ?? e);
|
|
235
236
|
process.exit(1);
|
|
236
237
|
}
|
|
237
238
|
} else if (g.kind === "zod") {
|
|
@@ -252,9 +253,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
252
253
|
} catch (e) {
|
|
253
254
|
progress.stop();
|
|
254
255
|
console.error(
|
|
255
|
-
import_chalk.default.red("Zod generator missing
|
|
256
|
-
|
|
256
|
+
import_chalk.default.red("Zod generator missing."),
|
|
257
|
+
import_chalk.default.yellow("\nInstall with: npm install @drzl/generator-zod")
|
|
257
258
|
);
|
|
259
|
+
console.error(import_chalk.default.gray("Error details:"), e?.message ?? e);
|
|
258
260
|
process.exit(1);
|
|
259
261
|
}
|
|
260
262
|
} else if (g.kind === "valibot") {
|
|
@@ -275,9 +277,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
275
277
|
} catch (e) {
|
|
276
278
|
progress.stop();
|
|
277
279
|
console.error(
|
|
278
|
-
import_chalk.default.red("Valibot generator missing
|
|
279
|
-
|
|
280
|
+
import_chalk.default.red("Valibot generator missing."),
|
|
281
|
+
import_chalk.default.yellow("\nInstall with: npm install @drzl/generator-valibot")
|
|
280
282
|
);
|
|
283
|
+
console.error(import_chalk.default.gray("Error details:"), e?.message ?? e);
|
|
281
284
|
process.exit(1);
|
|
282
285
|
}
|
|
283
286
|
} else if (g.kind === "arktype") {
|
|
@@ -298,9 +301,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
298
301
|
} catch (e) {
|
|
299
302
|
progress.stop();
|
|
300
303
|
console.error(
|
|
301
|
-
import_chalk.default.red("ArkType generator missing
|
|
302
|
-
|
|
304
|
+
import_chalk.default.red("ArkType generator missing."),
|
|
305
|
+
import_chalk.default.yellow("\nInstall with: npm install @drzl/generator-arktype")
|
|
303
306
|
);
|
|
307
|
+
console.error(import_chalk.default.gray("Error details:"), e?.message ?? e);
|
|
304
308
|
process.exit(1);
|
|
305
309
|
}
|
|
306
310
|
}
|
package/dist/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/config.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport cliProgress from 'cli-progress';\nimport { loadConfig } from './config.js';\nimport { SchemaAnalyzer } from '@drzl/analyzer';\nimport { ORPCGenerator } from '@drzl/generator-orpc';\nimport chokidar from 'chokidar';\n\nconst program = new Command();\nprogram.name('drzl').description('DRZL - Drizzle Developer Toolkit').version('0.0.1');\n\nprogram\n .command('analyze')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('--relations', 'include relations', true)\n .option('--validate', 'validate constraints', true)\n .option('--out <file>', 'write analysis JSON to file')\n .option('--json', 'print JSON to stdout (overrides --out)', false)\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const spinner = !opts.json ? ora('Analyzing schema...').start() : null;\n const start = Date.now();\n const res = await analyzer.analyze({\n includeRelations: !!opts.relations,\n validateConstraints: !!opts.validate,\n });\n const ms = Date.now() - start;\n const json = JSON.stringify(res, null, 2);\n if (opts.json) {\n console.log(json);\n } else if (opts.out) {\n const fs = await import('node:fs/promises');\n await fs.writeFile(opts.out, json, 'utf8');\n spinner?.succeed(chalk.green(`Analysis written to ${opts.out} in ${ms}ms`));\n } else {\n spinner?.succeed(chalk.green(`Analyzed in ${ms}ms`));\n console.log(json);\n }\n process.exit(res.issues.some((i) => i.level === 'error') ? 2 : 0);\n } catch (e: any) {\n const msg = e?.message ?? String(e);\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', code: 'DRZL_CLI_ANALYZE', message: msg }));\n else\n console.error(\n chalk.red('Analyze failed (DRZL_CLI_ANALYZE):'),\n msg,\n '\\nTip: run with --json for structured output.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate')\n .description('Run configured generators (drzl.config.*)')\n .option('-c, --config <path>', 'path to drzl.config')\n .action(async (opts: any) => {\n try {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(\n chalk.red('No config found (DRZL_CFG_001). Create drzl.config.ts or pass --config.')\n );\n process.exit(2);\n return;\n }\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const spinner = ora('Analyzing...').start();\n const t0 = Date.now();\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n includeHeuristicRelations: cfg.analyzer.includeHeuristicRelations,\n });\n spinner.succeed(`Analysis complete in ${Date.now() - t0}ms`);\n const progress = new cliProgress.SingleBar(\n { hideCursor: true },\n cliProgress.Presets.shades_classic\n );\n const total = analysis.tables.length || 1;\n progress.start(total, 0);\n for (const g of cfg.generators) {\n if (g.kind === 'orpc') {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n outputHeader: g.outputHeader,\n format: g.format,\n templateOptions: g.templateOptions,\n validation: g.validation,\n onProgress: ({ index }) => progress.update(index),\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (${g.kind}): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } else if (g.kind === 'service') {\n try {\n const { ServiceGenerator } = await import('@drzl/generator-service');\n const gen = new ServiceGenerator(analysis);\n const target = g.path ?? 'src/services';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n dataAccess: g.dataAccess,\n dbImportPath: g.dbImportPath,\n schemaImportPath: g.schemaImportPath,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (service): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Service generator missing (install @drzl/generator-service)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'zod') {\n try {\n const { ZodGenerator } = await import('@drzl/generator-zod');\n const gen = new ZodGenerator(analysis);\n const target = g.path ?? 'src/validators/zod';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (zod): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Zod generator missing (install @drzl/generator-zod)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'valibot') {\n try {\n const { ValibotGenerator } = await import('@drzl/generator-valibot');\n const gen = new ValibotGenerator(analysis);\n const target = g.path ?? 'src/validators/valibot';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (valibot): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Valibot generator missing (install @drzl/generator-valibot)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'arktype') {\n try {\n const { ArkTypeGenerator } = await import('@drzl/generator-arktype');\n const gen = new ArkTypeGenerator(analysis);\n const target = g.path ?? 'src/validators/arktype';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (arktype): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('ArkType generator missing (install @drzl/generator-arktype)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n }\n }\n } catch (e: any) {\n console.error(\n chalk.red('Generate failed (DRZL_GEN_001):'),\n e?.message ?? e,\n '\\nTip: check your drzl.config.ts and template path.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate:orpc')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('-o, --outDir <dir>', 'output directory', 'src/api')\n .option('--template <name>', 'template name', 'standard')\n .option('--includeRelations', 'include relation endpoints')\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const analysis = await analyzer.analyze({\n includeRelations: !!opts.includeRelations,\n validateConstraints: true,\n });\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: opts.outDir,\n template: opts.template,\n includeRelations: !!opts.includeRelations,\n });\n console.log(chalk.green(`Generated:`), files.map((f) => chalk.cyan(f)).join(', '));\n } catch (e: any) {\n console.error(chalk.red('Generate orpc failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram\n .command('watch')\n .description('Watch schema and regenerate on changes')\n .option('-c, --config <path>', 'path to drzl.config')\n .option('--pipeline <name>', 'all | analyze | generate-orpc', 'all')\n .option('--debounce <ms>', 'debounce ms', '200')\n .option('--json', 'emit JSON logs', false)\n .action(async (opts: any) => {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(chalk.red('No config found. Create drzl.config.ts or pass --config.'));\n process.exit(2);\n return;\n }\n let lastFiles: string[] = [];\n const run = async () => {\n try {\n if (!opts.json) console.clear();\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n });\n if (opts.pipeline === 'analyze') {\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'analyze_complete',\n issues: analysis.issues,\n tables: analysis.tables.length,\n })\n );\n } else {\n console.log(chalk.green('Analyze complete.'));\n }\n return;\n }\n const newFiles: string[] = [];\n for (const g of cfg.generators) {\n if (g.kind === 'orpc' && (opts.pipeline === 'all' || opts.pipeline === 'generate-orpc')) {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n });\n if (opts.json) {\n console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }));\n } else {\n console.log(\n chalk.green(`Generated (${g.kind}):`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n }\n newFiles.push(...files);\n }\n }\n // Diff\n const added = newFiles.filter((f) => !lastFiles.includes(f));\n const removed = lastFiles.filter((f) => !newFiles.includes(f));\n if (opts.json) {\n console.log(JSON.stringify({ event: 'diff', added, removed }));\n } else {\n if (added.length) console.log(chalk.blue(`Added: ${added.join(', ')}`));\n if (removed.length) console.log(chalk.yellow(`Removed: ${removed.join(', ')}`));\n }\n lastFiles = newFiles;\n } catch (e: any) {\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', message: String(e?.message ?? e) }));\n else console.error(chalk.red('Watch pipeline failed:'), e?.message ?? e);\n }\n };\n const debounced = Number(opts.debounce) || 200;\n let timer: any = null;\n const trigger = (file?: string) => {\n // Ignore changes in outDir to avoid loops\n if (file && file.startsWith(cfg.outDir)) return;\n clearTimeout(timer);\n timer = setTimeout(run, debounced);\n };\n console.log(chalk.gray('Watching for changes...'));\n const watchSet = new Set<string>([cfg.schema]);\n // Watch template paths (only when path-like and exists)\n for (const g of cfg.generators) {\n if (g.template && g.template !== 'standard' && g.template !== 'minimal') {\n watchSet.add(g.template);\n }\n }\n // Also watch outDir but ignore events from it to report diffs cleanly\n watchSet.add(cfg.outDir);\n chokidar\n .watch(Array.from(watchSet), { ignoreInitial: true })\n .on('add', (p) => trigger(p))\n .on('change', (p) => trigger(p))\n .on('unlink', (p) => trigger(p));\n await run();\n });\n\nprogram\n .command('init')\n .description('Scaffold a drzl.config.ts')\n .option('-y, --yes', 'accept defaults')\n .action(async (_opts: any) => {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const target = path.resolve(process.cwd(), 'drzl.config.ts');\n const template = `export default {\n schema: 'src/db/schema.ts',\n outDir: 'src/api',\n analyzer: { includeRelations: true, validateConstraints: true },\n generators: [\n { kind: 'orpc', template: 'standard', includeRelations: true }\n ]\n} as const\\n`;\n try {\n await fs.writeFile(target, template, { flag: 'wx' });\n console.log(chalk.green(`Created ${target}`));\n } catch (e: any) {\n console.error(chalk.red('Init failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram.parseAsync(process.argv);\n","import { z } from 'zod';\n\nexport const NamingSchema = z\n .object({\n routerSuffix: z.string().default('Router'),\n procedureCase: z.enum(['camel', 'kebab', 'snake']).default('camel'),\n })\n .partial();\n\nexport const GeneratorSchema = z.object({\n kind: z.enum(['orpc', 'service', 'zod', 'valibot', 'arktype']),\n template: z.string().optional(),\n includeRelations: z.boolean().optional(),\n naming: NamingSchema.optional(),\n outputHeader: z\n .object({\n enabled: z.boolean().default(true).optional(),\n text: z.string().optional(),\n })\n .optional(),\n format: z\n .object({\n enabled: z.boolean().default(true).optional(),\n engine: z.enum(['auto', 'prettier', 'biome']).default('auto').optional(),\n configPath: z.string().optional(),\n })\n .optional(),\n // service generator specific options\n path: z.string().optional(),\n dataAccess: z.enum(['stub', 'drizzle']).default('stub').optional(),\n dbImportPath: z.string().optional(),\n schemaImportPath: z.string().optional(),\n // zod generator specific options\n schemaSuffix: z.string().optional(),\n fileSuffix: z.string().optional(),\n // orpc validation sharing\n validation: z\n .object({\n useShared: z.boolean().default(false).optional(),\n library: z.enum(['zod', 'valibot', 'arktype']).default('zod').optional(),\n importPath: z.string().optional(),\n schemaSuffix: z.string().optional(),\n })\n .optional(),\n // template options\n templateOptions: z.record(z.string(), z.any()).optional(),\n});\n\nexport const ConfigSchema = z.object({\n schema: z.string(),\n outDir: z.string().default('src/api'),\n analyzer: z\n .object({\n includeRelations: z.boolean().default(true),\n validateConstraints: z.boolean().default(true),\n includeHeuristicRelations: z.boolean().default(false),\n })\n .default({\n includeRelations: true,\n validateConstraints: true,\n includeHeuristicRelations: false,\n }),\n generators: z\n .array(GeneratorSchema)\n .min(1)\n .default([{ kind: 'orpc' } as any]),\n});\n\nexport type DrzlConfig = z.infer<typeof ConfigSchema>;\n\nexport function defineConfig(cfg: DrzlConfig) {\n return cfg;\n}\n\nexport async function loadConfig(customPath?: string): Promise<DrzlConfig | null> {\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n\n const candidates = customPath\n ? [customPath]\n : ['drzl.config.ts', 'drzl.config.mjs', 'drzl.config.js'];\n\n for (const c of candidates) {\n const p = path.resolve(process.cwd(), c);\n try {\n await fs.access(p);\n } catch {\n continue;\n }\n // If JSON, parse directly and skip module loading\n if (/\\.json$/i.test(p)) {\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n // Try jiti to seamlessly load TS/ESM/CJS\n try {\n const { default: jiti } = await import('jiti');\n const jit = (jiti as any)(import.meta.url);\n const mod = jit(p);\n const raw = mod && typeof mod === 'object' && 'default' in mod ? (mod as any).default : mod;\n const parsed = ConfigSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(parsed.error.message);\n }\n return parsed.data;\n } catch (e) {\n // Fallback: try JSON parse\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n }\n return null;\n}\n"],"mappings":"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","names":["ora","chalk","cliProgress","chokidar"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/config.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport cliProgress from 'cli-progress';\nimport { loadConfig } from './config.js';\nimport { SchemaAnalyzer } from '@drzl/analyzer';\nimport { ORPCGenerator } from '@drzl/generator-orpc';\nimport chokidar from 'chokidar';\n\nconst program = new Command();\nprogram.name('drzl').description('DRZL - Drizzle Developer Toolkit').version('0.0.1');\n\nprogram\n .command('analyze')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('--relations', 'include relations', true)\n .option('--validate', 'validate constraints', true)\n .option('--out <file>', 'write analysis JSON to file')\n .option('--json', 'print JSON to stdout (overrides --out)', false)\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const spinner = !opts.json ? ora('Analyzing schema...').start() : null;\n const start = Date.now();\n const res = await analyzer.analyze({\n includeRelations: !!opts.relations,\n validateConstraints: !!opts.validate,\n });\n const ms = Date.now() - start;\n const json = JSON.stringify(res, null, 2);\n if (opts.json) {\n console.log(json);\n } else if (opts.out) {\n const fs = await import('node:fs/promises');\n await fs.writeFile(opts.out, json, 'utf8');\n spinner?.succeed(chalk.green(`Analysis written to ${opts.out} in ${ms}ms`));\n } else {\n spinner?.succeed(chalk.green(`Analyzed in ${ms}ms`));\n console.log(json);\n }\n process.exit(res.issues.some((i) => i.level === 'error') ? 2 : 0);\n } catch (e: any) {\n const msg = e?.message ?? String(e);\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', code: 'DRZL_CLI_ANALYZE', message: msg }));\n else\n console.error(\n chalk.red('Analyze failed (DRZL_CLI_ANALYZE):'),\n msg,\n '\\nTip: run with --json for structured output.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate')\n .description('Run configured generators (drzl.config.*)')\n .option('-c, --config <path>', 'path to drzl.config')\n .action(async (opts: any) => {\n try {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(\n chalk.red('No config found (DRZL_CFG_001). Create drzl.config.ts or pass --config.')\n );\n process.exit(2);\n return;\n }\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const spinner = ora('Analyzing...').start();\n const t0 = Date.now();\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n includeHeuristicRelations: cfg.analyzer.includeHeuristicRelations,\n });\n spinner.succeed(`Analysis complete in ${Date.now() - t0}ms`);\n const progress = new cliProgress.SingleBar(\n { hideCursor: true },\n cliProgress.Presets.shades_classic\n );\n const total = analysis.tables.length || 1;\n progress.start(total, 0);\n for (const g of cfg.generators) {\n if (g.kind === 'orpc') {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n outputHeader: g.outputHeader,\n format: g.format,\n templateOptions: g.templateOptions,\n validation: g.validation,\n onProgress: ({ index }) => progress.update(index),\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (${g.kind}): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } else if (g.kind === 'service') {\n try {\n const { ServiceGenerator } = await import('@drzl/generator-service');\n const gen = new ServiceGenerator(analysis);\n const target = g.path ?? 'src/services';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n dataAccess: g.dataAccess,\n dbImportPath: g.dbImportPath,\n schemaImportPath: g.schemaImportPath,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (service): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Service generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-service')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'zod') {\n try {\n const { ZodGenerator } = await import('@drzl/generator-zod');\n const gen = new ZodGenerator(analysis);\n const target = g.path ?? 'src/validators/zod';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (zod): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Zod generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-zod')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'valibot') {\n try {\n const { ValibotGenerator } = await import('@drzl/generator-valibot');\n const gen = new ValibotGenerator(analysis);\n const target = g.path ?? 'src/validators/valibot';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (valibot): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Valibot generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-valibot')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'arktype') {\n try {\n const { ArkTypeGenerator } = await import('@drzl/generator-arktype');\n const gen = new ArkTypeGenerator(analysis);\n const target = g.path ?? 'src/validators/arktype';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (arktype): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('ArkType generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-arktype')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n }\n }\n } catch (e: any) {\n console.error(\n chalk.red('Generate failed (DRZL_GEN_001):'),\n e?.message ?? e,\n '\\nTip: check your drzl.config.ts and template path.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate:orpc')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('-o, --outDir <dir>', 'output directory', 'src/api')\n .option('--template <name>', 'template name', 'standard')\n .option('--includeRelations', 'include relation endpoints')\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const analysis = await analyzer.analyze({\n includeRelations: !!opts.includeRelations,\n validateConstraints: true,\n });\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: opts.outDir,\n template: opts.template,\n includeRelations: !!opts.includeRelations,\n });\n console.log(chalk.green(`Generated:`), files.map((f) => chalk.cyan(f)).join(', '));\n } catch (e: any) {\n console.error(chalk.red('Generate orpc failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram\n .command('watch')\n .description('Watch schema and regenerate on changes')\n .option('-c, --config <path>', 'path to drzl.config')\n .option('--pipeline <name>', 'all | analyze | generate-orpc', 'all')\n .option('--debounce <ms>', 'debounce ms', '200')\n .option('--json', 'emit JSON logs', false)\n .action(async (opts: any) => {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(chalk.red('No config found. Create drzl.config.ts or pass --config.'));\n process.exit(2);\n return;\n }\n let lastFiles: string[] = [];\n const run = async () => {\n try {\n if (!opts.json) console.clear();\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n });\n if (opts.pipeline === 'analyze') {\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'analyze_complete',\n issues: analysis.issues,\n tables: analysis.tables.length,\n })\n );\n } else {\n console.log(chalk.green('Analyze complete.'));\n }\n return;\n }\n const newFiles: string[] = [];\n for (const g of cfg.generators) {\n if (g.kind === 'orpc' && (opts.pipeline === 'all' || opts.pipeline === 'generate-orpc')) {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n });\n if (opts.json) {\n console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }));\n } else {\n console.log(\n chalk.green(`Generated (${g.kind}):`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n }\n newFiles.push(...files);\n }\n }\n // Diff\n const added = newFiles.filter((f) => !lastFiles.includes(f));\n const removed = lastFiles.filter((f) => !newFiles.includes(f));\n if (opts.json) {\n console.log(JSON.stringify({ event: 'diff', added, removed }));\n } else {\n if (added.length) console.log(chalk.blue(`Added: ${added.join(', ')}`));\n if (removed.length) console.log(chalk.yellow(`Removed: ${removed.join(', ')}`));\n }\n lastFiles = newFiles;\n } catch (e: any) {\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', message: String(e?.message ?? e) }));\n else console.error(chalk.red('Watch pipeline failed:'), e?.message ?? e);\n }\n };\n const debounced = Number(opts.debounce) || 200;\n let timer: any = null;\n const trigger = (file?: string) => {\n // Ignore changes in outDir to avoid loops\n if (file && file.startsWith(cfg.outDir)) return;\n clearTimeout(timer);\n timer = setTimeout(run, debounced);\n };\n console.log(chalk.gray('Watching for changes...'));\n const watchSet = new Set<string>([cfg.schema]);\n // Watch template paths (only when path-like and exists)\n for (const g of cfg.generators) {\n if (g.template && g.template !== 'standard' && g.template !== 'minimal') {\n watchSet.add(g.template);\n }\n }\n // Also watch outDir but ignore events from it to report diffs cleanly\n watchSet.add(cfg.outDir);\n chokidar\n .watch(Array.from(watchSet), { ignoreInitial: true })\n .on('add', (p) => trigger(p))\n .on('change', (p) => trigger(p))\n .on('unlink', (p) => trigger(p));\n await run();\n });\n\nprogram\n .command('init')\n .description('Scaffold a drzl.config.ts')\n .option('-y, --yes', 'accept defaults')\n .action(async (_opts: any) => {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const target = path.resolve(process.cwd(), 'drzl.config.ts');\n const template = `export default {\n schema: 'src/db/schema.ts',\n outDir: 'src/api',\n analyzer: { includeRelations: true, validateConstraints: true },\n generators: [\n { kind: 'orpc', template: 'standard', includeRelations: true }\n ]\n} as const\\n`;\n try {\n await fs.writeFile(target, template, { flag: 'wx' });\n console.log(chalk.green(`Created ${target}`));\n } catch (e: any) {\n console.error(chalk.red('Init failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram.parseAsync(process.argv);\n","import { z } from 'zod';\n\nexport const NamingSchema = z\n .object({\n routerSuffix: z.string().default('Router'),\n procedureCase: z.enum(['camel', 'kebab', 'snake']).default('camel'),\n })\n .partial();\n\nexport const GeneratorSchema = z.object({\n kind: z.enum(['orpc', 'service', 'zod', 'valibot', 'arktype']),\n template: z.string().optional(),\n includeRelations: z.boolean().optional(),\n naming: NamingSchema.optional(),\n outputHeader: z\n .object({\n enabled: z.boolean().default(true).optional(),\n text: z.string().optional(),\n })\n .optional(),\n format: z\n .object({\n enabled: z.boolean().default(true).optional(),\n engine: z.enum(['auto', 'prettier', 'biome']).default('auto').optional(),\n configPath: z.string().optional(),\n })\n .optional(),\n // service generator specific options\n path: z.string().optional(),\n dataAccess: z.enum(['stub', 'drizzle']).default('stub').optional(),\n dbImportPath: z.string().optional(),\n schemaImportPath: z.string().optional(),\n // zod generator specific options\n schemaSuffix: z.string().optional(),\n fileSuffix: z.string().optional(),\n // orpc validation sharing\n validation: z\n .object({\n useShared: z.boolean().default(false).optional(),\n library: z.enum(['zod', 'valibot', 'arktype']).default('zod').optional(),\n importPath: z.string().optional(),\n schemaSuffix: z.string().optional(),\n })\n .optional(),\n // template options\n templateOptions: z.record(z.string(), z.any()).optional(),\n});\n\nexport const ConfigSchema = z.object({\n schema: z.string(),\n outDir: z.string().default('src/api'),\n analyzer: z\n .object({\n includeRelations: z.boolean().default(true),\n validateConstraints: z.boolean().default(true),\n includeHeuristicRelations: z.boolean().default(false),\n })\n .default({\n includeRelations: true,\n validateConstraints: true,\n includeHeuristicRelations: false,\n }),\n generators: z\n .array(GeneratorSchema)\n .min(1)\n .default([{ kind: 'orpc' } as any]),\n});\n\nexport type DrzlConfig = z.infer<typeof ConfigSchema>;\n\nexport function defineConfig(cfg: DrzlConfig) {\n return cfg;\n}\n\nexport async function loadConfig(customPath?: string): Promise<DrzlConfig | null> {\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n\n const candidates = customPath\n ? [customPath]\n : ['drzl.config.ts', 'drzl.config.mjs', 'drzl.config.js'];\n\n for (const c of candidates) {\n const p = path.resolve(process.cwd(), c);\n try {\n await fs.access(p);\n } catch {\n continue;\n }\n // If JSON, parse directly and skip module loading\n if (/\\.json$/i.test(p)) {\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n // Try jiti to seamlessly load TS/ESM/CJS\n try {\n const { default: jiti } = await import('jiti');\n const jit = (jiti as any)(import.meta.url);\n const mod = jit(p);\n const raw = mod && typeof mod === 'object' && 'default' in mod ? (mod as any).default : mod;\n const parsed = ConfigSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(parsed.error.message);\n }\n return parsed.data;\n } catch (e) {\n // Fallback: try JSON parse\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n }\n return null;\n}\n"],"mappings":"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","names":["ora","chalk","cliProgress","chokidar"]}
|
package/dist/cli.js
CHANGED
|
@@ -205,9 +205,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
205
205
|
} catch (e) {
|
|
206
206
|
progress.stop();
|
|
207
207
|
console.error(
|
|
208
|
-
chalk.red("Service generator missing
|
|
209
|
-
|
|
208
|
+
chalk.red("Service generator missing."),
|
|
209
|
+
chalk.yellow("\nInstall with: npm install @drzl/generator-service")
|
|
210
210
|
);
|
|
211
|
+
console.error(chalk.gray("Error details:"), e?.message ?? e);
|
|
211
212
|
process.exit(1);
|
|
212
213
|
}
|
|
213
214
|
} else if (g.kind === "zod") {
|
|
@@ -228,9 +229,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
228
229
|
} catch (e) {
|
|
229
230
|
progress.stop();
|
|
230
231
|
console.error(
|
|
231
|
-
chalk.red("Zod generator missing
|
|
232
|
-
|
|
232
|
+
chalk.red("Zod generator missing."),
|
|
233
|
+
chalk.yellow("\nInstall with: npm install @drzl/generator-zod")
|
|
233
234
|
);
|
|
235
|
+
console.error(chalk.gray("Error details:"), e?.message ?? e);
|
|
234
236
|
process.exit(1);
|
|
235
237
|
}
|
|
236
238
|
} else if (g.kind === "valibot") {
|
|
@@ -251,9 +253,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
251
253
|
} catch (e) {
|
|
252
254
|
progress.stop();
|
|
253
255
|
console.error(
|
|
254
|
-
chalk.red("Valibot generator missing
|
|
255
|
-
|
|
256
|
+
chalk.red("Valibot generator missing."),
|
|
257
|
+
chalk.yellow("\nInstall with: npm install @drzl/generator-valibot")
|
|
256
258
|
);
|
|
259
|
+
console.error(chalk.gray("Error details:"), e?.message ?? e);
|
|
257
260
|
process.exit(1);
|
|
258
261
|
}
|
|
259
262
|
} else if (g.kind === "arktype") {
|
|
@@ -274,9 +277,10 @@ program.command("generate").description("Run configured generators (drzl.config.
|
|
|
274
277
|
} catch (e) {
|
|
275
278
|
progress.stop();
|
|
276
279
|
console.error(
|
|
277
|
-
chalk.red("ArkType generator missing
|
|
278
|
-
|
|
280
|
+
chalk.red("ArkType generator missing."),
|
|
281
|
+
chalk.yellow("\nInstall with: npm install @drzl/generator-arktype")
|
|
279
282
|
);
|
|
283
|
+
console.error(chalk.gray("Error details:"), e?.message ?? e);
|
|
280
284
|
process.exit(1);
|
|
281
285
|
}
|
|
282
286
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/config.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport cliProgress from 'cli-progress';\nimport { loadConfig } from './config.js';\nimport { SchemaAnalyzer } from '@drzl/analyzer';\nimport { ORPCGenerator } from '@drzl/generator-orpc';\nimport chokidar from 'chokidar';\n\nconst program = new Command();\nprogram.name('drzl').description('DRZL - Drizzle Developer Toolkit').version('0.0.1');\n\nprogram\n .command('analyze')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('--relations', 'include relations', true)\n .option('--validate', 'validate constraints', true)\n .option('--out <file>', 'write analysis JSON to file')\n .option('--json', 'print JSON to stdout (overrides --out)', false)\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const spinner = !opts.json ? ora('Analyzing schema...').start() : null;\n const start = Date.now();\n const res = await analyzer.analyze({\n includeRelations: !!opts.relations,\n validateConstraints: !!opts.validate,\n });\n const ms = Date.now() - start;\n const json = JSON.stringify(res, null, 2);\n if (opts.json) {\n console.log(json);\n } else if (opts.out) {\n const fs = await import('node:fs/promises');\n await fs.writeFile(opts.out, json, 'utf8');\n spinner?.succeed(chalk.green(`Analysis written to ${opts.out} in ${ms}ms`));\n } else {\n spinner?.succeed(chalk.green(`Analyzed in ${ms}ms`));\n console.log(json);\n }\n process.exit(res.issues.some((i) => i.level === 'error') ? 2 : 0);\n } catch (e: any) {\n const msg = e?.message ?? String(e);\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', code: 'DRZL_CLI_ANALYZE', message: msg }));\n else\n console.error(\n chalk.red('Analyze failed (DRZL_CLI_ANALYZE):'),\n msg,\n '\\nTip: run with --json for structured output.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate')\n .description('Run configured generators (drzl.config.*)')\n .option('-c, --config <path>', 'path to drzl.config')\n .action(async (opts: any) => {\n try {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(\n chalk.red('No config found (DRZL_CFG_001). Create drzl.config.ts or pass --config.')\n );\n process.exit(2);\n return;\n }\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const spinner = ora('Analyzing...').start();\n const t0 = Date.now();\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n includeHeuristicRelations: cfg.analyzer.includeHeuristicRelations,\n });\n spinner.succeed(`Analysis complete in ${Date.now() - t0}ms`);\n const progress = new cliProgress.SingleBar(\n { hideCursor: true },\n cliProgress.Presets.shades_classic\n );\n const total = analysis.tables.length || 1;\n progress.start(total, 0);\n for (const g of cfg.generators) {\n if (g.kind === 'orpc') {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n outputHeader: g.outputHeader,\n format: g.format,\n templateOptions: g.templateOptions,\n validation: g.validation,\n onProgress: ({ index }) => progress.update(index),\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (${g.kind}): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } else if (g.kind === 'service') {\n try {\n const { ServiceGenerator } = await import('@drzl/generator-service');\n const gen = new ServiceGenerator(analysis);\n const target = g.path ?? 'src/services';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n dataAccess: g.dataAccess,\n dbImportPath: g.dbImportPath,\n schemaImportPath: g.schemaImportPath,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (service): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Service generator missing (install @drzl/generator-service)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'zod') {\n try {\n const { ZodGenerator } = await import('@drzl/generator-zod');\n const gen = new ZodGenerator(analysis);\n const target = g.path ?? 'src/validators/zod';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (zod): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Zod generator missing (install @drzl/generator-zod)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'valibot') {\n try {\n const { ValibotGenerator } = await import('@drzl/generator-valibot');\n const gen = new ValibotGenerator(analysis);\n const target = g.path ?? 'src/validators/valibot';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (valibot): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Valibot generator missing (install @drzl/generator-valibot)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n } else if (g.kind === 'arktype') {\n try {\n const { ArkTypeGenerator } = await import('@drzl/generator-arktype');\n const gen = new ArkTypeGenerator(analysis);\n const target = g.path ?? 'src/validators/arktype';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (arktype): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('ArkType generator missing (install @drzl/generator-arktype)?'),\n e?.message ?? e\n );\n process.exit(1);\n }\n }\n }\n } catch (e: any) {\n console.error(\n chalk.red('Generate failed (DRZL_GEN_001):'),\n e?.message ?? e,\n '\\nTip: check your drzl.config.ts and template path.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate:orpc')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('-o, --outDir <dir>', 'output directory', 'src/api')\n .option('--template <name>', 'template name', 'standard')\n .option('--includeRelations', 'include relation endpoints')\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const analysis = await analyzer.analyze({\n includeRelations: !!opts.includeRelations,\n validateConstraints: true,\n });\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: opts.outDir,\n template: opts.template,\n includeRelations: !!opts.includeRelations,\n });\n console.log(chalk.green(`Generated:`), files.map((f) => chalk.cyan(f)).join(', '));\n } catch (e: any) {\n console.error(chalk.red('Generate orpc failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram\n .command('watch')\n .description('Watch schema and regenerate on changes')\n .option('-c, --config <path>', 'path to drzl.config')\n .option('--pipeline <name>', 'all | analyze | generate-orpc', 'all')\n .option('--debounce <ms>', 'debounce ms', '200')\n .option('--json', 'emit JSON logs', false)\n .action(async (opts: any) => {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(chalk.red('No config found. Create drzl.config.ts or pass --config.'));\n process.exit(2);\n return;\n }\n let lastFiles: string[] = [];\n const run = async () => {\n try {\n if (!opts.json) console.clear();\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n });\n if (opts.pipeline === 'analyze') {\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'analyze_complete',\n issues: analysis.issues,\n tables: analysis.tables.length,\n })\n );\n } else {\n console.log(chalk.green('Analyze complete.'));\n }\n return;\n }\n const newFiles: string[] = [];\n for (const g of cfg.generators) {\n if (g.kind === 'orpc' && (opts.pipeline === 'all' || opts.pipeline === 'generate-orpc')) {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n });\n if (opts.json) {\n console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }));\n } else {\n console.log(\n chalk.green(`Generated (${g.kind}):`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n }\n newFiles.push(...files);\n }\n }\n // Diff\n const added = newFiles.filter((f) => !lastFiles.includes(f));\n const removed = lastFiles.filter((f) => !newFiles.includes(f));\n if (opts.json) {\n console.log(JSON.stringify({ event: 'diff', added, removed }));\n } else {\n if (added.length) console.log(chalk.blue(`Added: ${added.join(', ')}`));\n if (removed.length) console.log(chalk.yellow(`Removed: ${removed.join(', ')}`));\n }\n lastFiles = newFiles;\n } catch (e: any) {\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', message: String(e?.message ?? e) }));\n else console.error(chalk.red('Watch pipeline failed:'), e?.message ?? e);\n }\n };\n const debounced = Number(opts.debounce) || 200;\n let timer: any = null;\n const trigger = (file?: string) => {\n // Ignore changes in outDir to avoid loops\n if (file && file.startsWith(cfg.outDir)) return;\n clearTimeout(timer);\n timer = setTimeout(run, debounced);\n };\n console.log(chalk.gray('Watching for changes...'));\n const watchSet = new Set<string>([cfg.schema]);\n // Watch template paths (only when path-like and exists)\n for (const g of cfg.generators) {\n if (g.template && g.template !== 'standard' && g.template !== 'minimal') {\n watchSet.add(g.template);\n }\n }\n // Also watch outDir but ignore events from it to report diffs cleanly\n watchSet.add(cfg.outDir);\n chokidar\n .watch(Array.from(watchSet), { ignoreInitial: true })\n .on('add', (p) => trigger(p))\n .on('change', (p) => trigger(p))\n .on('unlink', (p) => trigger(p));\n await run();\n });\n\nprogram\n .command('init')\n .description('Scaffold a drzl.config.ts')\n .option('-y, --yes', 'accept defaults')\n .action(async (_opts: any) => {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const target = path.resolve(process.cwd(), 'drzl.config.ts');\n const template = `export default {\n schema: 'src/db/schema.ts',\n outDir: 'src/api',\n analyzer: { includeRelations: true, validateConstraints: true },\n generators: [\n { kind: 'orpc', template: 'standard', includeRelations: true }\n ]\n} as const\\n`;\n try {\n await fs.writeFile(target, template, { flag: 'wx' });\n console.log(chalk.green(`Created ${target}`));\n } catch (e: any) {\n console.error(chalk.red('Init failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram.parseAsync(process.argv);\n","import { z } from 'zod';\n\nexport const NamingSchema = z\n .object({\n routerSuffix: z.string().default('Router'),\n procedureCase: z.enum(['camel', 'kebab', 'snake']).default('camel'),\n })\n .partial();\n\nexport const GeneratorSchema = z.object({\n kind: z.enum(['orpc', 'service', 'zod', 'valibot', 'arktype']),\n template: z.string().optional(),\n includeRelations: z.boolean().optional(),\n naming: NamingSchema.optional(),\n outputHeader: z\n .object({\n enabled: z.boolean().default(true).optional(),\n text: z.string().optional(),\n })\n .optional(),\n format: z\n .object({\n enabled: z.boolean().default(true).optional(),\n engine: z.enum(['auto', 'prettier', 'biome']).default('auto').optional(),\n configPath: z.string().optional(),\n })\n .optional(),\n // service generator specific options\n path: z.string().optional(),\n dataAccess: z.enum(['stub', 'drizzle']).default('stub').optional(),\n dbImportPath: z.string().optional(),\n schemaImportPath: z.string().optional(),\n // zod generator specific options\n schemaSuffix: z.string().optional(),\n fileSuffix: z.string().optional(),\n // orpc validation sharing\n validation: z\n .object({\n useShared: z.boolean().default(false).optional(),\n library: z.enum(['zod', 'valibot', 'arktype']).default('zod').optional(),\n importPath: z.string().optional(),\n schemaSuffix: z.string().optional(),\n })\n .optional(),\n // template options\n templateOptions: z.record(z.string(), z.any()).optional(),\n});\n\nexport const ConfigSchema = z.object({\n schema: z.string(),\n outDir: z.string().default('src/api'),\n analyzer: z\n .object({\n includeRelations: z.boolean().default(true),\n validateConstraints: z.boolean().default(true),\n includeHeuristicRelations: z.boolean().default(false),\n })\n .default({\n includeRelations: true,\n validateConstraints: true,\n includeHeuristicRelations: false,\n }),\n generators: z\n .array(GeneratorSchema)\n .min(1)\n .default([{ kind: 'orpc' } as any]),\n});\n\nexport type DrzlConfig = z.infer<typeof ConfigSchema>;\n\nexport function defineConfig(cfg: DrzlConfig) {\n return cfg;\n}\n\nexport async function loadConfig(customPath?: string): Promise<DrzlConfig | null> {\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n\n const candidates = customPath\n ? [customPath]\n : ['drzl.config.ts', 'drzl.config.mjs', 'drzl.config.js'];\n\n for (const c of candidates) {\n const p = path.resolve(process.cwd(), c);\n try {\n await fs.access(p);\n } catch {\n continue;\n }\n // If JSON, parse directly and skip module loading\n if (/\\.json$/i.test(p)) {\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n // Try jiti to seamlessly load TS/ESM/CJS\n try {\n const { default: jiti } = await import('jiti');\n const jit = (jiti as any)(import.meta.url);\n const mod = jit(p);\n const raw = mod && typeof mod === 'object' && 'default' in mod ? (mod as any).default : mod;\n const parsed = ConfigSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(parsed.error.message);\n }\n return parsed.data;\n } catch (e) {\n // Fallback: try JSON parse\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n }\n return null;\n}\n"],"mappings":";;;AACA,SAAS,eAAe;AACxB,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,OAAO,iBAAiB;;;ACJxB,SAAS,SAAS;AAEX,IAAM,eAAe,EACzB,OAAO;AAAA,EACN,cAAc,EAAE,OAAO,EAAE,QAAQ,QAAQ;AAAA,EACzC,eAAe,EAAE,KAAK,CAAC,SAAS,SAAS,OAAO,CAAC,EAAE,QAAQ,OAAO;AACpE,CAAC,EACA,QAAQ;AAEJ,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,MAAM,EAAE,KAAK,CAAC,QAAQ,WAAW,OAAO,WAAW,SAAS,CAAC;AAAA,EAC7D,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,QAAQ,aAAa,SAAS;AAAA,EAC9B,cAAc,EACX,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,IAC5C,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EACA,SAAS;AAAA,EACZ,QAAQ,EACL,OAAO;AAAA,IACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS;AAAA,IAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ,YAAY,OAAO,CAAC,EAAE,QAAQ,MAAM,EAAE,SAAS;AAAA,IACvE,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,SAAS;AAAA;AAAA,EAEZ,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,EAAE,KAAK,CAAC,QAAQ,SAAS,CAAC,EAAE,QAAQ,MAAM,EAAE,SAAS;AAAA,EACjE,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEtC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEhC,YAAY,EACT,OAAO;AAAA,IACN,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,IAC/C,SAAS,EAAE,KAAK,CAAC,OAAO,WAAW,SAAS,CAAC,EAAE,QAAQ,KAAK,EAAE,SAAS;AAAA,IACvE,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,SAAS;AAAA;AAAA,EAEZ,iBAAiB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAC1D,CAAC;AAEM,IAAM,eAAe,EAAE,OAAO;AAAA,EACnC,QAAQ,EAAE,OAAO;AAAA,EACjB,QAAQ,EAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,EACpC,UAAU,EACP,OAAO;AAAA,IACN,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAC1C,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAC7C,2BAA2B,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACtD,CAAC,EACA,QAAQ;AAAA,IACP,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,EAC7B,CAAC;AAAA,EACH,YAAY,EACT,MAAM,eAAe,EACrB,IAAI,CAAC,EACL,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAQ,CAAC;AACtC,CAAC;AAQD,eAAsB,WAAW,YAAiD;AAChF,QAAM,OAAO,MAAM,OAAO,MAAW;AACrC,QAAM,KAAK,MAAM,OAAO,aAAkB;AAE1C,QAAM,aAAa,aACf,CAAC,UAAU,IACX,CAAC,kBAAkB,mBAAmB,gBAAgB;AAE1D,aAAW,KAAK,YAAY;AAC1B,UAAM,IAAI,KAAK,QAAQ,QAAQ,IAAI,GAAG,CAAC;AACvC,QAAI;AACF,YAAM,GAAG,OAAO,CAAC;AAAA,IACnB,QAAQ;AACN;AAAA,IACF;AAEA,QAAI,WAAW,KAAK,CAAC,GAAG;AACtB,UAAI;AACF,cAAM,UAAU,MAAM,GAAG,SAAS,GAAG,MAAM;AAC3C,cAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,cAAM,SAAS,aAAa,MAAM,GAAG;AACrC,eAAO;AAAA,MACT,SAAS,IAAI;AACX,cAAM,IAAI,MAAM,8BAA8B,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE;AAAA,MAClE;AAAA,IACF;AAEA,QAAI;AACF,YAAM,EAAE,SAAS,KAAK,IAAI,MAAM,OAAO,MAAM;AAC7C,YAAM,MAAO,KAAa,YAAY,GAAG;AACzC,YAAM,MAAM,IAAI,CAAC;AACjB,YAAM,MAAM,OAAO,OAAO,QAAQ,YAAY,aAAa,MAAO,IAAY,UAAU;AACxF,YAAM,SAAS,aAAa,UAAU,GAAG;AACzC,UAAI,CAAC,OAAO,SAAS;AACnB,cAAM,IAAI,MAAM,OAAO,MAAM,OAAO;AAAA,MACtC;AACA,aAAO,OAAO;AAAA,IAChB,SAAS,GAAG;AAEV,UAAI;AACF,cAAM,UAAU,MAAM,GAAG,SAAS,GAAG,MAAM;AAC3C,cAAM,MAAM,KAAK,MAAM,OAAO;AAC9B,cAAM,SAAS,aAAa,MAAM,GAAG;AACrC,eAAO;AAAA,MACT,SAAS,IAAI;AACX,cAAM,IAAI,MAAM,8BAA8B,CAAC,KAAK,OAAO,EAAE,CAAC,EAAE;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;;;ADtHA,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,OAAO,cAAc;AAErB,IAAM,UAAU,IAAI,QAAQ;AAC5B,QAAQ,KAAK,MAAM,EAAE,YAAY,kCAAkC,EAAE,QAAQ,OAAO;AAEpF,QACG,QAAQ,SAAS,EACjB,SAAS,YAAY,6BAA6B,EAClD,OAAO,eAAe,qBAAqB,IAAI,EAC/C,OAAO,cAAc,wBAAwB,IAAI,EACjD,OAAO,gBAAgB,6BAA6B,EACpD,OAAO,UAAU,0CAA0C,KAAK,EAChE,OAAO,OAAO,QAAgB,SAAc;AAC3C,MAAI;AACF,UAAM,WAAW,IAAI,eAAe,MAAM;AAC1C,UAAM,UAAU,CAAC,KAAK,OAAO,IAAI,qBAAqB,EAAE,MAAM,IAAI;AAClE,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,MAAM,MAAM,SAAS,QAAQ;AAAA,MACjC,kBAAkB,CAAC,CAAC,KAAK;AAAA,MACzB,qBAAqB,CAAC,CAAC,KAAK;AAAA,IAC9B,CAAC;AACD,UAAM,KAAK,KAAK,IAAI,IAAI;AACxB,UAAM,OAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACxC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,IAAI;AAAA,IAClB,WAAW,KAAK,KAAK;AACnB,YAAM,KAAK,MAAM,OAAO,aAAkB;AAC1C,YAAM,GAAG,UAAU,KAAK,KAAK,MAAM,MAAM;AACzC,eAAS,QAAQ,MAAM,MAAM,uBAAuB,KAAK,GAAG,OAAO,EAAE,IAAI,CAAC;AAAA,IAC5E,OAAO;AACL,eAAS,QAAQ,MAAM,MAAM,eAAe,EAAE,IAAI,CAAC;AACnD,cAAQ,IAAI,IAAI;AAAA,IAClB;AACA,YAAQ,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,OAAO,IAAI,IAAI,CAAC;AAAA,EAClE,SAAS,GAAQ;AACf,UAAM,MAAM,GAAG,WAAW,OAAO,CAAC;AAClC,QAAI,KAAK;AACP,cAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,SAAS,MAAM,oBAAoB,SAAS,IAAI,CAAC,CAAC;AAAA;AAEtF,cAAQ;AAAA,QACN,MAAM,IAAI,oCAAoC;AAAA,QAC9C;AAAA,QACA;AAAA,MACF;AACF,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,UAAU,EAClB,YAAY,2CAA2C,EACvD,OAAO,uBAAuB,qBAAqB,EACnD,OAAO,OAAO,SAAc;AAC3B,MAAI;AACF,UAAM,MAAM,MAAM,WAAW,KAAK,MAAM;AACxC,QAAI,CAAC,KAAK;AACR,cAAQ;AAAA,QACN,MAAM,IAAI,yEAAyE;AAAA,MACrF;AACA,cAAQ,KAAK,CAAC;AACd;AAAA,IACF;AACA,UAAM,WAAW,IAAI,eAAe,IAAI,MAAM;AAC9C,UAAM,UAAU,IAAI,cAAc,EAAE,MAAM;AAC1C,UAAM,KAAK,KAAK,IAAI;AACpB,UAAM,WAAW,MAAM,SAAS,QAAQ;AAAA,MACtC,kBAAkB,IAAI,SAAS;AAAA,MAC/B,qBAAqB,IAAI,SAAS;AAAA,MAClC,2BAA2B,IAAI,SAAS;AAAA,IAC1C,CAAC;AACD,YAAQ,QAAQ,wBAAwB,KAAK,IAAI,IAAI,EAAE,IAAI;AAC3D,UAAM,WAAW,IAAI,YAAY;AAAA,MAC/B,EAAE,YAAY,KAAK;AAAA,MACnB,YAAY,QAAQ;AAAA,IACtB;AACA,UAAM,QAAQ,SAAS,OAAO,UAAU;AACxC,aAAS,MAAM,OAAO,CAAC;AACvB,eAAW,KAAK,IAAI,YAAY;AAC9B,UAAI,EAAE,SAAS,QAAQ;AACrB,cAAM,MAAM,IAAI,cAAc,QAAQ;AACtC,cAAM,EAAE,MAAM,IAAI,MAAM,IAAI,SAAS;AAAA,UACnC,WAAW,IAAI;AAAA,UACf,UAAU,EAAE;AAAA,UACZ,kBAAkB,EAAE;AAAA,UACpB,QAAQ,EAAE;AAAA,UACV,cAAc,EAAE;AAAA,UAChB,QAAQ,EAAE;AAAA,UACV,iBAAiB,EAAE;AAAA,UACnB,YAAY,EAAE;AAAA,UACd,YAAY,CAAC,EAAE,MAAM,MAAM,SAAS,OAAO,KAAK;AAAA,QAClD,CAAC;AACD,iBAAS,KAAK;AACd,YAAI,EAAE,QAAQ,MAAM,MAAM,cAAc,EAAE,IAAI,MAAM,MAAM,MAAM,QAAQ,CAAC;AACzE,cAAM,QAAQ,CAAC,MAAc,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,MAChE,WAAW,EAAE,SAAS,WAAW;AAC/B,YAAI;AACF,gBAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,yBAAyB;AACnE,gBAAM,MAAM,IAAI,iBAAiB,QAAQ;AACzC,gBAAM,SAAS,EAAE,QAAQ;AACzB,gBAAM,QAAQ,MAAM,IAAI,SAAS;AAAA,YAC/B,QAAQ;AAAA,YACR,cAAc,EAAE;AAAA,YAChB,QAAQ,EAAE;AAAA,YACV,YAAY,EAAE;AAAA,YACd,cAAc,EAAE;AAAA,YAChB,kBAAkB,EAAE;AAAA,UACtB,CAAC;AACD,mBAAS,KAAK;AACd,cAAI,EAAE,QAAQ,MAAM,MAAM,wBAAwB,MAAM,MAAM,QAAQ,CAAC;AACvE,gBAAM,QAAQ,CAAC,MAAc,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,QAChE,SAAS,GAAQ;AACf,mBAAS,KAAK;AACd,kBAAQ;AAAA,YACN,MAAM,IAAI,8DAA8D;AAAA,YACxE,GAAG,WAAW;AAAA,UAChB;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,WAAW,EAAE,SAAS,OAAO;AAC3B,YAAI;AACF,gBAAM,EAAE,aAAa,IAAI,MAAM,OAAO,qBAAqB;AAC3D,gBAAM,MAAM,IAAI,aAAa,QAAQ;AACrC,gBAAM,SAAS,EAAE,QAAQ;AACzB,gBAAM,QAAQ,MAAM,IAAI,SAAS;AAAA,YAC/B,QAAQ;AAAA,YACR,cAAc,EAAE;AAAA,YAChB,QAAQ,EAAE;AAAA,YACV,cAAc,EAAE;AAAA,YAChB,YAAY,EAAE;AAAA,UAChB,CAAC;AACD,mBAAS,KAAK;AACd,cAAI,EAAE,QAAQ,MAAM,MAAM,oBAAoB,MAAM,MAAM,QAAQ,CAAC;AACnE,gBAAM,QAAQ,CAAC,MAAc,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,QAChE,SAAS,GAAQ;AACf,mBAAS,KAAK;AACd,kBAAQ;AAAA,YACN,MAAM,IAAI,sDAAsD;AAAA,YAChE,GAAG,WAAW;AAAA,UAChB;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,WAAW,EAAE,SAAS,WAAW;AAC/B,YAAI;AACF,gBAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,yBAAyB;AACnE,gBAAM,MAAM,IAAI,iBAAiB,QAAQ;AACzC,gBAAM,SAAS,EAAE,QAAQ;AACzB,gBAAM,QAAQ,MAAM,IAAI,SAAS;AAAA,YAC/B,QAAQ;AAAA,YACR,cAAc,EAAE;AAAA,YAChB,QAAQ,EAAE;AAAA,YACV,cAAc,EAAE;AAAA,YAChB,YAAY,EAAE;AAAA,UAChB,CAAC;AACD,mBAAS,KAAK;AACd,cAAI,EAAE,QAAQ,MAAM,MAAM,wBAAwB,MAAM,MAAM,QAAQ,CAAC;AACvE,gBAAM,QAAQ,CAAC,MAAc,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,QAChE,SAAS,GAAQ;AACf,mBAAS,KAAK;AACd,kBAAQ;AAAA,YACN,MAAM,IAAI,8DAA8D;AAAA,YACxE,GAAG,WAAW;AAAA,UAChB;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,WAAW,EAAE,SAAS,WAAW;AAC/B,YAAI;AACF,gBAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,yBAAyB;AACnE,gBAAM,MAAM,IAAI,iBAAiB,QAAQ;AACzC,gBAAM,SAAS,EAAE,QAAQ;AACzB,gBAAM,QAAQ,MAAM,IAAI,SAAS;AAAA,YAC/B,QAAQ;AAAA,YACR,cAAc,EAAE;AAAA,YAChB,QAAQ,EAAE;AAAA,YACV,cAAc,EAAE;AAAA,YAChB,YAAY,EAAE;AAAA,UAChB,CAAC;AACD,mBAAS,KAAK;AACd,cAAI,EAAE,QAAQ,MAAM,MAAM,wBAAwB,MAAM,MAAM,QAAQ,CAAC;AACvE,gBAAM,QAAQ,CAAC,MAAc,QAAQ,IAAI,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,QAChE,SAAS,GAAQ;AACf,mBAAS,KAAK;AACd,kBAAQ;AAAA,YACN,MAAM,IAAI,8DAA8D;AAAA,YACxE,GAAG,WAAW;AAAA,UAChB;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,GAAQ;AACf,YAAQ;AAAA,MACN,MAAM,IAAI,iCAAiC;AAAA,MAC3C,GAAG,WAAW;AAAA,MACd;AAAA,IACF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,eAAe,EACvB,SAAS,YAAY,6BAA6B,EAClD,OAAO,sBAAsB,oBAAoB,SAAS,EAC1D,OAAO,qBAAqB,iBAAiB,UAAU,EACvD,OAAO,sBAAsB,4BAA4B,EACzD,OAAO,OAAO,QAAgB,SAAc;AAC3C,MAAI;AACF,UAAM,WAAW,IAAI,eAAe,MAAM;AAC1C,UAAM,WAAW,MAAM,SAAS,QAAQ;AAAA,MACtC,kBAAkB,CAAC,CAAC,KAAK;AAAA,MACzB,qBAAqB;AAAA,IACvB,CAAC;AACD,UAAM,MAAM,IAAI,cAAc,QAAQ;AACtC,UAAM,EAAE,MAAM,IAAI,MAAM,IAAI,SAAS;AAAA,MACnC,WAAW,KAAK;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,kBAAkB,CAAC,CAAC,KAAK;AAAA,IAC3B,CAAC;AACD,YAAQ,IAAI,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACnF,SAAS,GAAQ;AACf,YAAQ,MAAM,MAAM,IAAI,uBAAuB,GAAG,GAAG,WAAW,CAAC;AACjE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QACG,QAAQ,OAAO,EACf,YAAY,wCAAwC,EACpD,OAAO,uBAAuB,qBAAqB,EACnD,OAAO,qBAAqB,iCAAiC,KAAK,EAClE,OAAO,mBAAmB,eAAe,KAAK,EAC9C,OAAO,UAAU,kBAAkB,KAAK,EACxC,OAAO,OAAO,SAAc;AAC3B,QAAM,MAAM,MAAM,WAAW,KAAK,MAAM;AACxC,MAAI,CAAC,KAAK;AACR,YAAQ,MAAM,MAAM,IAAI,0DAA0D,CAAC;AACnF,YAAQ,KAAK,CAAC;AACd;AAAA,EACF;AACA,MAAI,YAAsB,CAAC;AAC3B,QAAM,MAAM,YAAY;AACtB,QAAI;AACF,UAAI,CAAC,KAAK,KAAM,SAAQ,MAAM;AAC9B,YAAM,WAAW,IAAI,eAAe,IAAI,MAAM;AAC9C,YAAM,WAAW,MAAM,SAAS,QAAQ;AAAA,QACtC,kBAAkB,IAAI,SAAS;AAAA,QAC/B,qBAAqB,IAAI,SAAS;AAAA,MACpC,CAAC;AACD,UAAI,KAAK,aAAa,WAAW;AAC/B,YAAI,KAAK,MAAM;AACb,kBAAQ;AAAA,YACN,KAAK,UAAU;AAAA,cACb,OAAO;AAAA,cACP,QAAQ,SAAS;AAAA,cACjB,QAAQ,SAAS,OAAO;AAAA,YAC1B,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,kBAAQ,IAAI,MAAM,MAAM,mBAAmB,CAAC;AAAA,QAC9C;AACA;AAAA,MACF;AACA,YAAM,WAAqB,CAAC;AAC5B,iBAAW,KAAK,IAAI,YAAY;AAC9B,YAAI,EAAE,SAAS,WAAW,KAAK,aAAa,SAAS,KAAK,aAAa,kBAAkB;AACvF,gBAAM,MAAM,IAAI,cAAc,QAAQ;AACtC,gBAAM,EAAE,MAAM,IAAI,MAAM,IAAI,SAAS;AAAA,YACnC,WAAW,IAAI;AAAA,YACf,UAAU,EAAE;AAAA,YACZ,kBAAkB,EAAE;AAAA,YACpB,QAAQ,EAAE;AAAA,UACZ,CAAC;AACD,cAAI,KAAK,MAAM;AACb,oBAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,qBAAqB,MAAM,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,UACjF,OAAO;AACL,oBAAQ;AAAA,cACN,MAAM,MAAM,cAAc,EAAE,IAAI,IAAI;AAAA,cACpC,MAAM,IAAI,CAAC,MAAc,MAAM,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,YACnD;AAAA,UACF;AACA,mBAAS,KAAK,GAAG,KAAK;AAAA,QACxB;AAAA,MACF;AAEA,YAAM,QAAQ,SAAS,OAAO,CAAC,MAAM,CAAC,UAAU,SAAS,CAAC,CAAC;AAC3D,YAAM,UAAU,UAAU,OAAO,CAAC,MAAM,CAAC,SAAS,SAAS,CAAC,CAAC;AAC7D,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,QAAQ,OAAO,QAAQ,CAAC,CAAC;AAAA,MAC/D,OAAO;AACL,YAAI,MAAM,OAAQ,SAAQ,IAAI,MAAM,KAAK,UAAU,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;AACtE,YAAI,QAAQ,OAAQ,SAAQ,IAAI,MAAM,OAAO,YAAY,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MAChF;AACA,kBAAY;AAAA,IACd,SAAS,GAAQ;AACf,UAAI,KAAK;AACP,gBAAQ,IAAI,KAAK,UAAU,EAAE,OAAO,SAAS,SAAS,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;AAAA,UAC7E,SAAQ,MAAM,MAAM,IAAI,wBAAwB,GAAG,GAAG,WAAW,CAAC;AAAA,IACzE;AAAA,EACF;AACA,QAAM,YAAY,OAAO,KAAK,QAAQ,KAAK;AAC3C,MAAI,QAAa;AACjB,QAAM,UAAU,CAAC,SAAkB;AAEjC,QAAI,QAAQ,KAAK,WAAW,IAAI,MAAM,EAAG;AACzC,iBAAa,KAAK;AAClB,YAAQ,WAAW,KAAK,SAAS;AAAA,EACnC;AACA,UAAQ,IAAI,MAAM,KAAK,yBAAyB,CAAC;AACjD,QAAM,WAAW,oBAAI,IAAY,CAAC,IAAI,MAAM,CAAC;AAE7C,aAAW,KAAK,IAAI,YAAY;AAC9B,QAAI,EAAE,YAAY,EAAE,aAAa,cAAc,EAAE,aAAa,WAAW;AACvE,eAAS,IAAI,EAAE,QAAQ;AAAA,IACzB;AAAA,EACF;AAEA,WAAS,IAAI,IAAI,MAAM;AACvB,WACG,MAAM,MAAM,KAAK,QAAQ,GAAG,EAAE,eAAe,KAAK,CAAC,EACnD,GAAG,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC,EAC3B,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC,EAC9B,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,CAAC;AACjC,QAAM,IAAI;AACZ,CAAC;AAEH,QACG,QAAQ,MAAM,EACd,YAAY,2BAA2B,EACvC,OAAO,aAAa,iBAAiB,EACrC,OAAO,OAAO,UAAe;AAC5B,QAAM,KAAK,MAAM,OAAO,aAAkB;AAC1C,QAAM,OAAO,MAAM,OAAO,MAAW;AACrC,QAAM,SAAS,KAAK,QAAQ,QAAQ,IAAI,GAAG,gBAAgB;AAC3D,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQjB,MAAI;AACF,UAAM,GAAG,UAAU,QAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AACnD,YAAQ,IAAI,MAAM,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,EAC9C,SAAS,GAAQ;AACf,YAAQ,MAAM,MAAM,IAAI,cAAc,GAAG,GAAG,WAAW,CAAC;AACxD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QAAQ,WAAW,QAAQ,IAAI;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/config.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport cliProgress from 'cli-progress';\nimport { loadConfig } from './config.js';\nimport { SchemaAnalyzer } from '@drzl/analyzer';\nimport { ORPCGenerator } from '@drzl/generator-orpc';\nimport chokidar from 'chokidar';\n\nconst program = new Command();\nprogram.name('drzl').description('DRZL - Drizzle Developer Toolkit').version('0.0.1');\n\nprogram\n .command('analyze')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('--relations', 'include relations', true)\n .option('--validate', 'validate constraints', true)\n .option('--out <file>', 'write analysis JSON to file')\n .option('--json', 'print JSON to stdout (overrides --out)', false)\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const spinner = !opts.json ? ora('Analyzing schema...').start() : null;\n const start = Date.now();\n const res = await analyzer.analyze({\n includeRelations: !!opts.relations,\n validateConstraints: !!opts.validate,\n });\n const ms = Date.now() - start;\n const json = JSON.stringify(res, null, 2);\n if (opts.json) {\n console.log(json);\n } else if (opts.out) {\n const fs = await import('node:fs/promises');\n await fs.writeFile(opts.out, json, 'utf8');\n spinner?.succeed(chalk.green(`Analysis written to ${opts.out} in ${ms}ms`));\n } else {\n spinner?.succeed(chalk.green(`Analyzed in ${ms}ms`));\n console.log(json);\n }\n process.exit(res.issues.some((i) => i.level === 'error') ? 2 : 0);\n } catch (e: any) {\n const msg = e?.message ?? String(e);\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', code: 'DRZL_CLI_ANALYZE', message: msg }));\n else\n console.error(\n chalk.red('Analyze failed (DRZL_CLI_ANALYZE):'),\n msg,\n '\\nTip: run with --json for structured output.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate')\n .description('Run configured generators (drzl.config.*)')\n .option('-c, --config <path>', 'path to drzl.config')\n .action(async (opts: any) => {\n try {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(\n chalk.red('No config found (DRZL_CFG_001). Create drzl.config.ts or pass --config.')\n );\n process.exit(2);\n return;\n }\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const spinner = ora('Analyzing...').start();\n const t0 = Date.now();\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n includeHeuristicRelations: cfg.analyzer.includeHeuristicRelations,\n });\n spinner.succeed(`Analysis complete in ${Date.now() - t0}ms`);\n const progress = new cliProgress.SingleBar(\n { hideCursor: true },\n cliProgress.Presets.shades_classic\n );\n const total = analysis.tables.length || 1;\n progress.start(total, 0);\n for (const g of cfg.generators) {\n if (g.kind === 'orpc') {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n outputHeader: g.outputHeader,\n format: g.format,\n templateOptions: g.templateOptions,\n validation: g.validation,\n onProgress: ({ index }) => progress.update(index),\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (${g.kind}): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } else if (g.kind === 'service') {\n try {\n const { ServiceGenerator } = await import('@drzl/generator-service');\n const gen = new ServiceGenerator(analysis);\n const target = g.path ?? 'src/services';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n dataAccess: g.dataAccess,\n dbImportPath: g.dbImportPath,\n schemaImportPath: g.schemaImportPath,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (service): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Service generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-service')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'zod') {\n try {\n const { ZodGenerator } = await import('@drzl/generator-zod');\n const gen = new ZodGenerator(analysis);\n const target = g.path ?? 'src/validators/zod';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (zod): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Zod generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-zod')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'valibot') {\n try {\n const { ValibotGenerator } = await import('@drzl/generator-valibot');\n const gen = new ValibotGenerator(analysis);\n const target = g.path ?? 'src/validators/valibot';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (valibot): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('Valibot generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-valibot')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n } else if (g.kind === 'arktype') {\n try {\n const { ArkTypeGenerator } = await import('@drzl/generator-arktype');\n const gen = new ArkTypeGenerator(analysis);\n const target = g.path ?? 'src/validators/arktype';\n const files = await gen.generate({\n outDir: target,\n outputHeader: g.outputHeader,\n format: g.format,\n schemaSuffix: g.schemaSuffix,\n fileSuffix: g.fileSuffix,\n });\n progress.stop();\n ora().succeed(chalk.green(`Generated (arktype): ${files.length} files`));\n files.forEach((f: string) => console.log(' -', chalk.cyan(f)));\n } catch (e: any) {\n progress.stop();\n console.error(\n chalk.red('ArkType generator missing.'),\n chalk.yellow('\\nInstall with: npm install @drzl/generator-arktype')\n );\n console.error(chalk.gray('Error details:'), e?.message ?? e);\n process.exit(1);\n }\n }\n }\n } catch (e: any) {\n console.error(\n chalk.red('Generate failed (DRZL_GEN_001):'),\n e?.message ?? e,\n '\\nTip: check your drzl.config.ts and template path.'\n );\n process.exit(1);\n }\n });\n\nprogram\n .command('generate:orpc')\n .argument('<schema>', 'path to drizzle schema (TS)')\n .option('-o, --outDir <dir>', 'output directory', 'src/api')\n .option('--template <name>', 'template name', 'standard')\n .option('--includeRelations', 'include relation endpoints')\n .action(async (schema: string, opts: any) => {\n try {\n const analyzer = new SchemaAnalyzer(schema);\n const analysis = await analyzer.analyze({\n includeRelations: !!opts.includeRelations,\n validateConstraints: true,\n });\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: opts.outDir,\n template: opts.template,\n includeRelations: !!opts.includeRelations,\n });\n console.log(chalk.green(`Generated:`), files.map((f) => chalk.cyan(f)).join(', '));\n } catch (e: any) {\n console.error(chalk.red('Generate orpc failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram\n .command('watch')\n .description('Watch schema and regenerate on changes')\n .option('-c, --config <path>', 'path to drzl.config')\n .option('--pipeline <name>', 'all | analyze | generate-orpc', 'all')\n .option('--debounce <ms>', 'debounce ms', '200')\n .option('--json', 'emit JSON logs', false)\n .action(async (opts: any) => {\n const cfg = await loadConfig(opts.config);\n if (!cfg) {\n console.error(chalk.red('No config found. Create drzl.config.ts or pass --config.'));\n process.exit(2);\n return;\n }\n let lastFiles: string[] = [];\n const run = async () => {\n try {\n if (!opts.json) console.clear();\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n });\n if (opts.pipeline === 'analyze') {\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'analyze_complete',\n issues: analysis.issues,\n tables: analysis.tables.length,\n })\n );\n } else {\n console.log(chalk.green('Analyze complete.'));\n }\n return;\n }\n const newFiles: string[] = [];\n for (const g of cfg.generators) {\n if (g.kind === 'orpc' && (opts.pipeline === 'all' || opts.pipeline === 'generate-orpc')) {\n const gen = new ORPCGenerator(analysis);\n const { files } = await gen.generate({\n outputDir: cfg.outDir,\n template: g.template,\n includeRelations: g.includeRelations,\n naming: g.naming,\n });\n if (opts.json) {\n console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }));\n } else {\n console.log(\n chalk.green(`Generated (${g.kind}):`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n }\n newFiles.push(...files);\n }\n }\n // Diff\n const added = newFiles.filter((f) => !lastFiles.includes(f));\n const removed = lastFiles.filter((f) => !newFiles.includes(f));\n if (opts.json) {\n console.log(JSON.stringify({ event: 'diff', added, removed }));\n } else {\n if (added.length) console.log(chalk.blue(`Added: ${added.join(', ')}`));\n if (removed.length) console.log(chalk.yellow(`Removed: ${removed.join(', ')}`));\n }\n lastFiles = newFiles;\n } catch (e: any) {\n if (opts.json)\n console.log(JSON.stringify({ event: 'error', message: String(e?.message ?? e) }));\n else console.error(chalk.red('Watch pipeline failed:'), e?.message ?? e);\n }\n };\n const debounced = Number(opts.debounce) || 200;\n let timer: any = null;\n const trigger = (file?: string) => {\n // Ignore changes in outDir to avoid loops\n if (file && file.startsWith(cfg.outDir)) return;\n clearTimeout(timer);\n timer = setTimeout(run, debounced);\n };\n console.log(chalk.gray('Watching for changes...'));\n const watchSet = new Set<string>([cfg.schema]);\n // Watch template paths (only when path-like and exists)\n for (const g of cfg.generators) {\n if (g.template && g.template !== 'standard' && g.template !== 'minimal') {\n watchSet.add(g.template);\n }\n }\n // Also watch outDir but ignore events from it to report diffs cleanly\n watchSet.add(cfg.outDir);\n chokidar\n .watch(Array.from(watchSet), { ignoreInitial: true })\n .on('add', (p) => trigger(p))\n .on('change', (p) => trigger(p))\n .on('unlink', (p) => trigger(p));\n await run();\n });\n\nprogram\n .command('init')\n .description('Scaffold a drzl.config.ts')\n .option('-y, --yes', 'accept defaults')\n .action(async (_opts: any) => {\n const fs = await import('node:fs/promises');\n const path = await import('node:path');\n const target = path.resolve(process.cwd(), 'drzl.config.ts');\n const template = `export default {\n schema: 'src/db/schema.ts',\n outDir: 'src/api',\n analyzer: { includeRelations: true, validateConstraints: true },\n generators: [\n { kind: 'orpc', template: 'standard', includeRelations: true }\n ]\n} as const\\n`;\n try {\n await fs.writeFile(target, template, { flag: 'wx' });\n console.log(chalk.green(`Created ${target}`));\n } catch (e: any) {\n console.error(chalk.red('Init failed:'), e?.message ?? e);\n process.exit(1);\n }\n });\n\nprogram.parseAsync(process.argv);\n","import { z } from 'zod';\n\nexport const NamingSchema = z\n .object({\n routerSuffix: z.string().default('Router'),\n procedureCase: z.enum(['camel', 'kebab', 'snake']).default('camel'),\n })\n .partial();\n\nexport const GeneratorSchema = z.object({\n kind: z.enum(['orpc', 'service', 'zod', 'valibot', 'arktype']),\n template: z.string().optional(),\n includeRelations: z.boolean().optional(),\n naming: NamingSchema.optional(),\n outputHeader: z\n .object({\n enabled: z.boolean().default(true).optional(),\n text: z.string().optional(),\n })\n .optional(),\n format: z\n .object({\n enabled: z.boolean().default(true).optional(),\n engine: z.enum(['auto', 'prettier', 'biome']).default('auto').optional(),\n configPath: z.string().optional(),\n })\n .optional(),\n // service generator specific options\n path: z.string().optional(),\n dataAccess: z.enum(['stub', 'drizzle']).default('stub').optional(),\n dbImportPath: z.string().optional(),\n schemaImportPath: z.string().optional(),\n // zod generator specific options\n schemaSuffix: z.string().optional(),\n fileSuffix: z.string().optional(),\n // orpc validation sharing\n validation: z\n .object({\n useShared: z.boolean().default(false).optional(),\n library: z.enum(['zod', 'valibot', 'arktype']).default('zod').optional(),\n importPath: z.string().optional(),\n schemaSuffix: z.string().optional(),\n })\n .optional(),\n // template options\n templateOptions: z.record(z.string(), z.any()).optional(),\n});\n\nexport const ConfigSchema = z.object({\n schema: z.string(),\n outDir: z.string().default('src/api'),\n analyzer: z\n .object({\n includeRelations: z.boolean().default(true),\n validateConstraints: z.boolean().default(true),\n includeHeuristicRelations: z.boolean().default(false),\n })\n .default({\n includeRelations: true,\n validateConstraints: true,\n includeHeuristicRelations: false,\n }),\n generators: z\n .array(GeneratorSchema)\n .min(1)\n .default([{ kind: 'orpc' } as any]),\n});\n\nexport type DrzlConfig = z.infer<typeof ConfigSchema>;\n\nexport function defineConfig(cfg: DrzlConfig) {\n return cfg;\n}\n\nexport async function loadConfig(customPath?: string): Promise<DrzlConfig | null> {\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n\n const candidates = customPath\n ? [customPath]\n : ['drzl.config.ts', 'drzl.config.mjs', 'drzl.config.js'];\n\n for (const c of candidates) {\n const p = path.resolve(process.cwd(), c);\n try {\n await fs.access(p);\n } catch {\n continue;\n }\n // If JSON, parse directly and skip module loading\n if (/\\.json$/i.test(p)) {\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n // Try jiti to seamlessly load TS/ESM/CJS\n try {\n const { default: jiti } = await import('jiti');\n const jit = (jiti as any)(import.meta.url);\n const mod = jit(p);\n const raw = mod && typeof mod === 'object' && 'default' in mod ? (mod as any).default : mod;\n const parsed = ConfigSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(parsed.error.message);\n }\n return parsed.data;\n } catch (e) {\n // Fallback: try JSON parse\n try {\n const content = await fs.readFile(p, 'utf8');\n const raw = JSON.parse(content);\n const parsed = ConfigSchema.parse(raw);\n return parsed;\n } catch (e2) {\n throw new Error(`Failed to load config from ${p}: ${String(e2)}`);\n }\n }\n }\n return null;\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drzl/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -19,8 +19,12 @@
|
|
|
19
19
|
"cli-progress": "^3.12.0",
|
|
20
20
|
"zod": "^4.1.5",
|
|
21
21
|
"jiti": "^2.5.1",
|
|
22
|
-
"@drzl/analyzer": "^0.0.
|
|
23
|
-
"@drzl/generator-orpc": "^0.0.
|
|
22
|
+
"@drzl/analyzer": "^0.0.3",
|
|
23
|
+
"@drzl/generator-orpc": "^0.0.3",
|
|
24
|
+
"@drzl/generator-zod": "^0.0.3",
|
|
25
|
+
"@drzl/generator-service": "^0.0.3",
|
|
26
|
+
"@drzl/generator-valibot": "^0.0.3",
|
|
27
|
+
"@drzl/generator-arktype": "^0.0.3"
|
|
24
28
|
},
|
|
25
29
|
"devDependencies": {
|
|
26
30
|
"tsup": "^8.5.0",
|