@kubb/cli 4.22.0 → 4.22.2

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.
Files changed (47) hide show
  1. package/dist/{generate-Bjj-OR20.js → generate-CBsaUUvV.js} +49 -674
  2. package/dist/generate-CBsaUUvV.js.map +1 -0
  3. package/dist/{generate-BJyvkuLI.cjs → generate-CLDVb4hB.cjs} +53 -678
  4. package/dist/generate-CLDVb4hB.cjs.map +1 -0
  5. package/dist/getCosmiConfig-Co29x0Wv.cjs +458 -0
  6. package/dist/getCosmiConfig-Co29x0Wv.cjs.map +1 -0
  7. package/dist/getCosmiConfig-y2n_oW_y.js +438 -0
  8. package/dist/getCosmiConfig-y2n_oW_y.js.map +1 -0
  9. package/dist/index.cjs +9 -7
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.js +9 -7
  12. package/dist/index.js.map +1 -1
  13. package/dist/{init-CxLDdq2k.cjs → init-Bs1GxKWV.cjs} +3 -3
  14. package/dist/{init-CxLDdq2k.cjs.map → init-Bs1GxKWV.cjs.map} +1 -1
  15. package/dist/{init-D37jPiGV.js → init-D3zCeqU-.js} +3 -3
  16. package/dist/{init-D37jPiGV.js.map → init-D3zCeqU-.js.map} +1 -1
  17. package/dist/{mcp-By2JUPa8.js → mcp-BdwwUv36.js} +1 -1
  18. package/dist/{mcp-By2JUPa8.js.map → mcp-BdwwUv36.js.map} +1 -1
  19. package/dist/{mcp-l-_Z-WU6.cjs → mcp-Hy_PYnFp.cjs} +1 -1
  20. package/dist/{mcp-l-_Z-WU6.cjs.map → mcp-Hy_PYnFp.cjs.map} +1 -1
  21. package/dist/package-BFidNEkS.js +6 -0
  22. package/dist/package-BFidNEkS.js.map +1 -0
  23. package/dist/{package-Cnl_fuIC.cjs → package-CiB5tqr0.cjs} +2 -2
  24. package/dist/package-CiB5tqr0.cjs.map +1 -0
  25. package/dist/start-BeoZd1fL.cjs +128 -0
  26. package/dist/start-BeoZd1fL.cjs.map +1 -0
  27. package/dist/start-Ohz4V8k2.js +125 -0
  28. package/dist/start-Ohz4V8k2.js.map +1 -0
  29. package/dist/{validate-DkHCd-Tl.cjs → validate-Cvb5aOEb.cjs} +1 -1
  30. package/dist/{validate-DkHCd-Tl.cjs.map → validate-Cvb5aOEb.cjs.map} +1 -1
  31. package/dist/{validate-0Qu8SxVA.js → validate-YI4YkVTl.js} +1 -1
  32. package/dist/{validate-0Qu8SxVA.js.map → validate-YI4YkVTl.js.map} +1 -1
  33. package/package.json +4 -4
  34. package/src/commands/generate.ts +0 -38
  35. package/src/commands/init.ts +3 -1
  36. package/src/commands/start.ts +149 -0
  37. package/src/index.ts +2 -1
  38. package/src/loggers/clackLogger.ts +32 -12
  39. package/src/loggers/githubActionsLogger.ts +21 -8
  40. package/src/loggers/plainLogger.ts +20 -8
  41. package/dist/generate-BJyvkuLI.cjs.map +0 -1
  42. package/dist/generate-Bjj-OR20.js.map +0 -1
  43. package/dist/package-Cnl_fuIC.cjs.map +0 -1
  44. package/dist/package-Qh9BQXK6.js +0 -6
  45. package/dist/package-Qh9BQXK6.js.map +0 -1
  46. package/src/loggers/streamLogger.ts +0 -93
  47. package/src/utils/streamServer.ts +0 -163
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCosmiConfig-Co29x0Wv.cjs","names":["pc","process","pc","LogLevel","path","error"],"sources":["../src/utils/detectFormatter.ts","../src/utils/detectLinter.ts","../src/utils/executeHooks.ts","../src/utils/formatters.ts","../src/runners/generate.ts","../src/utils/getPlugins.ts","../src/utils/getConfigs.ts","../src/utils/getCosmiConfig.ts"],"sourcesContent":["import { execaCommand } from 'execa'\n\ntype Formatter = 'biome' | 'prettier' | 'oxfmt'\n\n/**\n * Check if a formatter command is available in the system.\n *\n * @param formatter - The formatter to check ('biome', 'prettier', or 'oxfmt')\n * @returns Promise that resolves to true if the formatter is available, false otherwise\n *\n * @remarks\n * This function checks availability by running `<formatter> --version` command.\n * All supported formatters (biome, prettier, oxfmt) implement the --version flag.\n */\nasync function isFormatterAvailable(formatter: Formatter): Promise<boolean> {\n try {\n // Try to get the version of the formatter to check if it's installed\n await execaCommand(`${formatter} --version`, { stdio: 'ignore' })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Detect which formatter is available in the system.\n *\n * @returns Promise that resolves to the first available formatter or undefined if none are found\n *\n * @remarks\n * Checks in order of preference: biome, oxfmt, prettier.\n * Uses the `--version` flag to detect if each formatter command is available.\n * This is a reliable method as all supported formatters implement this flag.\n *\n * @example\n * ```typescript\n * const formatter = await detectFormatter()\n * if (formatter) {\n * console.log(`Using ${formatter} for formatting`)\n * } else {\n * console.log('No formatter found')\n * }\n * ```\n */\nexport async function detectFormatter(): Promise<Formatter | undefined> {\n const formatters: Formatter[] = ['biome', 'oxfmt', 'prettier']\n\n for (const formatter of formatters) {\n if (await isFormatterAvailable(formatter)) {\n return formatter\n }\n }\n\n return undefined\n}\n","import { execaCommand } from 'execa'\n\ntype Linter = 'biome' | 'oxlint' | 'eslint'\n\n/**\n * Check if a linter command is available in the system.\n *\n * @param linter - The linter to check ('biome', 'oxlint', or 'eslint')\n * @returns Promise that resolves to true if the linter is available, false otherwise\n *\n * @remarks\n * This function checks availability by running `<linter> --version` command.\n * All supported linters (biome, oxlint, eslint) implement the --version flag.\n */\nasync function isLinterAvailable(linter: Linter): Promise<boolean> {\n try {\n // Try to get the version of the linter to check if it's installed\n await execaCommand(`${linter} --version`, { stdio: 'ignore' })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Detect which linter is available in the system.\n *\n * @returns Promise that resolves to the first available linter or undefined if none are found\n *\n * @remarks\n * Checks in order of preference: biome, oxlint, eslint.\n * Uses the `--version` flag to detect if each linter command is available.\n * This is a reliable method as all supported linters implement this flag.\n *\n * @example\n * ```typescript\n * const linter = await detectLinter()\n * if (linter) {\n * console.log(`Using ${linter} for linting`)\n * } else {\n * console.log('No linter found')\n * }\n * ```\n */\nexport async function detectLinter(): Promise<Linter | undefined> {\n const linters: Linter[] = ['biome', 'oxlint', 'eslint']\n\n for (const linter of linters) {\n if (await isLinterAvailable(linter)) {\n return linter\n }\n }\n\n return undefined\n}\n","import { createHash } from 'node:crypto'\nimport type { Config, KubbEvents } from '@kubb/core'\nimport type { AsyncEventEmitter } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\ntype ExecutingHooksProps = {\n hooks: NonNullable<Config['hooks']>\n events: AsyncEventEmitter<KubbEvents>\n}\n\nexport async function executeHooks({ hooks, events }: ExecutingHooksProps): Promise<void> {\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)\n\n for (const command of commands) {\n const [cmd, ...args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n continue\n }\n\n const hookId = createHash('sha256').update(command).digest('hex')\n await events.emit('hook:start', { id: hookId, command: cmd, args })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit('success', `${pc.dim(command)} successfully executed`)\n })\n }\n}\n","export const formatters = {\n prettier: {\n command: 'prettier',\n args: (outputPath: string) => ['--ignore-unknown', '--write', outputPath],\n errorMessage: 'Prettier not found',\n },\n biome: {\n command: 'biome',\n args: (outputPath: string) => ['format', '--write', outputPath],\n errorMessage: 'Biome not found',\n },\n oxfmt: {\n command: 'oxfmt',\n args: (outputPath: string) => [outputPath],\n errorMessage: 'Oxfmt not found',\n },\n} as const\n","import { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { type Config, type KubbEvents, LogLevel, safeBuild, setup } from '@kubb/core'\nimport type { AsyncEventEmitter } from '@kubb/core/utils'\nimport pc from 'picocolors'\nimport { detectFormatter } from '../utils/detectFormatter.ts'\nimport { detectLinter } from '../utils/detectLinter.ts'\nimport { executeHooks } from '../utils/executeHooks.ts'\nimport { formatters } from '../utils/formatters.ts'\n\ntype GenerateProps = {\n input?: string\n config: Config\n events: AsyncEventEmitter<KubbEvents>\n logLevel: number\n}\n\nexport async function generate({ input, config: userConfig, events, logLevel }: GenerateProps): Promise<void> {\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n const hrStart = process.hrtime()\n\n const config: Config = {\n ...userConfig,\n root: userConfig.root || process.cwd(),\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n format: 'prettier',\n ...userConfig.output,\n },\n }\n\n await events.emit('generation:start', config)\n\n await events.emit('info', config.name ? `Setup generation ${pc.bold(config.name)}` : 'Setup generation', inputPath)\n\n const { sources, fabric, pluginManager } = await setup({\n config,\n events,\n })\n\n await events.emit('info', config.name ? `Build generation ${pc.bold(config.name)}` : 'Build generation', inputPath)\n\n const { files, failedPlugins, pluginTimings, error } = await safeBuild(\n {\n config,\n events,\n },\n { pluginManager, fabric, events, sources },\n )\n\n await events.emit('info', 'Load summary')\n\n // Handle build failures (either from failed plugins or general errors)\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Error[] = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n events.emit('error', err)\n })\n\n await events.emit('generation:end', config, files, sources)\n\n await events.emit('generation:summary', config, {\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : undefined,\n })\n\n process.exit(1)\n }\n\n await events.emit('success', 'Generation successfully', inputPath)\n await events.emit('generation:end', config, files, sources)\n\n // formatting\n if (config.output.format) {\n await events.emit('format:start')\n\n let formatter = config.output.format\n if (formatter === 'auto') {\n const detectedFormatter = await detectFormatter()\n if (!detectedFormatter) {\n await events.emit('warn', 'No formatter found (biome, prettier, or oxfmt). Skipping formatting.')\n } else {\n formatter = detectedFormatter\n await events.emit('info', `Auto-detected formatter: ${pc.dim(formatter)}`)\n }\n }\n\n if (formatter && formatter !== 'auto' && formatter in formatters) {\n const formatterConfig = formatters[formatter as keyof typeof formatters]\n const outputPath = path.resolve(config.root, config.output.path)\n\n try {\n const hookId = createHash('sha256').update([config.name, formatter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: formatterConfig.command,\n args: formatterConfig.args(outputPath),\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) throw error\n\n await events.emit(\n 'success',\n [`Formatting with ${pc.dim(formatter)}`, logLevel >= LogLevel.info ? `on ${pc.dim(outputPath)}` : undefined, 'successfully']\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error(formatterConfig.errorMessage)\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n await events.emit('format:end')\n }\n\n // linting\n if (config.output.lint) {\n await events.emit('lint:start')\n\n // Detect linter if set to 'auto'\n let linter = config.output.lint\n if (linter === 'auto') {\n const detectedLinter = await detectLinter()\n if (!detectedLinter) {\n await events.emit('warn', 'No linter found (biome, oxlint, or eslint). Skipping linting.')\n } else {\n linter = detectedLinter\n await events.emit('info', `Auto-detected linter: ${pc.dim(linter)}`)\n }\n }\n\n // Only proceed with linting if we have a valid linter\n if (linter && linter !== 'auto') {\n await events.emit(\n 'info',\n [`Linting with ${pc.dim(linter as string)}`, logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined]\n .filter(Boolean)\n .join(' '),\n )\n\n if (linter === 'eslint') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'eslint',\n args: [path.resolve(config.root, config.output.path), '--fix'],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Eslint not found')\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n if (linter === 'biome') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'biome',\n args: ['lint', '--fix', path.resolve(config.root, config.output.path)],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Biome not found')\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n if (linter === 'oxlint') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'oxlint',\n args: ['--fix', path.resolve(config.root, config.output.path)],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Oxlint not found')\n error.cause = caughtError\n\n await events.emit('error', error)\n }\n }\n }\n\n await events.emit('lint:end')\n }\n\n if (config.hooks) {\n await events.emit('hooks:start')\n await executeHooks({ hooks: config.hooks, events })\n\n await events.emit('hooks:end')\n }\n\n await events.emit('generation:summary', config, {\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import type { CLIOptions, Config, UserConfig } from '@kubb/core'\nimport { isPromise } from '@kubb/core/utils'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\nimport { getPlugins } from './getPlugins.ts'\n\n/**\n * Converting UserConfig to Config Array without a change in the object beside the JSON convert.\n */\nexport async function getConfigs(result: CosmiconfigResult, args: Args): Promise<Array<Config>> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args as CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (!Array.isArray(JSONConfig)) {\n JSONConfig = [JSONConfig]\n }\n\n const results: Array<Config> = []\n\n for (const item of JSONConfig) {\n const plugins = item.plugins ? await getPlugins(item.plugins) : undefined\n\n results.push({\n ...item,\n plugins,\n } as Config)\n }\n\n return results\n}\n","import type { defineConfig, UserConfig } from '@kubb/core'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { createJiti } from 'jiti'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const jiti = createJiti(configFile, {\n jsx: {\n runtime: 'automatic',\n importSource: '@kubb/react-fabric',\n },\n sourceMaps: true,\n interopDefault: true,\n })\n\n const mod = await jiti.import(configFile, { default: true })\n\n return mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n let result: CosmiconfigResult\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n try {\n result = config ? ((await explorer.load(config)) as CosmiconfigResult) : ((await explorer.search()) as CosmiconfigResult)\n } catch (error) {\n throw new Error('Config failed loading', { cause: error })\n }\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n"],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ import { t as __name } from "./chunk-jHaXqnEa.js";
2
+ import path from "node:path";
3
+ import process from "node:process";
4
+ import { LogLevel, safeBuild, setup } from "@kubb/core";
5
+ import { isPromise } from "@kubb/core/utils";
6
+ import pc from "picocolors";
7
+ import { execaCommand } from "execa";
8
+ import { createHash } from "node:crypto";
9
+ import { parseArgsStringToArgv } from "string-argv";
10
+ import { cosmiconfig } from "cosmiconfig";
11
+ import { createJiti } from "jiti";
12
+
13
+ //#region src/utils/detectFormatter.ts
14
+ /**
15
+ * Check if a formatter command is available in the system.
16
+ *
17
+ * @param formatter - The formatter to check ('biome', 'prettier', or 'oxfmt')
18
+ * @returns Promise that resolves to true if the formatter is available, false otherwise
19
+ *
20
+ * @remarks
21
+ * This function checks availability by running `<formatter> --version` command.
22
+ * All supported formatters (biome, prettier, oxfmt) implement the --version flag.
23
+ */
24
+ async function isFormatterAvailable(formatter) {
25
+ try {
26
+ await execaCommand(`${formatter} --version`, { stdio: "ignore" });
27
+ return true;
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Detect which formatter is available in the system.
34
+ *
35
+ * @returns Promise that resolves to the first available formatter or undefined if none are found
36
+ *
37
+ * @remarks
38
+ * Checks in order of preference: biome, oxfmt, prettier.
39
+ * Uses the `--version` flag to detect if each formatter command is available.
40
+ * This is a reliable method as all supported formatters implement this flag.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const formatter = await detectFormatter()
45
+ * if (formatter) {
46
+ * console.log(`Using ${formatter} for formatting`)
47
+ * } else {
48
+ * console.log('No formatter found')
49
+ * }
50
+ * ```
51
+ */
52
+ async function detectFormatter() {
53
+ for (const formatter of [
54
+ "biome",
55
+ "oxfmt",
56
+ "prettier"
57
+ ]) if (await isFormatterAvailable(formatter)) return formatter;
58
+ }
59
+
60
+ //#endregion
61
+ //#region src/utils/detectLinter.ts
62
+ /**
63
+ * Check if a linter command is available in the system.
64
+ *
65
+ * @param linter - The linter to check ('biome', 'oxlint', or 'eslint')
66
+ * @returns Promise that resolves to true if the linter is available, false otherwise
67
+ *
68
+ * @remarks
69
+ * This function checks availability by running `<linter> --version` command.
70
+ * All supported linters (biome, oxlint, eslint) implement the --version flag.
71
+ */
72
+ async function isLinterAvailable(linter) {
73
+ try {
74
+ await execaCommand(`${linter} --version`, { stdio: "ignore" });
75
+ return true;
76
+ } catch {
77
+ return false;
78
+ }
79
+ }
80
+ /**
81
+ * Detect which linter is available in the system.
82
+ *
83
+ * @returns Promise that resolves to the first available linter or undefined if none are found
84
+ *
85
+ * @remarks
86
+ * Checks in order of preference: biome, oxlint, eslint.
87
+ * Uses the `--version` flag to detect if each linter command is available.
88
+ * This is a reliable method as all supported linters implement this flag.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const linter = await detectLinter()
93
+ * if (linter) {
94
+ * console.log(`Using ${linter} for linting`)
95
+ * } else {
96
+ * console.log('No linter found')
97
+ * }
98
+ * ```
99
+ */
100
+ async function detectLinter() {
101
+ for (const linter of [
102
+ "biome",
103
+ "oxlint",
104
+ "eslint"
105
+ ]) if (await isLinterAvailable(linter)) return linter;
106
+ }
107
+
108
+ //#endregion
109
+ //#region src/utils/executeHooks.ts
110
+ async function executeHooks({ hooks, events }) {
111
+ const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean);
112
+ for (const command of commands) {
113
+ const [cmd, ...args] = [...parseArgsStringToArgv(command)];
114
+ if (!cmd) continue;
115
+ const hookId = createHash("sha256").update(command).digest("hex");
116
+ await events.emit("hook:start", {
117
+ id: hookId,
118
+ command: cmd,
119
+ args
120
+ });
121
+ await events.onOnce("hook:end", async ({ success, error }) => {
122
+ if (!success) throw error;
123
+ await events.emit("success", `${pc.dim(command)} successfully executed`);
124
+ });
125
+ }
126
+ }
127
+
128
+ //#endregion
129
+ //#region src/utils/formatters.ts
130
+ const formatters = {
131
+ prettier: {
132
+ command: "prettier",
133
+ args: (outputPath) => [
134
+ "--ignore-unknown",
135
+ "--write",
136
+ outputPath
137
+ ],
138
+ errorMessage: "Prettier not found"
139
+ },
140
+ biome: {
141
+ command: "biome",
142
+ args: (outputPath) => [
143
+ "format",
144
+ "--write",
145
+ outputPath
146
+ ],
147
+ errorMessage: "Biome not found"
148
+ },
149
+ oxfmt: {
150
+ command: "oxfmt",
151
+ args: (outputPath) => [outputPath],
152
+ errorMessage: "Oxfmt not found"
153
+ }
154
+ };
155
+
156
+ //#endregion
157
+ //#region src/runners/generate.ts
158
+ async function generate({ input, config: userConfig, events, logLevel }) {
159
+ const inputPath = input ?? ("path" in userConfig.input ? userConfig.input.path : void 0);
160
+ const hrStart = process.hrtime();
161
+ const config = {
162
+ ...userConfig,
163
+ root: userConfig.root || process.cwd(),
164
+ input: inputPath ? {
165
+ ...userConfig.input,
166
+ path: inputPath
167
+ } : userConfig.input,
168
+ output: {
169
+ write: true,
170
+ barrelType: "named",
171
+ extension: { ".ts": ".ts" },
172
+ format: "prettier",
173
+ ...userConfig.output
174
+ }
175
+ };
176
+ await events.emit("generation:start", config);
177
+ await events.emit("info", config.name ? `Setup generation ${pc.bold(config.name)}` : "Setup generation", inputPath);
178
+ const { sources, fabric, pluginManager } = await setup({
179
+ config,
180
+ events
181
+ });
182
+ await events.emit("info", config.name ? `Build generation ${pc.bold(config.name)}` : "Build generation", inputPath);
183
+ const { files, failedPlugins, pluginTimings, error } = await safeBuild({
184
+ config,
185
+ events
186
+ }, {
187
+ pluginManager,
188
+ fabric,
189
+ events,
190
+ sources
191
+ });
192
+ await events.emit("info", "Load summary");
193
+ if (failedPlugins.size > 0 || error) {
194
+ [error, ...Array.from(failedPlugins).filter((it) => it.error).map((it) => it.error)].filter(Boolean).forEach((err) => {
195
+ events.emit("error", err);
196
+ });
197
+ await events.emit("generation:end", config, files, sources);
198
+ await events.emit("generation:summary", config, {
199
+ failedPlugins,
200
+ filesCreated: files.length,
201
+ status: failedPlugins.size > 0 || error ? "failed" : "success",
202
+ hrStart,
203
+ pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : void 0
204
+ });
205
+ process.exit(1);
206
+ }
207
+ await events.emit("success", "Generation successfully", inputPath);
208
+ await events.emit("generation:end", config, files, sources);
209
+ if (config.output.format) {
210
+ await events.emit("format:start");
211
+ let formatter = config.output.format;
212
+ if (formatter === "auto") {
213
+ const detectedFormatter = await detectFormatter();
214
+ if (!detectedFormatter) await events.emit("warn", "No formatter found (biome, prettier, or oxfmt). Skipping formatting.");
215
+ else {
216
+ formatter = detectedFormatter;
217
+ await events.emit("info", `Auto-detected formatter: ${pc.dim(formatter)}`);
218
+ }
219
+ }
220
+ if (formatter && formatter !== "auto" && formatter in formatters) {
221
+ const formatterConfig = formatters[formatter];
222
+ const outputPath = path.resolve(config.root, config.output.path);
223
+ try {
224
+ const hookId = createHash("sha256").update([config.name, formatter].filter(Boolean).join("-")).digest("hex");
225
+ await events.emit("hook:start", {
226
+ id: hookId,
227
+ command: formatterConfig.command,
228
+ args: formatterConfig.args(outputPath)
229
+ });
230
+ await events.onOnce("hook:end", async ({ success, error: error$1 }) => {
231
+ if (!success) throw error$1;
232
+ await events.emit("success", [
233
+ `Formatting with ${pc.dim(formatter)}`,
234
+ logLevel >= LogLevel.info ? `on ${pc.dim(outputPath)}` : void 0,
235
+ "successfully"
236
+ ].filter(Boolean).join(" "));
237
+ });
238
+ } catch (caughtError) {
239
+ const error$1 = new Error(formatterConfig.errorMessage);
240
+ error$1.cause = caughtError;
241
+ await events.emit("error", error$1);
242
+ }
243
+ }
244
+ await events.emit("format:end");
245
+ }
246
+ if (config.output.lint) {
247
+ await events.emit("lint:start");
248
+ let linter = config.output.lint;
249
+ if (linter === "auto") {
250
+ const detectedLinter = await detectLinter();
251
+ if (!detectedLinter) await events.emit("warn", "No linter found (biome, oxlint, or eslint). Skipping linting.");
252
+ else {
253
+ linter = detectedLinter;
254
+ await events.emit("info", `Auto-detected linter: ${pc.dim(linter)}`);
255
+ }
256
+ }
257
+ if (linter && linter !== "auto") {
258
+ await events.emit("info", [`Linting with ${pc.dim(linter)}`, logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : void 0].filter(Boolean).join(" "));
259
+ if (linter === "eslint") try {
260
+ const hookId = createHash("sha256").update([config.name, linter].filter(Boolean).join("-")).digest("hex");
261
+ await events.emit("hook:start", {
262
+ id: hookId,
263
+ command: "eslint",
264
+ args: [path.resolve(config.root, config.output.path), "--fix"]
265
+ });
266
+ await events.onOnce("hook:end", async ({ success, error: error$1 }) => {
267
+ if (!success) throw error$1;
268
+ await events.emit("success", [
269
+ `Linted with ${pc.dim(linter)}`,
270
+ logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : void 0,
271
+ "successfully"
272
+ ].filter(Boolean).join(" "));
273
+ });
274
+ } catch (caughtError) {
275
+ const error$1 = /* @__PURE__ */ new Error("Eslint not found");
276
+ error$1.cause = caughtError;
277
+ await events.emit("error", error$1);
278
+ }
279
+ if (linter === "biome") try {
280
+ const hookId = createHash("sha256").update([config.name, linter].filter(Boolean).join("-")).digest("hex");
281
+ await events.emit("hook:start", {
282
+ id: hookId,
283
+ command: "biome",
284
+ args: [
285
+ "lint",
286
+ "--fix",
287
+ path.resolve(config.root, config.output.path)
288
+ ]
289
+ });
290
+ await events.onOnce("hook:end", async ({ success, error: error$1 }) => {
291
+ if (!success) throw error$1;
292
+ await events.emit("success", [
293
+ `Linted with ${pc.dim(linter)}`,
294
+ logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : void 0,
295
+ "successfully"
296
+ ].filter(Boolean).join(" "));
297
+ });
298
+ } catch (caughtError) {
299
+ const error$1 = /* @__PURE__ */ new Error("Biome not found");
300
+ error$1.cause = caughtError;
301
+ await events.emit("error", error$1);
302
+ }
303
+ if (linter === "oxlint") try {
304
+ const hookId = createHash("sha256").update([config.name, linter].filter(Boolean).join("-")).digest("hex");
305
+ await events.emit("hook:start", {
306
+ id: hookId,
307
+ command: "oxlint",
308
+ args: ["--fix", path.resolve(config.root, config.output.path)]
309
+ });
310
+ await events.onOnce("hook:end", async ({ success, error: error$1 }) => {
311
+ if (!success) throw error$1;
312
+ await events.emit("success", [
313
+ `Linted with ${pc.dim(linter)}`,
314
+ logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : void 0,
315
+ "successfully"
316
+ ].filter(Boolean).join(" "));
317
+ });
318
+ } catch (caughtError) {
319
+ const error$1 = /* @__PURE__ */ new Error("Oxlint not found");
320
+ error$1.cause = caughtError;
321
+ await events.emit("error", error$1);
322
+ }
323
+ }
324
+ await events.emit("lint:end");
325
+ }
326
+ if (config.hooks) {
327
+ await events.emit("hooks:start");
328
+ await executeHooks({
329
+ hooks: config.hooks,
330
+ events
331
+ });
332
+ await events.emit("hooks:end");
333
+ }
334
+ await events.emit("generation:summary", config, {
335
+ failedPlugins,
336
+ filesCreated: files.length,
337
+ status: failedPlugins.size > 0 || error ? "failed" : "success",
338
+ hrStart,
339
+ pluginTimings
340
+ });
341
+ }
342
+
343
+ //#endregion
344
+ //#region src/utils/getPlugins.ts
345
+ function isJSONPlugins(plugins) {
346
+ return !!plugins?.some((plugin) => {
347
+ return Array.isArray(plugin) && typeof plugin?.at(0) === "string";
348
+ });
349
+ }
350
+ function isObjectPlugins(plugins) {
351
+ return plugins instanceof Object && !Array.isArray(plugins);
352
+ }
353
+ function getPlugins(plugins) {
354
+ if (isObjectPlugins(plugins)) throw new Error("Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json");
355
+ if (isJSONPlugins(plugins)) throw new Error("JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json");
356
+ return Promise.resolve(plugins);
357
+ }
358
+
359
+ //#endregion
360
+ //#region src/utils/getConfigs.ts
361
+ /**
362
+ * Converting UserConfig to Config Array without a change in the object beside the JSON convert.
363
+ */
364
+ async function getConfigs(result, args) {
365
+ const config = result?.config;
366
+ let kubbUserConfig = Promise.resolve(config);
367
+ if (typeof config === "function") {
368
+ const possiblePromise = config(args);
369
+ if (isPromise(possiblePromise)) kubbUserConfig = possiblePromise;
370
+ kubbUserConfig = Promise.resolve(possiblePromise);
371
+ }
372
+ let JSONConfig = await kubbUserConfig;
373
+ if (!Array.isArray(JSONConfig)) JSONConfig = [JSONConfig];
374
+ const results = [];
375
+ for (const item of JSONConfig) {
376
+ const plugins = item.plugins ? await getPlugins(item.plugins) : void 0;
377
+ results.push({
378
+ ...item,
379
+ plugins
380
+ });
381
+ }
382
+ return results;
383
+ }
384
+
385
+ //#endregion
386
+ //#region src/utils/getCosmiConfig.ts
387
+ const tsLoader = async (configFile) => {
388
+ return await createJiti(configFile, {
389
+ jsx: {
390
+ runtime: "automatic",
391
+ importSource: "@kubb/react-fabric"
392
+ },
393
+ sourceMaps: true,
394
+ interopDefault: true
395
+ }).import(configFile, { default: true });
396
+ };
397
+ async function getCosmiConfig(moduleName, config) {
398
+ let result;
399
+ const searchPlaces = [
400
+ "package.json",
401
+ `.${moduleName}rc`,
402
+ `.${moduleName}rc.json`,
403
+ `.${moduleName}rc.yaml`,
404
+ `.${moduleName}rc.yml`,
405
+ `.${moduleName}rc.ts`,
406
+ `.${moduleName}rc.js`,
407
+ `.${moduleName}rc.mjs`,
408
+ `.${moduleName}rc.cjs`,
409
+ `${moduleName}.config.ts`,
410
+ `${moduleName}.config.js`,
411
+ `${moduleName}.config.mjs`,
412
+ `${moduleName}.config.cjs`
413
+ ];
414
+ const explorer = cosmiconfig(moduleName, {
415
+ cache: false,
416
+ searchPlaces: [
417
+ ...searchPlaces.map((searchPlace) => {
418
+ return `.config/${searchPlace}`;
419
+ }),
420
+ ...searchPlaces.map((searchPlace) => {
421
+ return `configs/${searchPlace}`;
422
+ }),
423
+ ...searchPlaces
424
+ ],
425
+ loaders: { ".ts": tsLoader }
426
+ });
427
+ try {
428
+ result = config ? await explorer.load(config) : await explorer.search();
429
+ } catch (error) {
430
+ throw new Error("Config failed loading", { cause: error });
431
+ }
432
+ if (result?.isEmpty || !result || !result.config) throw new Error("Config not defined, create a kubb.config.js or pass through your config with the option --config");
433
+ return result;
434
+ }
435
+
436
+ //#endregion
437
+ export { getConfigs as n, generate as r, getCosmiConfig as t };
438
+ //# sourceMappingURL=getCosmiConfig-y2n_oW_y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCosmiConfig-y2n_oW_y.js","names":["error"],"sources":["../src/utils/detectFormatter.ts","../src/utils/detectLinter.ts","../src/utils/executeHooks.ts","../src/utils/formatters.ts","../src/runners/generate.ts","../src/utils/getPlugins.ts","../src/utils/getConfigs.ts","../src/utils/getCosmiConfig.ts"],"sourcesContent":["import { execaCommand } from 'execa'\n\ntype Formatter = 'biome' | 'prettier' | 'oxfmt'\n\n/**\n * Check if a formatter command is available in the system.\n *\n * @param formatter - The formatter to check ('biome', 'prettier', or 'oxfmt')\n * @returns Promise that resolves to true if the formatter is available, false otherwise\n *\n * @remarks\n * This function checks availability by running `<formatter> --version` command.\n * All supported formatters (biome, prettier, oxfmt) implement the --version flag.\n */\nasync function isFormatterAvailable(formatter: Formatter): Promise<boolean> {\n try {\n // Try to get the version of the formatter to check if it's installed\n await execaCommand(`${formatter} --version`, { stdio: 'ignore' })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Detect which formatter is available in the system.\n *\n * @returns Promise that resolves to the first available formatter or undefined if none are found\n *\n * @remarks\n * Checks in order of preference: biome, oxfmt, prettier.\n * Uses the `--version` flag to detect if each formatter command is available.\n * This is a reliable method as all supported formatters implement this flag.\n *\n * @example\n * ```typescript\n * const formatter = await detectFormatter()\n * if (formatter) {\n * console.log(`Using ${formatter} for formatting`)\n * } else {\n * console.log('No formatter found')\n * }\n * ```\n */\nexport async function detectFormatter(): Promise<Formatter | undefined> {\n const formatters: Formatter[] = ['biome', 'oxfmt', 'prettier']\n\n for (const formatter of formatters) {\n if (await isFormatterAvailable(formatter)) {\n return formatter\n }\n }\n\n return undefined\n}\n","import { execaCommand } from 'execa'\n\ntype Linter = 'biome' | 'oxlint' | 'eslint'\n\n/**\n * Check if a linter command is available in the system.\n *\n * @param linter - The linter to check ('biome', 'oxlint', or 'eslint')\n * @returns Promise that resolves to true if the linter is available, false otherwise\n *\n * @remarks\n * This function checks availability by running `<linter> --version` command.\n * All supported linters (biome, oxlint, eslint) implement the --version flag.\n */\nasync function isLinterAvailable(linter: Linter): Promise<boolean> {\n try {\n // Try to get the version of the linter to check if it's installed\n await execaCommand(`${linter} --version`, { stdio: 'ignore' })\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Detect which linter is available in the system.\n *\n * @returns Promise that resolves to the first available linter or undefined if none are found\n *\n * @remarks\n * Checks in order of preference: biome, oxlint, eslint.\n * Uses the `--version` flag to detect if each linter command is available.\n * This is a reliable method as all supported linters implement this flag.\n *\n * @example\n * ```typescript\n * const linter = await detectLinter()\n * if (linter) {\n * console.log(`Using ${linter} for linting`)\n * } else {\n * console.log('No linter found')\n * }\n * ```\n */\nexport async function detectLinter(): Promise<Linter | undefined> {\n const linters: Linter[] = ['biome', 'oxlint', 'eslint']\n\n for (const linter of linters) {\n if (await isLinterAvailable(linter)) {\n return linter\n }\n }\n\n return undefined\n}\n","import { createHash } from 'node:crypto'\nimport type { Config, KubbEvents } from '@kubb/core'\nimport type { AsyncEventEmitter } from '@kubb/core/utils'\n\nimport pc from 'picocolors'\nimport { parseArgsStringToArgv } from 'string-argv'\n\ntype ExecutingHooksProps = {\n hooks: NonNullable<Config['hooks']>\n events: AsyncEventEmitter<KubbEvents>\n}\n\nexport async function executeHooks({ hooks, events }: ExecutingHooksProps): Promise<void> {\n const commands = Array.isArray(hooks.done) ? hooks.done : [hooks.done].filter(Boolean)\n\n for (const command of commands) {\n const [cmd, ...args] = [...parseArgsStringToArgv(command)]\n\n if (!cmd) {\n continue\n }\n\n const hookId = createHash('sha256').update(command).digest('hex')\n await events.emit('hook:start', { id: hookId, command: cmd, args })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit('success', `${pc.dim(command)} successfully executed`)\n })\n }\n}\n","export const formatters = {\n prettier: {\n command: 'prettier',\n args: (outputPath: string) => ['--ignore-unknown', '--write', outputPath],\n errorMessage: 'Prettier not found',\n },\n biome: {\n command: 'biome',\n args: (outputPath: string) => ['format', '--write', outputPath],\n errorMessage: 'Biome not found',\n },\n oxfmt: {\n command: 'oxfmt',\n args: (outputPath: string) => [outputPath],\n errorMessage: 'Oxfmt not found',\n },\n} as const\n","import { createHash } from 'node:crypto'\nimport path from 'node:path'\nimport process from 'node:process'\nimport { type Config, type KubbEvents, LogLevel, safeBuild, setup } from '@kubb/core'\nimport type { AsyncEventEmitter } from '@kubb/core/utils'\nimport pc from 'picocolors'\nimport { detectFormatter } from '../utils/detectFormatter.ts'\nimport { detectLinter } from '../utils/detectLinter.ts'\nimport { executeHooks } from '../utils/executeHooks.ts'\nimport { formatters } from '../utils/formatters.ts'\n\ntype GenerateProps = {\n input?: string\n config: Config\n events: AsyncEventEmitter<KubbEvents>\n logLevel: number\n}\n\nexport async function generate({ input, config: userConfig, events, logLevel }: GenerateProps): Promise<void> {\n const inputPath = input ?? ('path' in userConfig.input ? userConfig.input.path : undefined)\n const hrStart = process.hrtime()\n\n const config: Config = {\n ...userConfig,\n root: userConfig.root || process.cwd(),\n input: inputPath\n ? {\n ...userConfig.input,\n path: inputPath,\n }\n : userConfig.input,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n format: 'prettier',\n ...userConfig.output,\n },\n }\n\n await events.emit('generation:start', config)\n\n await events.emit('info', config.name ? `Setup generation ${pc.bold(config.name)}` : 'Setup generation', inputPath)\n\n const { sources, fabric, pluginManager } = await setup({\n config,\n events,\n })\n\n await events.emit('info', config.name ? `Build generation ${pc.bold(config.name)}` : 'Build generation', inputPath)\n\n const { files, failedPlugins, pluginTimings, error } = await safeBuild(\n {\n config,\n events,\n },\n { pluginManager, fabric, events, sources },\n )\n\n await events.emit('info', 'Load summary')\n\n // Handle build failures (either from failed plugins or general errors)\n\n const hasFailures = failedPlugins.size > 0 || error\n if (hasFailures) {\n // Collect all errors from failed plugins and general error\n const allErrors: Error[] = [\n error,\n ...Array.from(failedPlugins)\n .filter((it) => it.error)\n .map((it) => it.error),\n ].filter(Boolean)\n\n allErrors.forEach((err) => {\n events.emit('error', err)\n })\n\n await events.emit('generation:end', config, files, sources)\n\n await events.emit('generation:summary', config, {\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings: logLevel >= LogLevel.verbose ? pluginTimings : undefined,\n })\n\n process.exit(1)\n }\n\n await events.emit('success', 'Generation successfully', inputPath)\n await events.emit('generation:end', config, files, sources)\n\n // formatting\n if (config.output.format) {\n await events.emit('format:start')\n\n let formatter = config.output.format\n if (formatter === 'auto') {\n const detectedFormatter = await detectFormatter()\n if (!detectedFormatter) {\n await events.emit('warn', 'No formatter found (biome, prettier, or oxfmt). Skipping formatting.')\n } else {\n formatter = detectedFormatter\n await events.emit('info', `Auto-detected formatter: ${pc.dim(formatter)}`)\n }\n }\n\n if (formatter && formatter !== 'auto' && formatter in formatters) {\n const formatterConfig = formatters[formatter as keyof typeof formatters]\n const outputPath = path.resolve(config.root, config.output.path)\n\n try {\n const hookId = createHash('sha256').update([config.name, formatter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: formatterConfig.command,\n args: formatterConfig.args(outputPath),\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) throw error\n\n await events.emit(\n 'success',\n [`Formatting with ${pc.dim(formatter)}`, logLevel >= LogLevel.info ? `on ${pc.dim(outputPath)}` : undefined, 'successfully']\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error(formatterConfig.errorMessage)\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n await events.emit('format:end')\n }\n\n // linting\n if (config.output.lint) {\n await events.emit('lint:start')\n\n // Detect linter if set to 'auto'\n let linter = config.output.lint\n if (linter === 'auto') {\n const detectedLinter = await detectLinter()\n if (!detectedLinter) {\n await events.emit('warn', 'No linter found (biome, oxlint, or eslint). Skipping linting.')\n } else {\n linter = detectedLinter\n await events.emit('info', `Auto-detected linter: ${pc.dim(linter)}`)\n }\n }\n\n // Only proceed with linting if we have a valid linter\n if (linter && linter !== 'auto') {\n await events.emit(\n 'info',\n [`Linting with ${pc.dim(linter as string)}`, logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined]\n .filter(Boolean)\n .join(' '),\n )\n\n if (linter === 'eslint') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'eslint',\n args: [path.resolve(config.root, config.output.path), '--fix'],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Eslint not found')\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n if (linter === 'biome') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'biome',\n args: ['lint', '--fix', path.resolve(config.root, config.output.path)],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Biome not found')\n error.cause = caughtError\n await events.emit('error', error)\n }\n }\n\n if (linter === 'oxlint') {\n try {\n const hookId = createHash('sha256').update([config.name, linter].filter(Boolean).join('-')).digest('hex')\n await events.emit('hook:start', {\n id: hookId,\n command: 'oxlint',\n args: ['--fix', path.resolve(config.root, config.output.path)],\n })\n\n await events.onOnce('hook:end', async ({ success, error }) => {\n if (!success) {\n throw error\n }\n\n await events.emit(\n 'success',\n [\n `Linted with ${pc.dim(linter as string)}`,\n logLevel >= LogLevel.info ? `on ${pc.dim(path.resolve(config.root, config.output.path))}` : undefined,\n 'successfully',\n ]\n .filter(Boolean)\n .join(' '),\n )\n })\n } catch (caughtError) {\n const error = new Error('Oxlint not found')\n error.cause = caughtError\n\n await events.emit('error', error)\n }\n }\n }\n\n await events.emit('lint:end')\n }\n\n if (config.hooks) {\n await events.emit('hooks:start')\n await executeHooks({ hooks: config.hooks, events })\n\n await events.emit('hooks:end')\n }\n\n await events.emit('generation:summary', config, {\n failedPlugins,\n filesCreated: files.length,\n status: failedPlugins.size > 0 || error ? 'failed' : 'success',\n hrStart,\n pluginTimings,\n })\n}\n","import type { UserConfig } from '@kubb/core'\n\nfunction isJSONPlugins(plugins: UserConfig['plugins']) {\n return !!(plugins as any)?.some((plugin: any) => {\n return Array.isArray(plugin) && typeof plugin?.at(0) === 'string'\n })\n}\n\nfunction isObjectPlugins(plugins: UserConfig['plugins']): plugins is any {\n return plugins instanceof Object && !Array.isArray(plugins)\n}\n\nexport function getPlugins(plugins: UserConfig['plugins']): Promise<UserConfig['plugins']> {\n if (isObjectPlugins(plugins)) {\n throw new Error('Object plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n if (isJSONPlugins(plugins)) {\n throw new Error('JSON plugins are not supported anymore, best to use http://kubb.dev/getting-started/configure#json')\n }\n\n return Promise.resolve(plugins)\n}\n","import type { CLIOptions, Config, UserConfig } from '@kubb/core'\nimport { isPromise } from '@kubb/core/utils'\nimport type { Args } from '../commands/generate.ts'\nimport type { CosmiconfigResult } from './getCosmiConfig.ts'\nimport { getPlugins } from './getPlugins.ts'\n\n/**\n * Converting UserConfig to Config Array without a change in the object beside the JSON convert.\n */\nexport async function getConfigs(result: CosmiconfigResult, args: Args): Promise<Array<Config>> {\n const config = result?.config\n let kubbUserConfig = Promise.resolve(config) as Promise<UserConfig | Array<UserConfig>>\n\n // for ts or js files\n if (typeof config === 'function') {\n const possiblePromise = config(args as CLIOptions)\n if (isPromise(possiblePromise)) {\n kubbUserConfig = possiblePromise\n }\n kubbUserConfig = Promise.resolve(possiblePromise)\n }\n\n let JSONConfig = await kubbUserConfig\n\n if (!Array.isArray(JSONConfig)) {\n JSONConfig = [JSONConfig]\n }\n\n const results: Array<Config> = []\n\n for (const item of JSONConfig) {\n const plugins = item.plugins ? await getPlugins(item.plugins) : undefined\n\n results.push({\n ...item,\n plugins,\n } as Config)\n }\n\n return results\n}\n","import type { defineConfig, UserConfig } from '@kubb/core'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { createJiti } from 'jiti'\n\nexport type CosmiconfigResult = {\n filepath: string\n isEmpty?: boolean\n config: ReturnType<typeof defineConfig> | UserConfig\n}\n\nconst tsLoader = async (configFile: string) => {\n const jiti = createJiti(configFile, {\n jsx: {\n runtime: 'automatic',\n importSource: '@kubb/react-fabric',\n },\n sourceMaps: true,\n interopDefault: true,\n })\n\n const mod = await jiti.import(configFile, { default: true })\n\n return mod\n}\n\nexport async function getCosmiConfig(moduleName: string, config?: string): Promise<CosmiconfigResult> {\n let result: CosmiconfigResult\n const searchPlaces = [\n 'package.json',\n `.${moduleName}rc`,\n `.${moduleName}rc.json`,\n `.${moduleName}rc.yaml`,\n `.${moduleName}rc.yml`,\n\n `.${moduleName}rc.ts`,\n `.${moduleName}rc.js`,\n `.${moduleName}rc.mjs`,\n `.${moduleName}rc.cjs`,\n\n `${moduleName}.config.ts`,\n `${moduleName}.config.js`,\n `${moduleName}.config.mjs`,\n `${moduleName}.config.cjs`,\n ]\n const explorer = cosmiconfig(moduleName, {\n cache: false,\n searchPlaces: [\n ...searchPlaces.map((searchPlace) => {\n return `.config/${searchPlace}`\n }),\n ...searchPlaces.map((searchPlace) => {\n return `configs/${searchPlace}`\n }),\n ...searchPlaces,\n ],\n loaders: {\n '.ts': tsLoader,\n },\n })\n\n try {\n result = config ? ((await explorer.load(config)) as CosmiconfigResult) : ((await explorer.search()) as CosmiconfigResult)\n } catch (error) {\n throw new Error('Config failed loading', { cause: error })\n }\n\n if (result?.isEmpty || !result || !result.config) {\n throw new Error('Config not defined, create a kubb.config.js or pass through your config with the option --config')\n }\n\n return result as CosmiconfigResult\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-C1_xRkKa.cjs');
2
- const require_package = require('./package-Cnl_fuIC.cjs');
2
+ const require_package = require('./package-CiB5tqr0.cjs');
3
3
  let citty = require("citty");
4
4
 
5
5
  //#region src/index.ts
@@ -23,17 +23,19 @@ const main = (0, citty.defineCommand)({
23
23
  "generate",
24
24
  "validate",
25
25
  "mcp",
26
- "init"
26
+ "init",
27
+ "start"
27
28
  ].includes(rawArgs[0])) {
28
- await (0, citty.runCommand)(await Promise.resolve().then(() => require("./generate-BJyvkuLI.cjs")).then((r) => r.default), { rawArgs });
29
+ await (0, citty.runCommand)(await Promise.resolve().then(() => require("./generate-CLDVb4hB.cjs")).then((r) => r.default), { rawArgs });
29
30
  process.exit(0);
30
31
  }
31
32
  },
32
33
  subCommands: {
33
- generate: () => Promise.resolve().then(() => require("./generate-BJyvkuLI.cjs")).then((r) => r.default),
34
- validate: () => Promise.resolve().then(() => require("./validate-DkHCd-Tl.cjs")).then((r) => r.default),
35
- mcp: () => Promise.resolve().then(() => require("./mcp-l-_Z-WU6.cjs")).then((r) => r.default),
36
- init: () => Promise.resolve().then(() => require("./init-CxLDdq2k.cjs")).then((r) => r.default)
34
+ generate: () => Promise.resolve().then(() => require("./generate-CLDVb4hB.cjs")).then((r) => r.default),
35
+ validate: () => Promise.resolve().then(() => require("./validate-Cvb5aOEb.cjs")).then((r) => r.default),
36
+ mcp: () => Promise.resolve().then(() => require("./mcp-Hy_PYnFp.cjs")).then((r) => r.default),
37
+ init: () => Promise.resolve().then(() => require("./init-Bs1GxKWV.cjs")).then((r) => r.default),
38
+ start: () => Promise.resolve().then(() => require("./start-BeoZd1fL.cjs")).then((r) => r.default)
37
39
  }
38
40
  });
39
41
  async function run(_argv) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["version"],"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runCommand, runMain } from 'citty'\nimport { version } from '../package.json'\n\nconst main = defineCommand({\n meta: {\n name: 'kubb',\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n\n if (!['generate', 'validate', 'mcp', 'init'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n init: () => import('./commands/init.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;AAGA,MAAM,gCAAqB;CACzB,MAAM;EACJ,MAAM;EACN;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAIA,wBAAQ;AACpB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC;GAAC;GAAY;GAAY;GAAO;GAAO,CAAC,SAAS,QAAQ,GAAa,EAAE;AAI3E,+BAFwB,2CAAM,4BAAiC,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,gDAAW,uBAA4B,MAAM,MAAM,EAAE,QAAQ;EAC7D,iDAAY,wBAA6B,MAAM,MAAM,EAAE,QAAQ;EAChE;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,0BAAc,KAAK"}
1
+ {"version":3,"file":"index.cjs","names":["version"],"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runCommand, runMain } from 'citty'\nimport { version } from '../package.json'\n\nconst main = defineCommand({\n meta: {\n name: 'kubb',\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n\n if (!['generate', 'validate', 'mcp', 'init', 'start'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n init: () => import('./commands/init.ts').then((r) => r.default),\n start: () => import('./commands/start.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;AAGA,MAAM,gCAAqB;CACzB,MAAM;EACJ,MAAM;EACN;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAIA,wBAAQ;AACpB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC;GAAC;GAAY;GAAY;GAAO;GAAQ;GAAQ,CAAC,SAAS,QAAQ,GAAa,EAAE;AAIpF,+BAFwB,2CAAM,4BAAiC,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,qDAAgB,4BAAiC,MAAM,MAAM,EAAE,QAAQ;EACvE,gDAAW,uBAA4B,MAAM,MAAM,EAAE,QAAQ;EAC7D,iDAAY,wBAA6B,MAAM,MAAM,EAAE,QAAQ;EAC/D,kDAAa,yBAA8B,MAAM,MAAM,EAAE,QAAQ;EAClE;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,0BAAc,KAAK"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as __name } from "./chunk-jHaXqnEa.js";
2
- import { t as version } from "./package-Qh9BQXK6.js";
2
+ import { t as version } from "./package-BFidNEkS.js";
3
3
  import { defineCommand, runCommand, runMain } from "citty";
4
4
 
5
5
  //#region src/index.ts
@@ -23,17 +23,19 @@ const main = defineCommand({
23
23
  "generate",
24
24
  "validate",
25
25
  "mcp",
26
- "init"
26
+ "init",
27
+ "start"
27
28
  ].includes(rawArgs[0])) {
28
- await runCommand(await import("./generate-Bjj-OR20.js").then((r) => r.default), { rawArgs });
29
+ await runCommand(await import("./generate-CBsaUUvV.js").then((r) => r.default), { rawArgs });
29
30
  process.exit(0);
30
31
  }
31
32
  },
32
33
  subCommands: {
33
- generate: () => import("./generate-Bjj-OR20.js").then((r) => r.default),
34
- validate: () => import("./validate-0Qu8SxVA.js").then((r) => r.default),
35
- mcp: () => import("./mcp-By2JUPa8.js").then((r) => r.default),
36
- init: () => import("./init-D37jPiGV.js").then((r) => r.default)
34
+ generate: () => import("./generate-CBsaUUvV.js").then((r) => r.default),
35
+ validate: () => import("./validate-YI4YkVTl.js").then((r) => r.default),
36
+ mcp: () => import("./mcp-BdwwUv36.js").then((r) => r.default),
37
+ init: () => import("./init-D3zCeqU-.js").then((r) => r.default),
38
+ start: () => import("./start-Ohz4V8k2.js").then((r) => r.default)
37
39
  }
38
40
  });
39
41
  async function run(_argv) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runCommand, runMain } from 'citty'\nimport { version } from '../package.json'\n\nconst main = defineCommand({\n meta: {\n name: 'kubb',\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n\n if (!['generate', 'validate', 'mcp', 'init'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n init: () => import('./commands/init.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;AAGA,MAAM,OAAO,cAAc;CACzB,MAAM;EACJ,MAAM;EACN;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAI,QAAQ;AACpB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC;GAAC;GAAY;GAAY;GAAO;GAAO,CAAC,SAAS,QAAQ,GAAa,EAAE;AAI3E,SAAM,WAFkB,MAAM,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,WAAW,OAAO,qBAAqB,MAAM,MAAM,EAAE,QAAQ;EAC7D,YAAY,OAAO,sBAAsB,MAAM,MAAM,EAAE,QAAQ;EAChE;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,OAAM,QAAQ,KAAK"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runCommand, runMain } from 'citty'\nimport { version } from '../package.json'\n\nconst main = defineCommand({\n meta: {\n name: 'kubb',\n version,\n description: 'Kubb generation',\n },\n args: {\n version: {\n type: 'boolean',\n alias: 'v',\n description: 'Show version number',\n },\n },\n async setup({ rawArgs, args }) {\n if (args.version) {\n console.log(version)\n process.exit(0)\n }\n\n if (!['generate', 'validate', 'mcp', 'init', 'start'].includes(rawArgs[0] as string)) {\n // generate is not being used\n const generateCommand = await import('./commands/generate.ts').then((r) => r.default)\n\n await runCommand(generateCommand, { rawArgs })\n\n process.exit(0)\n }\n },\n subCommands: {\n generate: () => import('./commands/generate.ts').then((r) => r.default),\n validate: () => import('./commands/validate.ts').then((r) => r.default),\n mcp: () => import('./commands/mcp.ts').then((r) => r.default),\n init: () => import('./commands/init.ts').then((r) => r.default),\n start: () => import('./commands/start.ts').then((r) => r.default),\n },\n})\n\nexport async function run(_argv?: string[]): Promise<void> {\n await runMain(main)\n}\n"],"mappings":";;;;;AAGA,MAAM,OAAO,cAAc;CACzB,MAAM;EACJ,MAAM;EACN;EACA,aAAa;EACd;CACD,MAAM,EACJ,SAAS;EACP,MAAM;EACN,OAAO;EACP,aAAa;EACd,EACF;CACD,MAAM,MAAM,EAAE,SAAS,QAAQ;AAC7B,MAAI,KAAK,SAAS;AAChB,WAAQ,IAAI,QAAQ;AACpB,WAAQ,KAAK,EAAE;;AAGjB,MAAI,CAAC;GAAC;GAAY;GAAY;GAAO;GAAQ;GAAQ,CAAC,SAAS,QAAQ,GAAa,EAAE;AAIpF,SAAM,WAFkB,MAAM,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ,EAEnD,EAAE,SAAS,CAAC;AAE9C,WAAQ,KAAK,EAAE;;;CAGnB,aAAa;EACX,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,gBAAgB,OAAO,0BAA0B,MAAM,MAAM,EAAE,QAAQ;EACvE,WAAW,OAAO,qBAAqB,MAAM,MAAM,EAAE,QAAQ;EAC7D,YAAY,OAAO,sBAAsB,MAAM,MAAM,EAAE,QAAQ;EAC/D,aAAa,OAAO,uBAAuB,MAAM,MAAM,EAAE,QAAQ;EAClE;CACF,CAAC;AAEF,eAAsB,IAAI,OAAiC;AACzD,OAAM,QAAQ,KAAK"}