diff --git a/.changeset/fluffy-facts-film.md b/.changeset/fluffy-facts-film.md new file mode 100644 index 000000000..26a6c80cb --- /dev/null +++ b/.changeset/fluffy-facts-film.md @@ -0,0 +1,5 @@ +--- +"@hey-api/codegen-core": patch +--- + +**log**: make group optional in warn method diff --git a/.changeset/soft-cars-cover.md b/.changeset/soft-cars-cover.md new file mode 100644 index 000000000..4625ec8e9 --- /dev/null +++ b/.changeset/soft-cars-cover.md @@ -0,0 +1,5 @@ +--- +"@hey-api/openapi-ts": patch +--- + +**config(plugins)**: show warning when plugin infer fails diff --git a/packages/codegen-core/src/log.ts b/packages/codegen-core/src/log.ts index 47e3c416b..538759ea2 100644 --- a/packages/codegen-core/src/log.ts +++ b/packages/codegen-core/src/log.ts @@ -55,10 +55,10 @@ function debug(message: string, group: keyof typeof DebugGroups) { console.debug(`${prefix} ${message}`); } -function warn(message: string, group: keyof typeof WarnGroups) { +function warn(message: string, group?: keyof typeof WarnGroups) { if (NO_WARNINGS) return; - const color = WarnGroups[group] ?? colors.yellowBright; + const color = group ? WarnGroups[group] : colors.yellowBright; console.warn(color(`${message}`)); } diff --git a/packages/openapi-ts/src/plugins/@hey-api/sdk/config.ts b/packages/openapi-ts/src/plugins/@hey-api/sdk/config.ts index cfe8ca9ee..34634c572 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/sdk/config.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/sdk/config.ts @@ -1,3 +1,4 @@ +import { log } from '@hey-api/codegen-core'; import { definePluginConfig } from '@hey-api/shared'; import { resolveExamples } from './examples'; @@ -5,6 +6,11 @@ import { resolveOperations } from './operations'; import { handler } from './plugin'; import type { HeyApiSdkPlugin } from './types'; +const transformerInferWarn = + 'You set `transformer: true` but no transformer plugin was found in your plugins. Add a transformer plugin like `@hey-api/transformers` to enable this feature. The transformer option has been disabled.'; +const validatorInferWarn = + 'You set `validator: true` but no validator plugin was found in your plugins. Add a validator plugin like `zod` to enable this feature. The validator option has been disabled.'; + export const defaultConfig: HeyApiSdkPlugin['Config'] = { config: { auth: true, @@ -38,10 +44,16 @@ export const defaultConfig: HeyApiSdkPlugin['Config'] = { if (plugin.config.transformer) { if (typeof plugin.config.transformer === 'boolean') { - plugin.config.transformer = context.pluginByTag('transformer'); + try { + plugin.config.transformer = context.pluginByTag('transformer'); + plugin.dependencies.add(plugin.config.transformer!); + } catch { + log.warn(transformerInferWarn); + plugin.config.transformer = false; + } + } else { + plugin.dependencies.add(plugin.config.transformer); } - - plugin.dependencies.add(plugin.config.transformer!); } else { plugin.config.transformer = false; } @@ -55,20 +67,32 @@ export const defaultConfig: HeyApiSdkPlugin['Config'] = { if (plugin.config.validator.request) { if (typeof plugin.config.validator.request === 'boolean') { - plugin.config.validator.request = context.pluginByTag('validator'); + try { + plugin.config.validator.request = context.pluginByTag('validator'); + plugin.dependencies.add(plugin.config.validator.request!); + } catch { + log.warn(validatorInferWarn); + plugin.config.validator.request = false; + } + } else { + plugin.dependencies.add(plugin.config.validator.request); } - - plugin.dependencies.add(plugin.config.validator.request!); } else { plugin.config.validator.request = false; } if (plugin.config.validator.response) { if (typeof plugin.config.validator.response === 'boolean') { - plugin.config.validator.response = context.pluginByTag('validator'); + try { + plugin.config.validator.response = context.pluginByTag('validator'); + plugin.dependencies.add(plugin.config.validator.response!); + } catch { + log.warn(validatorInferWarn); + plugin.config.validator.response = false; + } + } else { + plugin.dependencies.add(plugin.config.validator.response); } - - plugin.dependencies.add(plugin.config.validator.response!); } else { plugin.config.validator.response = false; }