···11import type { Config } from '../../../config/types';
22-import type { PluginClientNames } from '../../../plugins/types';
22+import type { PluginClientNames } from '../../types';
3344export function getClientPlugin(
55 config: Config,
···11import type { DefinePlugin, OperationsStrategy, Plugin } from '@hey-api/shared';
2233-import type { PluginClientNames } from '../../../plugins/types';
44-// import type { PluginClientNames, PluginValidatorNames } from '../../../plugins/types';
33+import type { PluginClientNames } from '../../types';
44+// import type { PluginClientNames, PluginValidatorNames } from '../../types';
55import type { ExamplesConfig, UserExamplesConfig } from './examples';
66import type { OperationsConfig, UserOperationsConfig } from './operations';
77
···11import type { Config } from '../../../config/types';
22-import type { PluginClientNames } from '../../../plugins/types';
22+import type { PluginClientNames } from '../../types';
3344export function getClientBaseUrlKey(config: Config) {
55 const client = getClientPlugin(config);
···11import type { DefinePlugin, NameTransformer, OperationsStrategy, Plugin } from '@hey-api/shared';
2233-import type {
44- PluginClientNames,
55- PluginTransformerNames,
66- PluginValidatorNames,
77-} from '../../../plugins/types';
33+import type { PluginClientNames, PluginTransformerNames, PluginValidatorNames } from '../../types';
84import type { ExamplesConfig, UserExamplesConfig } from './examples';
95import type { OperationsConfig, UserOperationsConfig } from './operations';
106···219215 * @default true
220216 */
221217 client: PluginClientNames | false;
222222- /**
223223- * Configuration for generating SDK code examples.
224224- */
218218+ /** Configuration for generating SDK code examples. */
225219 examples: ExamplesConfig;
226226- /**
227227- * Define the structure of generated SDK operations.
228228- */
220220+ /** Define the structure of generated SDK operations. */
229221 operations: OperationsConfig;
230222 /**
231223 * Define how request parameters are structured in generated SDK methods.
+2
packages/openapi-ts/src/plugins/config.ts
···2323import { defaultConfig as arktype } from '../plugins/arktype';
2424import { defaultConfig as fastify } from '../plugins/fastify';
2525import { defaultConfig as nestjs } from '../plugins/nestjs';
2626+import { defaultConfig as orpc } from '../plugins/orpc';
2627import { defaultConfig as swr } from '../plugins/swr';
2728import { defaultConfig as valibot } from '../plugins/valibot';
2829import { defaultConfig as zod } from '../plugins/zod';
···5354 arktype,
5455 fastify,
5556 nestjs,
5757+ orpc,
5658 swr,
5759 valibot,
5860 zod,
+76
packages/openapi-ts/src/plugins/orpc/config.ts
···11+import { log } from '@hey-api/codegen-core';
22+import { definePluginConfig } from '@hey-api/shared';
33+44+import { resolveContracts } from './contracts/config';
55+import { handler } from './plugin';
66+import type { OrpcPlugin } from './types';
77+88+const validatorInferWarn =
99+ '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.';
1010+1111+export const defaultConfig: OrpcPlugin['Config'] = {
1212+ config: {
1313+ includeInEntry: false,
1414+ },
1515+ handler,
1616+ name: 'orpc',
1717+ resolveConfig: (plugin, context) => {
1818+ if (typeof plugin.config.validator !== 'object') {
1919+ plugin.config.validator = {
2020+ input: plugin.config.validator,
2121+ output: plugin.config.validator,
2222+ };
2323+ }
2424+2525+ if (plugin.config.validator.input || plugin.config.validator.input === undefined) {
2626+ if (
2727+ typeof plugin.config.validator.input === 'boolean' ||
2828+ plugin.config.validator.input === undefined
2929+ ) {
3030+ try {
3131+ plugin.config.validator.input = context.pluginByTag('validator');
3232+ plugin.dependencies.add(plugin.config.validator.input!);
3333+ } catch {
3434+ // avoid showing the warning with default configuration as it would be confusing
3535+ if (plugin.config.validator.input !== undefined) {
3636+ log.warn(validatorInferWarn);
3737+ }
3838+ plugin.config.validator.input = false;
3939+ }
4040+ } else {
4141+ plugin.dependencies.add(plugin.config.validator.input);
4242+ }
4343+ } else {
4444+ plugin.config.validator.input = false;
4545+ }
4646+4747+ if (plugin.config.validator.output || plugin.config.validator.output === undefined) {
4848+ if (
4949+ typeof plugin.config.validator.output === 'boolean' ||
5050+ plugin.config.validator.output === undefined
5151+ ) {
5252+ try {
5353+ plugin.config.validator.output = context.pluginByTag('validator');
5454+ plugin.dependencies.add(plugin.config.validator.output!);
5555+ } catch {
5656+ // avoid showing the warning with default configuration as it would be confusing
5757+ if (plugin.config.validator.output !== undefined) {
5858+ log.warn(validatorInferWarn);
5959+ }
6060+ plugin.config.validator.output = false;
6161+ }
6262+ } else {
6363+ plugin.dependencies.add(plugin.config.validator.output);
6464+ }
6565+ } else {
6666+ plugin.config.validator.output = false;
6767+ }
6868+6969+ plugin.config.contracts = resolveContracts(plugin.config, context);
7070+ },
7171+};
7272+7373+/**
7474+ * Type helper for oRPC plugin, returns {@link Plugin.Config} object
7575+ */
7676+export const defineConfig = definePluginConfig(defaultConfig);
···11+export { resolveContracts } from './config';
22+export { type ContractItem, createShell, source, toNode } from './node';
33+export { resolveStrategy } from './resolve';
44+export type { ContractsConfig, UserContractsConfig } from './types';
···2424import type { ExampleIntent } from '../../../ir/intents';
2525import type { IR } from '../../../ir/types';
2626import type { Hooks } from '../../../parser/hooks';
2727-import type { Plugin, PluginConfigMap } from '../../../plugins/types';
2827import { jsonPointerToPath } from '../../../utils/ref';
2828+import type { Plugin, PluginConfigMap } from '../../types';
2929import type { BaseEvent, WalkEvent } from '../types/instance';
30303131// eslint-disable-next-line @typescript-eslint/no-empty-object-type