@drzl/cli 0.1.0 → 0.3.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 +4 -4
- package/dist/chunk-MEPFGJIF.js +164 -0
- package/dist/chunk-MEPFGJIF.js.map +1 -0
- package/dist/cli.cjs +305 -79
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +213 -35
- package/dist/cli.js.map +1 -1
- package/dist/config.cjs +100 -42
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +140 -0
- package/dist/config.d.ts +140 -0
- package/dist/config.js +11 -3
- package/package.json +16 -10
- package/dist/chunk-XVTVU3EC.js +0 -109
- package/dist/chunk-XVTVU3EC.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.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"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { SchemaAnalyzer } from '@drzl/analyzer';\nimport { ORPCGenerator } from '@drzl/generator-orpc';\nimport chalk from 'chalk';\nimport chokidar from 'chokidar';\nimport cliProgress from 'cli-progress';\nimport { Command } from 'commander';\nimport * as path from 'node:path';\nimport ora from 'ora';\nimport {\n computeGeneratorOutputDirs,\n computeWatchTargets,\n DrzlConfig,\n loadConfig,\n} from './config.js';\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 .option('--poll', 'force polling (helps WSL/Docker/remote FS)', false)\n .action(async (opts: any) => {\n let 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\n const abs = (p: string) => path.resolve(process.cwd(), p);\n const isInside = (child: string, parent: string) => {\n const rel = path.relative(parent, child);\n return !!rel && !rel.startsWith('..') && !path.isAbsolute(rel);\n };\n\n const ignoredOutDirs = new Set<string>(computeGeneratorOutputDirs(cfg).map(abs));\n const currentTargets = new Set<string>(computeWatchTargets(cfg).map(abs));\n\n const syncWatcherTargets = (watcher: import('chokidar').FSWatcher, next: Set<string>) => {\n const add: string[] = [];\n const del: string[] = [];\n for (const p of next) if (!currentTargets.has(p)) add.push(p);\n for (const p of currentTargets) if (!next.has(p)) del.push(p);\n if (add.length) watcher.add(add);\n if (del.length) watcher.unwatch(del);\n currentTargets.clear();\n next.forEach((p) => currentTargets.add(p));\n };\n\n const rebuildIgnoreDirsFrom = (cfgNow: DrzlConfig) => {\n ignoredOutDirs.clear();\n for (const d of computeGeneratorOutputDirs(cfgNow)) ignoredOutDirs.add(abs(d));\n };\n\n const ignoredFn = (p: string) => {\n const full = abs(p);\n for (const dir of ignoredOutDirs) {\n if (full === dir || isInside(full, dir)) return true;\n }\n return false;\n };\n\n const watcher = chokidar.watch(Array.from(currentTargets), {\n ignoreInitial: true,\n awaitWriteFinish: { stabilityThreshold: 400, pollInterval: 50 },\n usePolling: !!opts.poll,\n ignored: ignoredFn,\n });\n\n const logTrigger = (type: 'add' | 'change' | 'unlink', file: string) => {\n if (opts.json) console.log(JSON.stringify({ event: 'trigger', type, file }));\n };\n\n watcher\n .on('add', (p) => {\n logTrigger('add', p);\n trigger(p);\n })\n .on('change', (p) => {\n logTrigger('change', p);\n trigger(p);\n })\n .on('unlink', (p) => {\n logTrigger('unlink', p);\n trigger(p);\n });\n\n let lastFiles: string[] = [];\n\n const run = async () => {\n try {\n const reloaded = await loadConfig(opts.config);\n if (!reloaded) throw new Error('Config disappeared during watch.');\n cfg = reloaded;\n\n rebuildIgnoreDirsFrom(cfg);\n const nextTargets = new Set<string>(computeWatchTargets(cfg).map(abs));\n syncWatcherTargets(watcher, nextTargets);\n\n if (!opts.json) console.clear();\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'watch_config_applied',\n targets: Array.from(currentTargets),\n ignored: Array.from(ignoredOutDirs),\n })\n );\n }\n\n const analyzer = new SchemaAnalyzer(cfg.schema);\n const analysis = await analyzer.analyze({\n includeRelations: cfg.analyzer.includeRelations,\n validateConstraints: cfg.analyzer.validateConstraints,\n includeHeuristicRelations: cfg.analyzer.includeHeuristicRelations,\n });\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\n const newFiles: string[] = [];\n\n for (const g of cfg.generators) {\n if (\n opts.pipeline !== 'all' &&\n !(opts.pipeline === 'generate-orpc' && g.kind === 'orpc')\n ) {\n continue;\n }\n\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 });\n opts.json\n ? console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }))\n : console.log(\n chalk.green(`Generated (${g.kind}):`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n newFiles.push(...files);\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 opts.json\n ? console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }))\n : console.log(\n chalk.green(`Generated (service): ${files.length} files`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n newFiles.push(...files);\n } catch (e: any) {\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 return;\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 opts.json\n ? console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }))\n : console.log(\n chalk.green(`Generated (zod): ${files.length} files`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n newFiles.push(...files);\n } catch (e: any) {\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 return;\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 opts.json\n ? console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }))\n : console.log(\n chalk.green(`Generated (valibot): ${files.length} files`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n newFiles.push(...files);\n } catch (e: any) {\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 return;\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 opts.json\n ? console.log(JSON.stringify({ event: 'generate_complete', kind: g.kind, files }))\n : console.log(\n chalk.green(`Generated (arktype): ${files.length} files`),\n files.map((f: string) => chalk.cyan(f)).join(', ')\n );\n newFiles.push(...files);\n } catch (e: any) {\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 return;\n }\n }\n }\n\n const added = newFiles.filter((f) => !lastFiles.includes(f));\n const removed = lastFiles.filter((f) => !newFiles.includes(f));\n opts.json\n ? console.log(JSON.stringify({ event: 'diff', added, removed }))\n : (() => {\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 opts.json\n ? console.log(JSON.stringify({ event: 'error', message: String(e?.message ?? e) }))\n : console.error(chalk.red('Watch pipeline failed:'), e?.message ?? e);\n }\n };\n\n const debounced = Number(opts.debounce) || 200;\n let timer: NodeJS.Timeout | null = null;\n const trigger = (file?: string) => {\n if (file) {\n const full = abs(file);\n for (const dir of ignoredOutDirs) {\n if (full === dir || isInside(full, dir)) return;\n }\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(run, debounced);\n };\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n event: 'watching',\n targets: Array.from(currentTargets),\n ignored: Array.from(ignoredOutDirs),\n })\n );\n } else {\n console.log(\n chalk.gray(\n 'Watching:\\n ' +\n Array.from(currentTargets)\n .map((p) => path.relative(process.cwd(), p))\n .join('\\n ')\n )\n );\n }\n\n watcher\n .on('add', (p) => trigger(p))\n .on('change', (p) => trigger(p))\n .on('unlink', (p) => trigger(p))\n .on('error', (err) => console.error(chalk.red('Watcher error:'), err));\n\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"],"mappings":"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","names":["watcher","path"]}
|
package/dist/config.cjs
CHANGED
|
@@ -30,15 +30,21 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/config.ts
|
|
31
31
|
var config_exports = {};
|
|
32
32
|
__export(config_exports, {
|
|
33
|
+
AnalyzerSchema: () => AnalyzerSchema,
|
|
33
34
|
ConfigSchema: () => ConfigSchema,
|
|
34
35
|
GeneratorSchema: () => GeneratorSchema,
|
|
35
36
|
NamingSchema: () => NamingSchema,
|
|
37
|
+
computeGeneratorOutputDirs: () => computeGeneratorOutputDirs,
|
|
38
|
+
computeWatchTargets: () => computeWatchTargets,
|
|
36
39
|
defineConfig: () => defineConfig,
|
|
37
|
-
loadConfig: () => loadConfig
|
|
40
|
+
loadConfig: () => loadConfig,
|
|
41
|
+
resolveTemplateDirsSync: () => resolveTemplateDirsSync
|
|
38
42
|
});
|
|
39
43
|
module.exports = __toCommonJS(config_exports);
|
|
44
|
+
var fs = __toESM(require("fs"), 1);
|
|
45
|
+
var import_node_module = require("module");
|
|
46
|
+
var path = __toESM(require("path"), 1);
|
|
40
47
|
var import_zod = require("zod");
|
|
41
|
-
var import_meta = {};
|
|
42
48
|
var NamingSchema = import_zod.z.object({
|
|
43
49
|
routerSuffix: import_zod.z.string().default("Router"),
|
|
44
50
|
procedureCase: import_zod.z.enum(["camel", "kebab", "snake"]).default("camel")
|
|
@@ -62,7 +68,7 @@ var GeneratorSchema = import_zod.z.object({
|
|
|
62
68
|
dataAccess: import_zod.z.enum(["stub", "drizzle"]).default("stub").optional(),
|
|
63
69
|
dbImportPath: import_zod.z.string().optional(),
|
|
64
70
|
schemaImportPath: import_zod.z.string().optional(),
|
|
65
|
-
// zod generator specific options
|
|
71
|
+
// zod/valibot/arktype generator specific options
|
|
66
72
|
schemaSuffix: import_zod.z.string().optional(),
|
|
67
73
|
fileSuffix: import_zod.z.string().optional(),
|
|
68
74
|
// orpc validation sharing
|
|
@@ -75,14 +81,15 @@ var GeneratorSchema = import_zod.z.object({
|
|
|
75
81
|
// template options
|
|
76
82
|
templateOptions: import_zod.z.record(import_zod.z.string(), import_zod.z.any()).optional()
|
|
77
83
|
});
|
|
84
|
+
var AnalyzerSchema = import_zod.z.object({
|
|
85
|
+
includeRelations: import_zod.z.boolean().default(true),
|
|
86
|
+
validateConstraints: import_zod.z.boolean().default(true),
|
|
87
|
+
includeHeuristicRelations: import_zod.z.boolean().default(false)
|
|
88
|
+
});
|
|
78
89
|
var ConfigSchema = import_zod.z.object({
|
|
79
90
|
schema: import_zod.z.string(),
|
|
80
91
|
outDir: import_zod.z.string().default("src/api"),
|
|
81
|
-
analyzer:
|
|
82
|
-
includeRelations: import_zod.z.boolean().default(true),
|
|
83
|
-
validateConstraints: import_zod.z.boolean().default(true),
|
|
84
|
-
includeHeuristicRelations: import_zod.z.boolean().default(false)
|
|
85
|
-
}).default({
|
|
92
|
+
analyzer: AnalyzerSchema.default({
|
|
86
93
|
includeRelations: true,
|
|
87
94
|
validateConstraints: true,
|
|
88
95
|
includeHeuristicRelations: false
|
|
@@ -93,56 +100,107 @@ function defineConfig(cfg) {
|
|
|
93
100
|
return cfg;
|
|
94
101
|
}
|
|
95
102
|
async function loadConfig(customPath) {
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
|
|
103
|
+
const fsp = await import("fs/promises");
|
|
104
|
+
const candidates = customPath ? [customPath] : [
|
|
105
|
+
"drzl.config.ts",
|
|
106
|
+
"drzl.config.mjs",
|
|
107
|
+
"drzl.config.js",
|
|
108
|
+
"drzl.config.cjs",
|
|
109
|
+
"drzl.config.json"
|
|
110
|
+
];
|
|
99
111
|
for (const c of candidates) {
|
|
100
112
|
const p = path.resolve(process.cwd(), c);
|
|
101
113
|
try {
|
|
102
|
-
await
|
|
114
|
+
await fsp.access(p);
|
|
103
115
|
} catch {
|
|
104
116
|
continue;
|
|
105
117
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const parsed = ConfigSchema.parse(raw);
|
|
111
|
-
return parsed;
|
|
112
|
-
} catch (e2) {
|
|
113
|
-
throw new Error(`Failed to load config from ${p}: ${String(e2)}`);
|
|
114
|
-
}
|
|
118
|
+
const ext = path.extname(p).toLowerCase();
|
|
119
|
+
if (ext === ".json") {
|
|
120
|
+
const raw2 = JSON.parse(await fsp.readFile(p, "utf8"));
|
|
121
|
+
return ConfigSchema.parse(raw2);
|
|
115
122
|
}
|
|
123
|
+
const { createJiti } = await import("jiti");
|
|
124
|
+
const stat = await fsp.stat(p);
|
|
125
|
+
const base = typeof __filename !== "undefined" ? __filename : path.join(process.cwd(), "index.js");
|
|
126
|
+
const jiti = createJiti(base, {
|
|
127
|
+
moduleCache: false,
|
|
128
|
+
// re-evaluate each time
|
|
129
|
+
fsCache: true,
|
|
130
|
+
// keep transform cache
|
|
131
|
+
cacheVersion: String(stat.mtimeMs),
|
|
132
|
+
// bump on edit
|
|
133
|
+
interopDefault: true,
|
|
134
|
+
tryNative: false
|
|
135
|
+
// <— prevent native import of .ts
|
|
136
|
+
// debug: true,
|
|
137
|
+
});
|
|
138
|
+
const mod = await jiti.import(p);
|
|
139
|
+
const raw = mod?.default ?? mod;
|
|
140
|
+
return ConfigSchema.parse(raw);
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
function computeGeneratorOutputDirs(cfg, cwd = process.cwd()) {
|
|
145
|
+
const abs = (p) => path.resolve(cwd, p);
|
|
146
|
+
const dirs = /* @__PURE__ */ new Set();
|
|
147
|
+
dirs.add(abs(cfg.outDir));
|
|
148
|
+
for (const g of cfg.generators) {
|
|
149
|
+
if (g.kind === "service") dirs.add(abs(g.path ?? "src/services"));
|
|
150
|
+
if (g.kind === "zod") dirs.add(abs(g.path ?? "src/validators/zod"));
|
|
151
|
+
if (g.kind === "valibot") dirs.add(abs(g.path ?? "src/validators/valibot"));
|
|
152
|
+
if (g.kind === "arktype") dirs.add(abs(g.path ?? "src/validators/arktype"));
|
|
153
|
+
}
|
|
154
|
+
return [...dirs];
|
|
155
|
+
}
|
|
156
|
+
function resolveTemplateDirsSync(cfg, cwd = process.cwd()) {
|
|
157
|
+
const results = [];
|
|
158
|
+
const req = (0, import_node_module.createRequire)(
|
|
159
|
+
typeof __filename !== "undefined" ? __filename : path.join(process.cwd(), "index.js")
|
|
160
|
+
);
|
|
161
|
+
for (const g of cfg.generators) {
|
|
162
|
+
const t = g.template;
|
|
163
|
+
if (!t || t === "standard" || t === "minimal") continue;
|
|
164
|
+
let pkgDir = null;
|
|
116
165
|
try {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
const content = await fs.readFile(p, "utf8");
|
|
130
|
-
const raw = JSON.parse(content);
|
|
131
|
-
const parsed = ConfigSchema.parse(raw);
|
|
132
|
-
return parsed;
|
|
133
|
-
} catch (e2) {
|
|
134
|
-
throw new Error(`Failed to load config from ${p}: ${String(e2)}`);
|
|
135
|
-
}
|
|
166
|
+
const pkg = req.resolve(`${t}/package.json`, { paths: [cwd] });
|
|
167
|
+
pkgDir = path.dirname(pkg);
|
|
168
|
+
} catch {
|
|
169
|
+
}
|
|
170
|
+
if (pkgDir) {
|
|
171
|
+
results.push(pkgDir);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
if (/[./\\]/.test(t)) {
|
|
175
|
+
const abs = path.resolve(cwd, t);
|
|
176
|
+
if (fs.existsSync(abs)) results.push(abs);
|
|
136
177
|
}
|
|
137
178
|
}
|
|
138
|
-
return
|
|
179
|
+
return Array.from(new Set(results));
|
|
180
|
+
}
|
|
181
|
+
function computeWatchTargets(cfg, cwd = process.cwd()) {
|
|
182
|
+
const abs = (p) => path.resolve(cwd, p);
|
|
183
|
+
const schemaAbs = abs(cfg.schema);
|
|
184
|
+
const targets = /* @__PURE__ */ new Set([
|
|
185
|
+
path.join(path.dirname(schemaAbs), "**/*.{ts,tsx,js}"),
|
|
186
|
+
abs("drzl.config.ts"),
|
|
187
|
+
abs("drzl.config.js"),
|
|
188
|
+
abs("drzl.config.mjs"),
|
|
189
|
+
abs("drzl.config.cjs")
|
|
190
|
+
]);
|
|
191
|
+
for (const t of resolveTemplateDirsSync(cfg, cwd)) targets.add(t);
|
|
192
|
+
return [...targets];
|
|
139
193
|
}
|
|
140
194
|
// Annotate the CommonJS export names for ESM import in node:
|
|
141
195
|
0 && (module.exports = {
|
|
196
|
+
AnalyzerSchema,
|
|
142
197
|
ConfigSchema,
|
|
143
198
|
GeneratorSchema,
|
|
144
199
|
NamingSchema,
|
|
200
|
+
computeGeneratorOutputDirs,
|
|
201
|
+
computeWatchTargets,
|
|
145
202
|
defineConfig,
|
|
146
|
-
loadConfig
|
|
203
|
+
loadConfig,
|
|
204
|
+
resolveTemplateDirsSync
|
|
147
205
|
});
|
|
148
206
|
//# sourceMappingURL=config.cjs.map
|
package/dist/config.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["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 { createJiti } = await import('jiti');\n const jit = createJiti(import.meta.url);\n const mod = await jit.import(p);\n const raw = mod && typeof mod === 'object' && 'default' in mod ? mod.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 console.error(`jiti failed to load ${p}:`, 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":[]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import * as fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport * as path from 'node:path';\nimport { 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/valibot/arktype 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 AnalyzerSchema = z.object({\n includeRelations: z.boolean().default(true),\n validateConstraints: z.boolean().default(true),\n includeHeuristicRelations: z.boolean().default(false),\n});\n\nexport const ConfigSchema = z.object({\n schema: z.string(),\n outDir: z.string().default('src/api'),\n analyzer: AnalyzerSchema.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\n// ✨ Separate input vs output types\nexport type DrzlConfigInput = z.input<typeof ConfigSchema>;\nexport type DrzlConfig = z.output<typeof ConfigSchema>;\n\nexport function defineConfig<T extends DrzlConfigInput>(cfg: T): T {\n return cfg;\n}\n\nexport async function loadConfig(customPath?: string): Promise<DrzlConfig | null> {\n const fsp = await import('node:fs/promises');\n\n const candidates = customPath\n ? [customPath]\n : [\n 'drzl.config.ts',\n 'drzl.config.mjs',\n 'drzl.config.js',\n 'drzl.config.cjs',\n 'drzl.config.json',\n ];\n\n for (const c of candidates) {\n const p = path.resolve(process.cwd(), c);\n try {\n await fsp.access(p);\n } catch {\n continue;\n }\n\n const ext = path.extname(p).toLowerCase();\n\n // JSON: read directly\n if (ext === '.json') {\n const raw = JSON.parse(await fsp.readFile(p, 'utf8'));\n return ConfigSchema.parse(raw);\n }\n\n // Everything else (TS/JS/MJS/CJS) -> Jiti with cache-busting\n const { createJiti } = await import('jiti');\n const stat = await fsp.stat(p);\n\n // Passing __filename is safe in CJS; fallback to cwd if not defined.\n const base =\n typeof __filename !== 'undefined' ? __filename : path.join(process.cwd(), 'index.js');\n\n const jiti = createJiti(base, {\n moduleCache: false, // re-evaluate each time\n fsCache: true, // keep transform cache\n cacheVersion: String(stat.mtimeMs), // bump on edit\n interopDefault: true,\n tryNative: false, // <— prevent native import of .ts\n // debug: true,\n }) as any;\n\n const mod = await jiti.import(p);\n const raw = mod?.default ?? mod;\n return ConfigSchema.parse(raw);\n }\n\n return null;\n}\n\n/** Absolute output dirs for all generators (to ignore in watcher). */\nexport function computeGeneratorOutputDirs(cfg: DrzlConfig, cwd = process.cwd()): string[] {\n const abs = (p: string) => path.resolve(cwd, p);\n const dirs = new Set<string>();\n dirs.add(abs(cfg.outDir)); // orpc\n for (const g of cfg.generators) {\n if (g.kind === 'service') dirs.add(abs(g.path ?? 'src/services'));\n if (g.kind === 'zod') dirs.add(abs(g.path ?? 'src/validators/zod'));\n if (g.kind === 'valibot') dirs.add(abs(g.path ?? 'src/validators/valibot'));\n if (g.kind === 'arktype') dirs.add(abs(g.path ?? 'src/validators/arktype'));\n }\n return [...dirs];\n}\n\n/** Resolve custom template directories (local path or installed package). */\nexport function resolveTemplateDirsSync(cfg: DrzlConfig, cwd = process.cwd()): string[] {\n const results: string[] = [];\n const req = createRequire(\n typeof __filename !== 'undefined' ? __filename : path.join(process.cwd(), 'index.js')\n );\n\n for (const g of cfg.generators) {\n const t = g.template;\n if (!t || t === 'standard' || t === 'minimal') continue;\n\n // Try package resolution relative to cwd\n let pkgDir: string | null = null;\n try {\n const pkg = req.resolve(`${t}/package.json`, { paths: [cwd] as any });\n pkgDir = path.dirname(pkg);\n } catch {}\n\n if (pkgDir) {\n results.push(pkgDir);\n continue;\n }\n\n // Local path-like template\n if (/[./\\\\]/.test(t)) {\n const abs = path.resolve(cwd, t);\n if (fs.existsSync(abs)) results.push(abs);\n }\n }\n\n return Array.from(new Set(results));\n}\n\n/** Build watch targets (exclude output dirs; watcher will ignore those). */\nexport function computeWatchTargets(cfg: DrzlConfig, cwd = process.cwd()): string[] {\n const abs = (p: string) => path.resolve(cwd, p);\n const schemaAbs = abs(cfg.schema);\n const targets = new Set<string>([\n path.join(path.dirname(schemaAbs), '**/*.{ts,tsx,js}'),\n abs('drzl.config.ts'),\n abs('drzl.config.js'),\n abs('drzl.config.mjs'),\n abs('drzl.config.cjs'),\n ]);\n for (const t of resolveTemplateDirsSync(cfg, cwd)) targets.add(t);\n return [...targets];\n}\n"],"mappings":"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","names":["raw"]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const NamingSchema: z.ZodObject<{
|
|
4
|
+
routerSuffix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
5
|
+
procedureCase: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
6
|
+
camel: "camel";
|
|
7
|
+
kebab: "kebab";
|
|
8
|
+
snake: "snake";
|
|
9
|
+
}>>>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
declare const GeneratorSchema: z.ZodObject<{
|
|
12
|
+
kind: z.ZodEnum<{
|
|
13
|
+
orpc: "orpc";
|
|
14
|
+
service: "service";
|
|
15
|
+
zod: "zod";
|
|
16
|
+
valibot: "valibot";
|
|
17
|
+
arktype: "arktype";
|
|
18
|
+
}>;
|
|
19
|
+
template: z.ZodOptional<z.ZodString>;
|
|
20
|
+
includeRelations: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
naming: z.ZodOptional<z.ZodObject<{
|
|
22
|
+
routerSuffix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
23
|
+
procedureCase: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
24
|
+
camel: "camel";
|
|
25
|
+
kebab: "kebab";
|
|
26
|
+
snake: "snake";
|
|
27
|
+
}>>>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
outputHeader: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
31
|
+
text: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>>;
|
|
33
|
+
format: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
35
|
+
engine: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
36
|
+
auto: "auto";
|
|
37
|
+
prettier: "prettier";
|
|
38
|
+
biome: "biome";
|
|
39
|
+
}>>>;
|
|
40
|
+
configPath: z.ZodOptional<z.ZodString>;
|
|
41
|
+
}, z.core.$strip>>;
|
|
42
|
+
path: z.ZodOptional<z.ZodString>;
|
|
43
|
+
dataAccess: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
44
|
+
stub: "stub";
|
|
45
|
+
drizzle: "drizzle";
|
|
46
|
+
}>>>;
|
|
47
|
+
dbImportPath: z.ZodOptional<z.ZodString>;
|
|
48
|
+
schemaImportPath: z.ZodOptional<z.ZodString>;
|
|
49
|
+
schemaSuffix: z.ZodOptional<z.ZodString>;
|
|
50
|
+
fileSuffix: z.ZodOptional<z.ZodString>;
|
|
51
|
+
validation: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
useShared: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
53
|
+
library: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
54
|
+
zod: "zod";
|
|
55
|
+
valibot: "valibot";
|
|
56
|
+
arktype: "arktype";
|
|
57
|
+
}>>>;
|
|
58
|
+
importPath: z.ZodOptional<z.ZodString>;
|
|
59
|
+
schemaSuffix: z.ZodOptional<z.ZodString>;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
templateOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
declare const AnalyzerSchema: z.ZodObject<{
|
|
64
|
+
includeRelations: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
validateConstraints: z.ZodDefault<z.ZodBoolean>;
|
|
66
|
+
includeHeuristicRelations: z.ZodDefault<z.ZodBoolean>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
declare const ConfigSchema: z.ZodObject<{
|
|
69
|
+
schema: z.ZodString;
|
|
70
|
+
outDir: z.ZodDefault<z.ZodString>;
|
|
71
|
+
analyzer: z.ZodDefault<z.ZodObject<{
|
|
72
|
+
includeRelations: z.ZodDefault<z.ZodBoolean>;
|
|
73
|
+
validateConstraints: z.ZodDefault<z.ZodBoolean>;
|
|
74
|
+
includeHeuristicRelations: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
generators: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
77
|
+
kind: z.ZodEnum<{
|
|
78
|
+
orpc: "orpc";
|
|
79
|
+
service: "service";
|
|
80
|
+
zod: "zod";
|
|
81
|
+
valibot: "valibot";
|
|
82
|
+
arktype: "arktype";
|
|
83
|
+
}>;
|
|
84
|
+
template: z.ZodOptional<z.ZodString>;
|
|
85
|
+
includeRelations: z.ZodOptional<z.ZodBoolean>;
|
|
86
|
+
naming: z.ZodOptional<z.ZodObject<{
|
|
87
|
+
routerSuffix: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
88
|
+
procedureCase: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
89
|
+
camel: "camel";
|
|
90
|
+
kebab: "kebab";
|
|
91
|
+
snake: "snake";
|
|
92
|
+
}>>>;
|
|
93
|
+
}, z.core.$strip>>;
|
|
94
|
+
outputHeader: z.ZodOptional<z.ZodObject<{
|
|
95
|
+
enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
96
|
+
text: z.ZodOptional<z.ZodString>;
|
|
97
|
+
}, z.core.$strip>>;
|
|
98
|
+
format: z.ZodOptional<z.ZodObject<{
|
|
99
|
+
enabled: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
100
|
+
engine: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
101
|
+
auto: "auto";
|
|
102
|
+
prettier: "prettier";
|
|
103
|
+
biome: "biome";
|
|
104
|
+
}>>>;
|
|
105
|
+
configPath: z.ZodOptional<z.ZodString>;
|
|
106
|
+
}, z.core.$strip>>;
|
|
107
|
+
path: z.ZodOptional<z.ZodString>;
|
|
108
|
+
dataAccess: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
109
|
+
stub: "stub";
|
|
110
|
+
drizzle: "drizzle";
|
|
111
|
+
}>>>;
|
|
112
|
+
dbImportPath: z.ZodOptional<z.ZodString>;
|
|
113
|
+
schemaImportPath: z.ZodOptional<z.ZodString>;
|
|
114
|
+
schemaSuffix: z.ZodOptional<z.ZodString>;
|
|
115
|
+
fileSuffix: z.ZodOptional<z.ZodString>;
|
|
116
|
+
validation: z.ZodOptional<z.ZodObject<{
|
|
117
|
+
useShared: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
118
|
+
library: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
|
|
119
|
+
zod: "zod";
|
|
120
|
+
valibot: "valibot";
|
|
121
|
+
arktype: "arktype";
|
|
122
|
+
}>>>;
|
|
123
|
+
importPath: z.ZodOptional<z.ZodString>;
|
|
124
|
+
schemaSuffix: z.ZodOptional<z.ZodString>;
|
|
125
|
+
}, z.core.$strip>>;
|
|
126
|
+
templateOptions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
127
|
+
}, z.core.$strip>>>;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
type DrzlConfigInput = z.input<typeof ConfigSchema>;
|
|
130
|
+
type DrzlConfig = z.output<typeof ConfigSchema>;
|
|
131
|
+
declare function defineConfig<T extends DrzlConfigInput>(cfg: T): T;
|
|
132
|
+
declare function loadConfig(customPath?: string): Promise<DrzlConfig | null>;
|
|
133
|
+
/** Absolute output dirs for all generators (to ignore in watcher). */
|
|
134
|
+
declare function computeGeneratorOutputDirs(cfg: DrzlConfig, cwd?: string): string[];
|
|
135
|
+
/** Resolve custom template directories (local path or installed package). */
|
|
136
|
+
declare function resolveTemplateDirsSync(cfg: DrzlConfig, cwd?: string): string[];
|
|
137
|
+
/** Build watch targets (exclude output dirs; watcher will ignore those). */
|
|
138
|
+
declare function computeWatchTargets(cfg: DrzlConfig, cwd?: string): string[];
|
|
139
|
+
|
|
140
|
+
export { AnalyzerSchema, ConfigSchema, type DrzlConfig, type DrzlConfigInput, GeneratorSchema, NamingSchema, computeGeneratorOutputDirs, computeWatchTargets, defineConfig, loadConfig, resolveTemplateDirsSync };
|