dorval 0.2.5 ā 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/dist/bin/dorval.cjs +1 -1
- package/dist/bin/dorval.cjs.map +1 -1
- package/dist/bin/dorval.js +1 -1
- package/dist/bin/dorval.js.map +1 -1
- package/package.json +1 -1
package/dist/bin/dorval.cjs
CHANGED
|
@@ -153,7 +153,7 @@ Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
// package.json
|
|
156
|
-
var version = "0.2.
|
|
156
|
+
var version = "0.2.5";
|
|
157
157
|
|
|
158
158
|
// src/bin/dorval.ts
|
|
159
159
|
import_commander.program.name("dorval").description("Generate Dart API clients from OpenAPI specifications").version(version);
|
package/dist/bin/dorval.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/dorval.ts","../../src/commands/generate.ts","../../src/config.ts","../../src/commands/watch.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * Dorval CLI entry point\n */\n\nimport { program } from 'commander';\nimport chalk from 'chalk';\nimport { generateCommand } from '../commands/generate.js';\nimport { watchCommand } from '../commands/watch.js';\nimport { version } from '../../package.json';\n\nprogram\n .name('dorval')\n .description('Generate Dart API clients from OpenAPI specifications')\n .version(version);\n\n// Generate command\nprogram\n .command('generate')\n .alias('gen')\n .description('Generate Dart code from OpenAPI spec')\n .option('-c, --config <path>', 'Path to config file')\n .option('-i, --input <path>', 'OpenAPI spec file or URL')\n .option('-o, --output <path>', 'Output directory')\n .option('--client <type>', 'Client type (dio, http, chopper)', 'dio')\n .option('--watch', 'Watch for changes')\n .action(generateCommand);\n\n// Watch command\nprogram\n .command('watch')\n .description('Watch OpenAPI spec for changes and regenerate')\n .option('-c, --config <path>', 'Path to config file')\n .action(watchCommand);\n\n// Default action\nprogram\n .action(() => {\n console.log(chalk.cyan(`\nšÆ Dorval v${version}\nGenerate type-safe Dart API clients from OpenAPI specifications.\n\nUsage:\n dorval generate [options]\n dorval watch [options]\n\nRun 'dorval --help' for more information.\n `));\n });\n\n// Parse command line arguments\nprogram.parse(process.argv);\n\n// Show help if no arguments\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}","/**\n * Generate command implementation\n */\n\nimport chalk from 'chalk';\nimport { generateDartCode, DartGeneratorOptions } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface GenerateOptions {\n config?: string;\n input?: string;\n output?: string;\n client?: 'dio' | 'http' | 'chopper';\n watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Loading configuration...').start();\n \n try {\n // Load configuration\n let config: DartGeneratorOptions;\n \n if (options.input && options.output) {\n // Use command line options\n config = {\n input: options.input,\n output: {\n target: options.output,\n client: options.client || 'dio',\n mode: 'split',\n override: {\n generator: {\n freezed: true,\n jsonSerializable: true,\n nullSafety: true\n }\n }\n }\n };\n } else if (options.config) {\n config = await loadConfig(options.config);\n } else {\n // Try to load from default locations\n try {\n config = await loadConfig();\n } catch {\n throw new Error('Either provide a config file or use -i and -o options');\n }\n }\n \n spinner.text = 'Parsing OpenAPI specification...';\n \n // Generate code\n const files = await generateDartCode(config);\n \n spinner.succeed(chalk.green(`ā
Generated ${files.length} files`));\n \n // List generated files\n console.log(chalk.cyan('\\nGenerated files:'));\n files.forEach(file => {\n console.log(chalk.gray(` - ${file.path}`));\n });\n \n // Run post-generation hooks\n if (config.hooks?.afterAllFilesWrite) {\n spinner.start('Running post-generation hooks...');\n // TODO: Implement hook execution\n spinner.succeed('Hooks completed');\n }\n \n console.log(chalk.green('\\n⨠Generation completed successfully!'));\n \n } catch (error) {\n spinner.fail(chalk.red('Generation failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","/**\n * Configuration loader\n */\n\nimport { cosmiconfigSync } from 'cosmiconfig';\nimport { DartGeneratorOptions } from '@dorval/core';\n\n// Create explorer lazily to avoid initialization issues\nfunction getExplorer() {\n return cosmiconfigSync('orval', {\n searchPlaces: [\n 'orval.config.ts',\n 'orval.config.js',\n 'orval.config.cjs',\n '.orvalrc',\n '.orvalrc.json',\n '.orvalrc.yaml',\n '.orvalrc.yml',\n 'package.json'\n ]\n });\n}\n\nexport async function loadConfig(configPath?: string): Promise<DartGeneratorOptions> {\n const explorer = getExplorer();\n const result = configPath\n ? explorer.load(configPath)\n : explorer.search();\n \n if (!result) {\n throw new Error('No configuration file found');\n }\n \n // Handle default export or direct config\n const config = result.config.default || result.config;\n \n // If config has multiple specs, use the first one\n if (typeof config === 'object' && !config.input) {\n const firstKey = Object.keys(config)[0];\n return config[firstKey];\n }\n \n return config;\n}","/**\n * Watch command implementation\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDartCode } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface WatchOptions {\n config?: string;\n}\n\nexport async function watchCommand(options: WatchOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Starting watch mode...').start();\n \n try {\n // Load configuration\n const config = await loadConfig(options.config);\n \n if (typeof config.input !== 'string') {\n throw new Error('Watch mode requires a file path input');\n }\n \n const inputPath = path.resolve(config.input);\n \n spinner.succeed(chalk.green(`Watching ${inputPath} for changes...`));\n \n // Initial generation\n await generateDartCode(config);\n console.log(chalk.cyan('ā
Initial generation completed'));\n \n // Watch for changes\n fs.watchFile(inputPath, async () => {\n console.log(chalk.yellow('\\nš File changed, regenerating...'));\n \n try {\n await generateDartCode(config);\n console.log(chalk.green('ā
Regeneration completed'));\n } catch (error) {\n console.error(chalk.red(`ā Regeneration failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n });\n \n // Keep process alive\n process.stdin.resume();\n \n // Handle exit\n process.on('SIGINT', () => {\n console.log(chalk.yellow('\\nš Stopping watch mode...'));\n fs.unwatchFile(inputPath);\n process.exit(0);\n });\n \n } catch (error) {\n spinner.fail(chalk.red('Watch mode failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","{\n \"name\": \"dorval\",\n \"version\": \"0.2.4\",\n \"description\": \"CLI tool for generating Dart/Flutter API clients from OpenAPI specifications\",\n \"keywords\": [\n \"cli\",\n \"dart\",\n \"flutter\",\n \"openapi\",\n \"swagger\",\n \"codegen\",\n \"code-generator\",\n \"api-client\",\n \"dio\",\n \"freezed\",\n \"rest-api\",\n \"orval\",\n \"dorval\",\n \"openapi3\",\n \"generator-cli\"\n ],\n \"homepage\": \"https://github.com/qwlong/dorval#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/qwlong/dorval.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/qwlong/dorval/issues\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"bin\": {\n \"dorval\": \"./dist/bin/dorval.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup ./src/index.ts ./src/bin/dorval.ts --clean --sourcemap --watch src --dts\",\n \"lint\": \"eslint 'src/**/*.ts'\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@dorval/core\": \"0.2.0\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^11.0.0\",\n \"cosmiconfig\": \"^8.2.0\",\n \"ora\": \"^8.1.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^20.13.0\",\n \"globals\": \"^16.3.0\",\n \"tsup\": \"^8.5.0\",\n \"vitest\": \"^0.6.3\"\n },\n \"engines\": {\n \"node\": \">=20.8.1\"\n }\n}\n"],"mappings":"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","names":["import_chalk","chalk","import_chalk","import_core","chalk","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/dorval.ts","../../src/commands/generate.ts","../../src/config.ts","../../src/commands/watch.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * Dorval CLI entry point\n */\n\nimport { program } from 'commander';\nimport chalk from 'chalk';\nimport { generateCommand } from '../commands/generate.js';\nimport { watchCommand } from '../commands/watch.js';\nimport { version } from '../../package.json';\n\nprogram\n .name('dorval')\n .description('Generate Dart API clients from OpenAPI specifications')\n .version(version);\n\n// Generate command\nprogram\n .command('generate')\n .alias('gen')\n .description('Generate Dart code from OpenAPI spec')\n .option('-c, --config <path>', 'Path to config file')\n .option('-i, --input <path>', 'OpenAPI spec file or URL')\n .option('-o, --output <path>', 'Output directory')\n .option('--client <type>', 'Client type (dio, http, chopper)', 'dio')\n .option('--watch', 'Watch for changes')\n .action(generateCommand);\n\n// Watch command\nprogram\n .command('watch')\n .description('Watch OpenAPI spec for changes and regenerate')\n .option('-c, --config <path>', 'Path to config file')\n .action(watchCommand);\n\n// Default action\nprogram\n .action(() => {\n console.log(chalk.cyan(`\nšÆ Dorval v${version}\nGenerate type-safe Dart API clients from OpenAPI specifications.\n\nUsage:\n dorval generate [options]\n dorval watch [options]\n\nRun 'dorval --help' for more information.\n `));\n });\n\n// Parse command line arguments\nprogram.parse(process.argv);\n\n// Show help if no arguments\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}","/**\n * Generate command implementation\n */\n\nimport chalk from 'chalk';\nimport { generateDartCode, DartGeneratorOptions } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface GenerateOptions {\n config?: string;\n input?: string;\n output?: string;\n client?: 'dio' | 'http' | 'chopper';\n watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Loading configuration...').start();\n \n try {\n // Load configuration\n let config: DartGeneratorOptions;\n \n if (options.input && options.output) {\n // Use command line options\n config = {\n input: options.input,\n output: {\n target: options.output,\n client: options.client || 'dio',\n mode: 'split',\n override: {\n generator: {\n freezed: true,\n jsonSerializable: true,\n nullSafety: true\n }\n }\n }\n };\n } else if (options.config) {\n config = await loadConfig(options.config);\n } else {\n // Try to load from default locations\n try {\n config = await loadConfig();\n } catch {\n throw new Error('Either provide a config file or use -i and -o options');\n }\n }\n \n spinner.text = 'Parsing OpenAPI specification...';\n \n // Generate code\n const files = await generateDartCode(config);\n \n spinner.succeed(chalk.green(`ā
Generated ${files.length} files`));\n \n // List generated files\n console.log(chalk.cyan('\\nGenerated files:'));\n files.forEach(file => {\n console.log(chalk.gray(` - ${file.path}`));\n });\n \n // Run post-generation hooks\n if (config.hooks?.afterAllFilesWrite) {\n spinner.start('Running post-generation hooks...');\n // TODO: Implement hook execution\n spinner.succeed('Hooks completed');\n }\n \n console.log(chalk.green('\\n⨠Generation completed successfully!'));\n \n } catch (error) {\n spinner.fail(chalk.red('Generation failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","/**\n * Configuration loader\n */\n\nimport { cosmiconfigSync } from 'cosmiconfig';\nimport { DartGeneratorOptions } from '@dorval/core';\n\n// Create explorer lazily to avoid initialization issues\nfunction getExplorer() {\n return cosmiconfigSync('orval', {\n searchPlaces: [\n 'orval.config.ts',\n 'orval.config.js',\n 'orval.config.cjs',\n '.orvalrc',\n '.orvalrc.json',\n '.orvalrc.yaml',\n '.orvalrc.yml',\n 'package.json'\n ]\n });\n}\n\nexport async function loadConfig(configPath?: string): Promise<DartGeneratorOptions> {\n const explorer = getExplorer();\n const result = configPath\n ? explorer.load(configPath)\n : explorer.search();\n \n if (!result) {\n throw new Error('No configuration file found');\n }\n \n // Handle default export or direct config\n const config = result.config.default || result.config;\n \n // If config has multiple specs, use the first one\n if (typeof config === 'object' && !config.input) {\n const firstKey = Object.keys(config)[0];\n return config[firstKey];\n }\n \n return config;\n}","/**\n * Watch command implementation\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDartCode } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface WatchOptions {\n config?: string;\n}\n\nexport async function watchCommand(options: WatchOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Starting watch mode...').start();\n \n try {\n // Load configuration\n const config = await loadConfig(options.config);\n \n if (typeof config.input !== 'string') {\n throw new Error('Watch mode requires a file path input');\n }\n \n const inputPath = path.resolve(config.input);\n \n spinner.succeed(chalk.green(`Watching ${inputPath} for changes...`));\n \n // Initial generation\n await generateDartCode(config);\n console.log(chalk.cyan('ā
Initial generation completed'));\n \n // Watch for changes\n fs.watchFile(inputPath, async () => {\n console.log(chalk.yellow('\\nš File changed, regenerating...'));\n \n try {\n await generateDartCode(config);\n console.log(chalk.green('ā
Regeneration completed'));\n } catch (error) {\n console.error(chalk.red(`ā Regeneration failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n });\n \n // Keep process alive\n process.stdin.resume();\n \n // Handle exit\n process.on('SIGINT', () => {\n console.log(chalk.yellow('\\nš Stopping watch mode...'));\n fs.unwatchFile(inputPath);\n process.exit(0);\n });\n \n } catch (error) {\n spinner.fail(chalk.red('Watch mode failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","{\n \"name\": \"dorval\",\n \"version\": \"0.2.5\",\n \"description\": \"CLI tool for generating Dart/Flutter API clients from OpenAPI specifications\",\n \"keywords\": [\n \"cli\",\n \"dart\",\n \"flutter\",\n \"openapi\",\n \"swagger\",\n \"codegen\",\n \"code-generator\",\n \"api-client\",\n \"dio\",\n \"freezed\",\n \"rest-api\",\n \"orval\",\n \"dorval\",\n \"openapi3\",\n \"generator-cli\"\n ],\n \"homepage\": \"https://github.com/qwlong/dorval#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/qwlong/dorval.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/qwlong/dorval/issues\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"bin\": {\n \"dorval\": \"./dist/bin/dorval.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup ./src/index.ts ./src/bin/dorval.ts --clean --sourcemap --watch src --dts\",\n \"lint\": \"eslint 'src/**/*.ts'\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@dorval/core\": \"0.2.0\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^11.0.0\",\n \"cosmiconfig\": \"^8.2.0\",\n \"ora\": \"^8.1.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^20.13.0\",\n \"globals\": \"^16.3.0\",\n \"tsup\": \"^8.5.0\",\n \"vitest\": \"^0.6.3\"\n },\n \"engines\": {\n \"node\": \">=20.8.1\"\n }\n}\n"],"mappings":"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","names":["import_chalk","chalk","import_chalk","import_core","chalk","chalk"]}
|
package/dist/bin/dorval.js
CHANGED
|
@@ -130,7 +130,7 @@ Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
// package.json
|
|
133
|
-
var version = "0.2.
|
|
133
|
+
var version = "0.2.5";
|
|
134
134
|
|
|
135
135
|
// src/bin/dorval.ts
|
|
136
136
|
program.name("dorval").description("Generate Dart API clients from OpenAPI specifications").version(version);
|
package/dist/bin/dorval.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/dorval.ts","../../src/commands/generate.ts","../../src/config.ts","../../src/commands/watch.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * Dorval CLI entry point\n */\n\nimport { program } from 'commander';\nimport chalk from 'chalk';\nimport { generateCommand } from '../commands/generate.js';\nimport { watchCommand } from '../commands/watch.js';\nimport { version } from '../../package.json';\n\nprogram\n .name('dorval')\n .description('Generate Dart API clients from OpenAPI specifications')\n .version(version);\n\n// Generate command\nprogram\n .command('generate')\n .alias('gen')\n .description('Generate Dart code from OpenAPI spec')\n .option('-c, --config <path>', 'Path to config file')\n .option('-i, --input <path>', 'OpenAPI spec file or URL')\n .option('-o, --output <path>', 'Output directory')\n .option('--client <type>', 'Client type (dio, http, chopper)', 'dio')\n .option('--watch', 'Watch for changes')\n .action(generateCommand);\n\n// Watch command\nprogram\n .command('watch')\n .description('Watch OpenAPI spec for changes and regenerate')\n .option('-c, --config <path>', 'Path to config file')\n .action(watchCommand);\n\n// Default action\nprogram\n .action(() => {\n console.log(chalk.cyan(`\nšÆ Dorval v${version}\nGenerate type-safe Dart API clients from OpenAPI specifications.\n\nUsage:\n dorval generate [options]\n dorval watch [options]\n\nRun 'dorval --help' for more information.\n `));\n });\n\n// Parse command line arguments\nprogram.parse(process.argv);\n\n// Show help if no arguments\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}","/**\n * Generate command implementation\n */\n\nimport chalk from 'chalk';\nimport { generateDartCode, DartGeneratorOptions } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface GenerateOptions {\n config?: string;\n input?: string;\n output?: string;\n client?: 'dio' | 'http' | 'chopper';\n watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Loading configuration...').start();\n \n try {\n // Load configuration\n let config: DartGeneratorOptions;\n \n if (options.input && options.output) {\n // Use command line options\n config = {\n input: options.input,\n output: {\n target: options.output,\n client: options.client || 'dio',\n mode: 'split',\n override: {\n generator: {\n freezed: true,\n jsonSerializable: true,\n nullSafety: true\n }\n }\n }\n };\n } else if (options.config) {\n config = await loadConfig(options.config);\n } else {\n // Try to load from default locations\n try {\n config = await loadConfig();\n } catch {\n throw new Error('Either provide a config file or use -i and -o options');\n }\n }\n \n spinner.text = 'Parsing OpenAPI specification...';\n \n // Generate code\n const files = await generateDartCode(config);\n \n spinner.succeed(chalk.green(`ā
Generated ${files.length} files`));\n \n // List generated files\n console.log(chalk.cyan('\\nGenerated files:'));\n files.forEach(file => {\n console.log(chalk.gray(` - ${file.path}`));\n });\n \n // Run post-generation hooks\n if (config.hooks?.afterAllFilesWrite) {\n spinner.start('Running post-generation hooks...');\n // TODO: Implement hook execution\n spinner.succeed('Hooks completed');\n }\n \n console.log(chalk.green('\\n⨠Generation completed successfully!'));\n \n } catch (error) {\n spinner.fail(chalk.red('Generation failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","/**\n * Configuration loader\n */\n\nimport { cosmiconfigSync } from 'cosmiconfig';\nimport { DartGeneratorOptions } from '@dorval/core';\n\n// Create explorer lazily to avoid initialization issues\nfunction getExplorer() {\n return cosmiconfigSync('orval', {\n searchPlaces: [\n 'orval.config.ts',\n 'orval.config.js',\n 'orval.config.cjs',\n '.orvalrc',\n '.orvalrc.json',\n '.orvalrc.yaml',\n '.orvalrc.yml',\n 'package.json'\n ]\n });\n}\n\nexport async function loadConfig(configPath?: string): Promise<DartGeneratorOptions> {\n const explorer = getExplorer();\n const result = configPath\n ? explorer.load(configPath)\n : explorer.search();\n \n if (!result) {\n throw new Error('No configuration file found');\n }\n \n // Handle default export or direct config\n const config = result.config.default || result.config;\n \n // If config has multiple specs, use the first one\n if (typeof config === 'object' && !config.input) {\n const firstKey = Object.keys(config)[0];\n return config[firstKey];\n }\n \n return config;\n}","/**\n * Watch command implementation\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDartCode } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface WatchOptions {\n config?: string;\n}\n\nexport async function watchCommand(options: WatchOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Starting watch mode...').start();\n \n try {\n // Load configuration\n const config = await loadConfig(options.config);\n \n if (typeof config.input !== 'string') {\n throw new Error('Watch mode requires a file path input');\n }\n \n const inputPath = path.resolve(config.input);\n \n spinner.succeed(chalk.green(`Watching ${inputPath} for changes...`));\n \n // Initial generation\n await generateDartCode(config);\n console.log(chalk.cyan('ā
Initial generation completed'));\n \n // Watch for changes\n fs.watchFile(inputPath, async () => {\n console.log(chalk.yellow('\\nš File changed, regenerating...'));\n \n try {\n await generateDartCode(config);\n console.log(chalk.green('ā
Regeneration completed'));\n } catch (error) {\n console.error(chalk.red(`ā Regeneration failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n });\n \n // Keep process alive\n process.stdin.resume();\n \n // Handle exit\n process.on('SIGINT', () => {\n console.log(chalk.yellow('\\nš Stopping watch mode...'));\n fs.unwatchFile(inputPath);\n process.exit(0);\n });\n \n } catch (error) {\n spinner.fail(chalk.red('Watch mode failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","{\n \"name\": \"dorval\",\n \"version\": \"0.2.4\",\n \"description\": \"CLI tool for generating Dart/Flutter API clients from OpenAPI specifications\",\n \"keywords\": [\n \"cli\",\n \"dart\",\n \"flutter\",\n \"openapi\",\n \"swagger\",\n \"codegen\",\n \"code-generator\",\n \"api-client\",\n \"dio\",\n \"freezed\",\n \"rest-api\",\n \"orval\",\n \"dorval\",\n \"openapi3\",\n \"generator-cli\"\n ],\n \"homepage\": \"https://github.com/qwlong/dorval#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/qwlong/dorval.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/qwlong/dorval/issues\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"bin\": {\n \"dorval\": \"./dist/bin/dorval.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup ./src/index.ts ./src/bin/dorval.ts --clean --sourcemap --watch src --dts\",\n \"lint\": \"eslint 'src/**/*.ts'\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@dorval/core\": \"0.2.0\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^11.0.0\",\n \"cosmiconfig\": \"^8.2.0\",\n \"ora\": \"^8.1.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^20.13.0\",\n \"globals\": \"^16.3.0\",\n \"tsup\": \"^8.5.0\",\n \"vitest\": \"^0.6.3\"\n },\n \"engines\": {\n \"node\": \">=20.8.1\"\n }\n}\n"],"mappings":"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","names":["chalk","chalk","generateDartCode","chalk","generateDartCode","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../src/bin/dorval.ts","../../src/commands/generate.ts","../../src/config.ts","../../src/commands/watch.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * Dorval CLI entry point\n */\n\nimport { program } from 'commander';\nimport chalk from 'chalk';\nimport { generateCommand } from '../commands/generate.js';\nimport { watchCommand } from '../commands/watch.js';\nimport { version } from '../../package.json';\n\nprogram\n .name('dorval')\n .description('Generate Dart API clients from OpenAPI specifications')\n .version(version);\n\n// Generate command\nprogram\n .command('generate')\n .alias('gen')\n .description('Generate Dart code from OpenAPI spec')\n .option('-c, --config <path>', 'Path to config file')\n .option('-i, --input <path>', 'OpenAPI spec file or URL')\n .option('-o, --output <path>', 'Output directory')\n .option('--client <type>', 'Client type (dio, http, chopper)', 'dio')\n .option('--watch', 'Watch for changes')\n .action(generateCommand);\n\n// Watch command\nprogram\n .command('watch')\n .description('Watch OpenAPI spec for changes and regenerate')\n .option('-c, --config <path>', 'Path to config file')\n .action(watchCommand);\n\n// Default action\nprogram\n .action(() => {\n console.log(chalk.cyan(`\nšÆ Dorval v${version}\nGenerate type-safe Dart API clients from OpenAPI specifications.\n\nUsage:\n dorval generate [options]\n dorval watch [options]\n\nRun 'dorval --help' for more information.\n `));\n });\n\n// Parse command line arguments\nprogram.parse(process.argv);\n\n// Show help if no arguments\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}","/**\n * Generate command implementation\n */\n\nimport chalk from 'chalk';\nimport { generateDartCode, DartGeneratorOptions } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface GenerateOptions {\n config?: string;\n input?: string;\n output?: string;\n client?: 'dio' | 'http' | 'chopper';\n watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Loading configuration...').start();\n \n try {\n // Load configuration\n let config: DartGeneratorOptions;\n \n if (options.input && options.output) {\n // Use command line options\n config = {\n input: options.input,\n output: {\n target: options.output,\n client: options.client || 'dio',\n mode: 'split',\n override: {\n generator: {\n freezed: true,\n jsonSerializable: true,\n nullSafety: true\n }\n }\n }\n };\n } else if (options.config) {\n config = await loadConfig(options.config);\n } else {\n // Try to load from default locations\n try {\n config = await loadConfig();\n } catch {\n throw new Error('Either provide a config file or use -i and -o options');\n }\n }\n \n spinner.text = 'Parsing OpenAPI specification...';\n \n // Generate code\n const files = await generateDartCode(config);\n \n spinner.succeed(chalk.green(`ā
Generated ${files.length} files`));\n \n // List generated files\n console.log(chalk.cyan('\\nGenerated files:'));\n files.forEach(file => {\n console.log(chalk.gray(` - ${file.path}`));\n });\n \n // Run post-generation hooks\n if (config.hooks?.afterAllFilesWrite) {\n spinner.start('Running post-generation hooks...');\n // TODO: Implement hook execution\n spinner.succeed('Hooks completed');\n }\n \n console.log(chalk.green('\\n⨠Generation completed successfully!'));\n \n } catch (error) {\n spinner.fail(chalk.red('Generation failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","/**\n * Configuration loader\n */\n\nimport { cosmiconfigSync } from 'cosmiconfig';\nimport { DartGeneratorOptions } from '@dorval/core';\n\n// Create explorer lazily to avoid initialization issues\nfunction getExplorer() {\n return cosmiconfigSync('orval', {\n searchPlaces: [\n 'orval.config.ts',\n 'orval.config.js',\n 'orval.config.cjs',\n '.orvalrc',\n '.orvalrc.json',\n '.orvalrc.yaml',\n '.orvalrc.yml',\n 'package.json'\n ]\n });\n}\n\nexport async function loadConfig(configPath?: string): Promise<DartGeneratorOptions> {\n const explorer = getExplorer();\n const result = configPath\n ? explorer.load(configPath)\n : explorer.search();\n \n if (!result) {\n throw new Error('No configuration file found');\n }\n \n // Handle default export or direct config\n const config = result.config.default || result.config;\n \n // If config has multiple specs, use the first one\n if (typeof config === 'object' && !config.input) {\n const firstKey = Object.keys(config)[0];\n return config[firstKey];\n }\n \n return config;\n}","/**\n * Watch command implementation\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDartCode } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface WatchOptions {\n config?: string;\n}\n\nexport async function watchCommand(options: WatchOptions) {\n // Dynamic import for ora to support both CJS and ESM\n const ora = await import('ora').then(m => m.default || m);\n const spinner = ora('Starting watch mode...').start();\n \n try {\n // Load configuration\n const config = await loadConfig(options.config);\n \n if (typeof config.input !== 'string') {\n throw new Error('Watch mode requires a file path input');\n }\n \n const inputPath = path.resolve(config.input);\n \n spinner.succeed(chalk.green(`Watching ${inputPath} for changes...`));\n \n // Initial generation\n await generateDartCode(config);\n console.log(chalk.cyan('ā
Initial generation completed'));\n \n // Watch for changes\n fs.watchFile(inputPath, async () => {\n console.log(chalk.yellow('\\nš File changed, regenerating...'));\n \n try {\n await generateDartCode(config);\n console.log(chalk.green('ā
Regeneration completed'));\n } catch (error) {\n console.error(chalk.red(`ā Regeneration failed: ${error instanceof Error ? error.message : String(error)}`));\n }\n });\n \n // Keep process alive\n process.stdin.resume();\n \n // Handle exit\n process.on('SIGINT', () => {\n console.log(chalk.yellow('\\nš Stopping watch mode...'));\n fs.unwatchFile(inputPath);\n process.exit(0);\n });\n \n } catch (error) {\n spinner.fail(chalk.red('Watch mode failed'));\n console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n process.exit(1);\n }\n}","{\n \"name\": \"dorval\",\n \"version\": \"0.2.5\",\n \"description\": \"CLI tool for generating Dart/Flutter API clients from OpenAPI specifications\",\n \"keywords\": [\n \"cli\",\n \"dart\",\n \"flutter\",\n \"openapi\",\n \"swagger\",\n \"codegen\",\n \"code-generator\",\n \"api-client\",\n \"dio\",\n \"freezed\",\n \"rest-api\",\n \"orval\",\n \"dorval\",\n \"openapi3\",\n \"generator-cli\"\n ],\n \"homepage\": \"https://github.com/qwlong/dorval#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/qwlong/dorval.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/qwlong/dorval/issues\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n }\n },\n \"bin\": {\n \"dorval\": \"./dist/bin/dorval.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup ./src/index.ts ./src/bin/dorval.ts --clean --sourcemap --watch src --dts\",\n \"lint\": \"eslint 'src/**/*.ts'\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@dorval/core\": \"0.2.0\",\n \"chalk\": \"^4.1.2\",\n \"commander\": \"^11.0.0\",\n \"cosmiconfig\": \"^8.2.0\",\n \"ora\": \"^8.1.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"^20.13.0\",\n \"globals\": \"^16.3.0\",\n \"tsup\": \"^8.5.0\",\n \"vitest\": \"^0.6.3\"\n },\n \"engines\": {\n \"node\": \">=20.8.1\"\n }\n}\n"],"mappings":";;;AAMA,SAAS,eAAe;AACxB,OAAOA,YAAW;;;ACHlB,OAAO,WAAW;AAClB,SAAS,wBAA8C;;;ACDvD,SAAS,uBAAuB;AAIhC,SAAS,cAAc;AACrB,SAAO,gBAAgB,SAAS;AAAA,IAC9B,cAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,WAAW,YAAoD;AACnF,QAAM,WAAW,YAAY;AAC7B,QAAM,SAAS,aACX,SAAS,KAAK,UAAU,IACxB,SAAS,OAAO;AAEpB,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AAGA,QAAM,SAAS,OAAO,OAAO,WAAW,OAAO;AAG/C,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,OAAO;AAC/C,UAAM,WAAW,OAAO,KAAK,MAAM,EAAE,CAAC;AACtC,WAAO,OAAO,QAAQ;AAAA,EACxB;AAEA,SAAO;AACT;;;AD3BA,eAAsB,gBAAgB,SAA0B;AAE9D,QAAM,MAAM,MAAM,OAAO,KAAK,EAAE,KAAK,OAAK,EAAE,WAAW,CAAC;AACxD,QAAM,UAAU,IAAI,0BAA0B,EAAE,MAAM;AAEtD,MAAI;AAEF,QAAI;AAEJ,QAAI,QAAQ,SAAS,QAAQ,QAAQ;AAEnC,eAAS;AAAA,QACP,OAAO,QAAQ;AAAA,QACf,QAAQ;AAAA,UACN,QAAQ,QAAQ;AAAA,UAChB,QAAQ,QAAQ,UAAU;AAAA,UAC1B,MAAM;AAAA,UACN,UAAU;AAAA,YACR,WAAW;AAAA,cACT,SAAS;AAAA,cACT,kBAAkB;AAAA,cAClB,YAAY;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,QAAQ,QAAQ;AACzB,eAAS,MAAM,WAAW,QAAQ,MAAM;AAAA,IAC1C,OAAO;AAEL,UAAI;AACF,iBAAS,MAAM,WAAW;AAAA,MAC5B,QAAQ;AACN,cAAM,IAAI,MAAM,uDAAuD;AAAA,MACzE;AAAA,IACF;AAEA,YAAQ,OAAO;AAGf,UAAM,QAAQ,MAAM,iBAAiB,MAAM;AAE3C,YAAQ,QAAQ,MAAM,MAAM,oBAAe,MAAM,MAAM,QAAQ,CAAC;AAGhE,YAAQ,IAAI,MAAM,KAAK,oBAAoB,CAAC;AAC5C,UAAM,QAAQ,UAAQ;AACpB,cAAQ,IAAI,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE,CAAC;AAAA,IAC5C,CAAC;AAGD,QAAI,OAAO,OAAO,oBAAoB;AACpC,cAAQ,MAAM,kCAAkC;AAEhD,cAAQ,QAAQ,iBAAiB;AAAA,IACnC;AAEA,YAAQ,IAAI,MAAM,MAAM,6CAAwC,CAAC;AAAA,EAEnE,SAAS,OAAO;AACd,YAAQ,KAAK,MAAM,IAAI,mBAAmB,CAAC;AAC3C,YAAQ,MAAM,MAAM,IAAI;AAAA,SAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CAAC;AAC7F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AE5EA,OAAOC,YAAW;AAClB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,oBAAAC,yBAAwB;AAOjC,eAAsB,aAAa,SAAuB;AAExD,QAAM,MAAM,MAAM,OAAO,KAAK,EAAE,KAAK,OAAK,EAAE,WAAW,CAAC;AACxD,QAAM,UAAU,IAAI,wBAAwB,EAAE,MAAM;AAEpD,MAAI;AAEF,UAAM,SAAS,MAAM,WAAW,QAAQ,MAAM;AAE9C,QAAI,OAAO,OAAO,UAAU,UAAU;AACpC,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,YAAiB,aAAQ,OAAO,KAAK;AAE3C,YAAQ,QAAQC,OAAM,MAAM,YAAY,SAAS,iBAAiB,CAAC;AAGnE,UAAMC,kBAAiB,MAAM;AAC7B,YAAQ,IAAID,OAAM,KAAK,qCAAgC,CAAC;AAGxD,IAAG,aAAU,WAAW,YAAY;AAClC,cAAQ,IAAIA,OAAM,OAAO,2CAAoC,CAAC;AAE9D,UAAI;AACF,cAAMC,kBAAiB,MAAM;AAC7B,gBAAQ,IAAID,OAAM,MAAM,+BAA0B,CAAC;AAAA,MACrD,SAAS,OAAO;AACd,gBAAQ,MAAMA,OAAM,IAAI,+BAA0B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CAAC;AAAA,MAC7G;AAAA,IACF,CAAC;AAGD,YAAQ,MAAM,OAAO;AAGrB,YAAQ,GAAG,UAAU,MAAM;AACzB,cAAQ,IAAIA,OAAM,OAAO,oCAA6B,CAAC;AACvD,MAAG,eAAY,SAAS;AACxB,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA,EAEH,SAAS,OAAO;AACd,YAAQ,KAAKA,OAAM,IAAI,mBAAmB,CAAC;AAC3C,YAAQ,MAAMA,OAAM,IAAI;AAAA,SAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CAAC;AAC7F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AC5DE,cAAW;;;AJUb,QACG,KAAK,QAAQ,EACb,YAAY,uDAAuD,EACnE,QAAQ,OAAO;AAGlB,QACG,QAAQ,UAAU,EAClB,MAAM,KAAK,EACX,YAAY,sCAAsC,EAClD,OAAO,uBAAuB,qBAAqB,EACnD,OAAO,sBAAsB,0BAA0B,EACvD,OAAO,uBAAuB,kBAAkB,EAChD,OAAO,mBAAmB,oCAAoC,KAAK,EACnE,OAAO,WAAW,mBAAmB,EACrC,OAAO,eAAe;AAGzB,QACG,QAAQ,OAAO,EACf,YAAY,+CAA+C,EAC3D,OAAO,uBAAuB,qBAAqB,EACnD,OAAO,YAAY;AAGtB,QACG,OAAO,MAAM;AACZ,UAAQ,IAAIE,OAAM,KAAK;AAAA,oBACd,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAQf,CAAC;AACJ,CAAC;AAGH,QAAQ,MAAM,QAAQ,IAAI;AAG1B,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,QAAQ;AACjC,UAAQ,WAAW;AACrB;","names":["chalk","chalk","generateDartCode","chalk","generateDartCode","chalk"]}
|