@orpc/contract 0.0.0-next.a05fbfd → 0.0.0-next.a246703

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -32,7 +32,7 @@
32
32
  - **Contract-First Development 📜**: (Optional) Define your API contract upfront and implement it with confidence.
33
33
  - **Exceptional Developer Experience ✨**: Enjoy a streamlined workflow with robust typing and clear, in-code documentation.
34
34
  - **Multi-Runtime Support 🌍**: Run your code seamlessly on Cloudflare, Deno, Bun, Node.js, and more.
35
- - **Framework Integrations 🧩**: Supports Tanstack Query (React, Vue), Pinia Colada, and more.
35
+ - **Framework Integrations 🧩**: Supports Tanstack Query (React, Vue, Solid, Svelte), Pinia Colada, and more.
36
36
  - **Server Actions ⚡️**: Fully compatible with React Server Actions on Next.js, TanStack Start, and more.
37
37
  - **Standard Schema Support 🗂️**: Effortlessly work with Zod, Valibot, ArkType, and others right out of the box.
38
38
  - **Fast & Lightweight 💨**: Built on native APIs across all runtimes – optimized for speed and efficiency.
@@ -55,9 +55,13 @@ You can find the full documentation [here](https://orpc.unnoq.com).
55
55
  - [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume your API on the client with type-safety.
56
56
  - [@orpc/react-query](https://www.npmjs.com/package/@orpc/react-query): Integration with [React Query](https://tanstack.com/query/latest/docs/framework/react/overview).
57
57
  - [@orpc/vue-query](https://www.npmjs.com/package/@orpc/vue-query): Integration with [Vue Query](https://tanstack.com/query/latest/docs/framework/vue/overview).
58
+ - [@orpc/solid-query](https://www.npmjs.com/package/@orpc/solid-query): Integration with [Solid Query](https://tanstack.com/query/latest/docs/framework/solid/overview).
59
+ - [@orpc/svelte-query](https://www.npmjs.com/package/@orpc/svelte-query): Integration with [Svelte Query](https://tanstack.com/query/latest/docs/framework/svelte/overview).
58
60
  - [@orpc/vue-colada](https://www.npmjs.com/package/@orpc/vue-colada): Integration with [Pinia Colada](https://pinia-colada.esm.dev/).
59
61
  - [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Generate OpenAPI specs and handle OpenAPI requests.
60
62
  - [@orpc/zod](https://www.npmjs.com/package/@orpc/zod): More schemas that [Zod](https://zod.dev/) doesn't support yet.
63
+ - [@orpc/valibot](https://www.npmjs.com/package/@orpc/valibot): OpenAPI spec generation from [Valibot](https://valibot.dev/).
64
+ - [@orpc/arktype](https://www.npmjs.com/package/@orpc/arktype): OpenAPI spec generation from [ArkType](https://arktype.io/).
61
65
 
62
66
  ## `@orpc/contract`
63
67
 
@@ -96,6 +100,14 @@ export const contract = {
96
100
  }
97
101
  ```
98
102
 
103
+ ## Sponsors
104
+
105
+ <p align="center">
106
+ <a href="https://cdn.jsdelivr.net/gh/unnoq/unnoq/sponsors.svg">
107
+ <img src='https://cdn.jsdelivr.net/gh/unnoq/unnoq/sponsors.svg'/>
108
+ </a>
109
+ </p>
110
+
99
111
  ## License
100
112
 
101
113
  Distributed under the MIT License. See [LICENSE](https://github.com/unnoq/orpc/blob/main/LICENSE) for more information.
package/dist/index.d.mts CHANGED
@@ -1,43 +1,42 @@
1
- import { ORPCErrorCode, ORPCError, ClientContext, Client } from '@orpc/client';
1
+ import { ORPCErrorCode, ORPCError, HTTPMethod, HTTPPath, ClientContext, Client } from '@orpc/client';
2
2
  export { ORPCError } from '@orpc/client';
3
- import { StandardSchemaV1 } from '@standard-schema/spec';
4
3
  import { Promisable, IsEqual } from '@orpc/shared';
4
+ import { StandardSchemaV1 } from '@standard-schema/spec';
5
5
 
6
- type Schema = StandardSchemaV1 | undefined;
7
- type SchemaInput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<TSchema> : TFallback;
8
- type SchemaOutput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TSchema> : TFallback;
6
+ type Schema<TInput, TOutput> = StandardSchemaV1<TInput, TOutput>;
7
+ type AnySchema = Schema<any, any>;
8
+ type SchemaIssue = StandardSchemaV1.Issue;
9
+ type InferSchemaInput<T extends AnySchema> = T extends StandardSchemaV1<infer UInput, any> ? UInput : never;
10
+ type InferSchemaOutput<T extends AnySchema> = T extends StandardSchemaV1<any, infer UOutput> ? UOutput : never;
9
11
  type TypeRest<TInput, TOutput> = [map: (input: TInput) => Promisable<TOutput>] | (IsEqual<TInput, TOutput> extends true ? [] : never);
10
- declare function type<TInput, TOutput = TInput>(...[map]: TypeRest<TInput, TOutput>): StandardSchemaV1<TInput, TOutput>;
12
+ declare function type<TInput, TOutput = TInput>(...[map]: TypeRest<TInput, TOutput>): Schema<TInput, TOutput>;
11
13
 
12
14
  interface ValidationErrorOptions extends ErrorOptions {
13
15
  message: string;
14
- issues: readonly StandardSchemaV1.Issue[];
16
+ issues: readonly SchemaIssue[];
15
17
  }
16
18
  declare class ValidationError extends Error {
17
- readonly issues: readonly StandardSchemaV1.Issue[];
19
+ readonly issues: readonly SchemaIssue[];
18
20
  constructor(options: ValidationErrorOptions);
19
21
  }
20
- type ErrorMapItem<TDataSchema extends Schema> = {
22
+ interface ErrorMapItem<TDataSchema extends AnySchema> {
21
23
  status?: number;
22
24
  message?: string;
23
- description?: string;
24
25
  data?: TDataSchema;
25
- };
26
+ }
26
27
  type ErrorMap = {
27
- [key in ORPCErrorCode]?: ErrorMapItem<Schema>;
28
+ [key in ORPCErrorCode]?: ErrorMapItem<AnySchema>;
28
29
  };
29
30
  type MergedErrorMap<T1 extends ErrorMap, T2 extends ErrorMap> = Omit<T1, keyof T2> & T2;
30
31
  declare function mergeErrorMap<T1 extends ErrorMap, T2 extends ErrorMap>(errorMap1: T1, errorMap2: T2): MergedErrorMap<T1, T2>;
31
32
  type ORPCErrorFromErrorMap<TErrorMap extends ErrorMap> = {
32
- [K in keyof TErrorMap]: K extends string ? TErrorMap[K] extends ErrorMapItem<infer TDataSchema> ? ORPCError<K, SchemaOutput<TDataSchema>> : never : never;
33
+ [K in keyof TErrorMap]: K extends string ? TErrorMap[K] extends ErrorMapItem<infer TDataSchema extends Schema<unknown, unknown>> ? ORPCError<K, InferSchemaOutput<TDataSchema>> : never : never;
33
34
  }[keyof TErrorMap];
34
35
  type ErrorFromErrorMap<TErrorMap extends ErrorMap> = Error | ORPCErrorFromErrorMap<TErrorMap>;
35
36
 
36
37
  type Meta = Record<string, any>;
37
38
  declare function mergeMeta<T extends Meta>(meta1: T, meta2: T): T;
38
39
 
39
- type HTTPPath = `/${string}`;
40
- type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
41
40
  type InputStructure = 'compact' | 'detailed';
42
41
  type OutputStructure = 'compact' | 'detailed';
43
42
  interface Route {
@@ -109,20 +108,20 @@ declare function prefixRoute(route: Route, prefix: HTTPPath): Route;
109
108
  declare function unshiftTagRoute(route: Route, tags: readonly string[]): Route;
110
109
  declare function mergePrefix(a: HTTPPath | undefined, b: HTTPPath): HTTPPath;
111
110
  declare function mergeTags(a: readonly string[] | undefined, b: readonly string[]): readonly string[];
112
- interface AdaptRouteOptions {
111
+ interface EnhanceRouteOptions {
113
112
  prefix?: HTTPPath;
114
113
  tags?: readonly string[];
115
114
  }
116
- declare function adaptRoute(route: Route, options: AdaptRouteOptions): Route;
115
+ declare function enhanceRoute(route: Route, options: EnhanceRouteOptions): Route;
117
116
 
118
- interface ContractProcedureDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> {
117
+ interface ContractProcedureDef<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> {
119
118
  meta: TMeta;
120
119
  route: Route;
121
- inputSchema: TInputSchema;
122
- outputSchema: TOutputSchema;
120
+ inputSchema?: TInputSchema;
121
+ outputSchema?: TOutputSchema;
123
122
  errorMap: TErrorMap;
124
123
  }
125
- declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> {
124
+ declare class ContractProcedure<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> {
126
125
  '~orpc': ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
127
126
  constructor(def: ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>);
128
127
  }
@@ -133,67 +132,67 @@ type ContractRouter<TMeta extends Meta> = ContractProcedure<any, any, any, TMeta
133
132
  [k: string]: ContractRouter<TMeta>;
134
133
  };
135
134
  type AnyContractRouter = ContractRouter<any>;
136
- type AdaptedContractRouter<TContract extends AnyContractRouter, TErrorMap extends ErrorMap> = {
137
- [K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrors, infer UMeta> ? ContractProcedure<UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrors>, UMeta> : TContract[K] extends AnyContractRouter ? AdaptedContractRouter<TContract[K], TErrorMap> : never;
138
- };
139
- interface AdaptContractRouterOptions<TErrorMap extends ErrorMap> {
140
- errorMap: TErrorMap;
141
- prefix?: HTTPPath;
142
- tags?: readonly string[];
143
- }
144
- declare function adaptContractRouter<TRouter extends ContractRouter<any>, TErrorMap extends ErrorMap>(contract: TRouter, options: AdaptContractRouterOptions<TErrorMap>): AdaptedContractRouter<TRouter, TErrorMap>;
145
- type InferContractRouterInputs<T extends AnyContractRouter> = T extends ContractProcedure<infer UInputSchema, any, any, any> ? SchemaInput<UInputSchema> : {
135
+ type InferContractRouterInputs<T extends AnyContractRouter> = T extends ContractProcedure<infer UInputSchema, any, any, any> ? InferSchemaInput<UInputSchema> : {
146
136
  [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterInputs<T[K]> : never;
147
137
  };
148
- type InferContractRouterOutputs<T extends AnyContractRouter> = T extends ContractProcedure<any, infer UOutputSchema, any, any> ? SchemaOutput<UOutputSchema> : {
138
+ type InferContractRouterOutputs<T extends AnyContractRouter> = T extends ContractProcedure<any, infer UOutputSchema, any, any> ? InferSchemaOutput<UOutputSchema> : {
149
139
  [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterOutputs<T[K]> : never;
150
140
  };
151
- type ContractRouterToErrorMap<T extends AnyContractRouter> = T extends ContractProcedure<any, any, infer UErrorMap, any> ? UErrorMap : {
152
- [K in keyof T]: T[K] extends AnyContractRouter ? ContractRouterToErrorMap<T[K]> : never;
141
+ type InferContractRouterErrorMap<T extends AnyContractRouter> = T extends ContractProcedure<any, any, infer UErrorMap, any> ? UErrorMap : {
142
+ [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterErrorMap<T[K]> : never;
153
143
  }[keyof T];
154
- type ContractRouterToMeta<T extends AnyContractRouter> = T extends ContractRouter<infer UMeta> ? UMeta : never;
144
+ type InferContractRouterMeta<T extends AnyContractRouter> = T extends ContractRouter<infer UMeta> ? UMeta : never;
145
+
146
+ declare function getContractRouter(router: AnyContractRouter, path: readonly string[]): AnyContractRouter | undefined;
147
+ type EnhancedContractRouter<T extends AnyContractRouter, TErrorMap extends ErrorMap> = T extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrors, infer UMeta> ? ContractProcedure<UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrors>, UMeta> : {
148
+ [K in keyof T]: T[K] extends AnyContractRouter ? EnhancedContractRouter<T[K], TErrorMap> : never;
149
+ };
150
+ interface EnhanceContractRouterOptions<TErrorMap extends ErrorMap> extends EnhanceRouteOptions {
151
+ errorMap: TErrorMap;
152
+ }
153
+ declare function enhanceContractRouter<T extends AnyContractRouter, TErrorMap extends ErrorMap>(router: T, options: EnhanceContractRouterOptions<TErrorMap>): EnhancedContractRouter<T, TErrorMap>;
155
154
 
156
- interface ContractProcedureBuilder<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
155
+ interface ContractProcedureBuilder<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
157
156
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilder<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
158
157
  meta(meta: TMeta): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
159
158
  route(route: Route): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
160
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
161
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
159
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
160
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
162
161
  }
163
- interface ContractProcedureBuilderWithInput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
162
+ interface ContractProcedureBuilderWithInput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
164
163
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
165
164
  meta(meta: TMeta): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
166
165
  route(route: Route): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
167
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithInputOutput<TInputSchema, U, TErrorMap, TMeta>;
166
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInputOutput<TInputSchema, U, TErrorMap, TMeta>;
168
167
  }
169
- interface ContractProcedureBuilderWithOutput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
168
+ interface ContractProcedureBuilderWithOutput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
170
169
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
171
170
  meta(meta: TMeta): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
172
171
  route(route: Route): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
173
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInputOutput<U, TOutputSchema, TErrorMap, TMeta>;
172
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInputOutput<U, TOutputSchema, TErrorMap, TMeta>;
174
173
  }
175
- interface ContractProcedureBuilderWithInputOutput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
174
+ interface ContractProcedureBuilderWithInputOutput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
176
175
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
177
176
  meta(meta: TMeta): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
178
177
  route(route: Route): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
179
178
  }
180
179
  interface ContractRouterBuilder<TErrorMap extends ErrorMap, TMeta extends Meta> {
181
- '~orpc': AdaptContractRouterOptions<TErrorMap>;
180
+ '~orpc': EnhanceContractRouterOptions<TErrorMap>;
182
181
  'errors'<U extends ErrorMap>(errors: U): ContractRouterBuilder<MergedErrorMap<TErrorMap, U>, TMeta>;
183
182
  'prefix'(prefix: HTTPPath): ContractRouterBuilder<TErrorMap, TMeta>;
184
183
  'tag'(...tags: string[]): ContractRouterBuilder<TErrorMap, TMeta>;
185
- 'router'<T extends ContractRouter<TMeta>>(router: T): AdaptedContractRouter<T, TErrorMap>;
184
+ 'router'<T extends ContractRouter<TMeta>>(router: T): EnhancedContractRouter<T, TErrorMap>;
186
185
  }
187
186
 
188
- interface ContractBuilderDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>, AdaptContractRouterOptions<TErrorMap> {
187
+ interface ContractBuilderDef<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>, EnhanceContractRouterOptions<TErrorMap> {
189
188
  }
190
- declare class ContractBuilder<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
189
+ declare class ContractBuilder<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
191
190
  '~orpc': ContractBuilderDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
192
191
  constructor(def: ContractBuilderDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>);
193
192
  /**
194
193
  * Reset initial meta
195
194
  */
196
- $meta<U extends Meta>(initialMeta: U): ContractBuilder<TInputSchema, TOutputSchema, TErrorMap, U>;
195
+ $meta<U extends Meta>(initialMeta: U): ContractBuilder<TInputSchema, TOutputSchema, TErrorMap, U & Record<never, never>>;
197
196
  /**
198
197
  * Reset initial route
199
198
  */
@@ -201,33 +200,34 @@ declare class ContractBuilder<TInputSchema extends Schema, TOutputSchema extends
201
200
  errors<U extends ErrorMap>(errors: U): ContractBuilder<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
202
201
  meta(meta: TMeta): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
203
202
  route(route: Route): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
204
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
205
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
203
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
204
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
206
205
  prefix(prefix: HTTPPath): ContractRouterBuilder<TErrorMap, TMeta>;
207
206
  tag(...tags: string[]): ContractRouterBuilder<TErrorMap, TMeta>;
208
- router<T extends ContractRouter<TMeta>>(router: T): AdaptedContractRouter<T, TErrorMap>;
207
+ router<T extends ContractRouter<TMeta>>(router: T): EnhancedContractRouter<T, TErrorMap>;
209
208
  }
210
- declare const oc: ContractBuilder<undefined, undefined, {}, {}>;
209
+ declare const oc: ContractBuilder<Schema<unknown, unknown>, Schema<unknown, unknown>, Record<never, never>, Record<never, never>>;
211
210
 
212
211
  interface ContractConfig {
213
212
  defaultMethod: HTTPMethod;
214
213
  defaultSuccessStatus: number;
215
214
  defaultSuccessDescription: string;
216
215
  defaultInputStructure: InputStructure;
217
- defaultOutputStructure: InputStructure;
216
+ defaultOutputStructure: OutputStructure;
218
217
  }
219
218
  declare function fallbackContractConfig<T extends keyof ContractConfig>(key: T, value: ContractConfig[T] | undefined): ContractConfig[T];
220
219
 
221
- declare function eventIterator<TYieldIn, TYieldOut, TReturnIn = unknown, TReturnOut = unknown>(yields: StandardSchemaV1<TYieldIn, TYieldOut>, returns?: StandardSchemaV1<TReturnIn, TReturnOut>): StandardSchemaV1<AsyncIteratorObject<TYieldIn, TReturnIn, void>, AsyncIteratorObject<TYieldOut, TReturnOut, void>>;
222
- declare function getEventIteratorSchemaDetails(schema: Schema): undefined | {
223
- yields: Schema;
224
- returns: Schema;
225
- };
220
+ interface EventIteratorSchemaDetails {
221
+ yields: AnySchema;
222
+ returns?: AnySchema;
223
+ }
224
+ declare function eventIterator<TYieldIn, TYieldOut, TReturnIn = unknown, TReturnOut = unknown>(yields: Schema<TYieldIn, TYieldOut>, returns?: Schema<TReturnIn, TReturnOut>): Schema<AsyncIteratorObject<TYieldIn, TReturnIn, void>, AsyncIteratorObject<TYieldOut, TReturnOut, void>>;
225
+ declare function getEventIteratorSchemaDetails(schema: AnySchema | undefined): undefined | EventIteratorSchemaDetails;
226
226
 
227
- type ContractProcedureClient<TClientContext extends ClientContext, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> = Client<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>;
227
+ type ContractProcedureClient<TClientContext extends ClientContext, TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap> = Client<TClientContext, InferSchemaInput<TInputSchema>, InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>;
228
228
 
229
229
  type ContractRouterClient<TRouter extends AnyContractRouter, TClientContext extends ClientContext = Record<never, never>> = TRouter extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, any> ? ContractProcedureClient<TClientContext, UInputSchema, UOutputSchema, UErrorMap> : {
230
230
  [K in keyof TRouter]: TRouter[K] extends AnyContractRouter ? ContractRouterClient<TRouter[K], TClientContext> : never;
231
231
  };
232
232
 
233
- export { type AdaptContractRouterOptions, type AdaptRouteOptions, type AdaptedContractRouter, type AnyContractProcedure, type AnyContractRouter, ContractBuilder, type ContractBuilderDef, type ContractConfig, ContractProcedure, type ContractProcedureBuilder, type ContractProcedureBuilderWithInput, type ContractProcedureBuilderWithInputOutput, type ContractProcedureBuilderWithOutput, type ContractProcedureClient, type ContractProcedureDef, type ContractRouter, type ContractRouterBuilder, type ContractRouterClient, type ContractRouterToErrorMap, type ContractRouterToMeta, type ErrorFromErrorMap, type ErrorMap, type ErrorMapItem, type HTTPMethod, type HTTPPath, type InferContractRouterInputs, type InferContractRouterOutputs, type InputStructure, type MergedErrorMap, type Meta, type ORPCErrorFromErrorMap, type OutputStructure, type Route, type Schema, type SchemaInput, type SchemaOutput, type TypeRest, ValidationError, type ValidationErrorOptions, adaptContractRouter, adaptRoute, eventIterator, fallbackContractConfig, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
233
+ export { type AnyContractProcedure, type AnyContractRouter, type AnySchema, ContractBuilder, type ContractBuilderDef, type ContractConfig, ContractProcedure, type ContractProcedureBuilder, type ContractProcedureBuilderWithInput, type ContractProcedureBuilderWithInputOutput, type ContractProcedureBuilderWithOutput, type ContractProcedureClient, type ContractProcedureDef, type ContractRouter, type ContractRouterBuilder, type ContractRouterClient, type EnhanceContractRouterOptions, type EnhanceRouteOptions, type EnhancedContractRouter, type ErrorFromErrorMap, type ErrorMap, type ErrorMapItem, type EventIteratorSchemaDetails, type InferContractRouterErrorMap, type InferContractRouterInputs, type InferContractRouterMeta, type InferContractRouterOutputs, type InferSchemaInput, type InferSchemaOutput, type InputStructure, type MergedErrorMap, type Meta, type ORPCErrorFromErrorMap, type OutputStructure, type Route, type Schema, type SchemaIssue, type TypeRest, ValidationError, type ValidationErrorOptions, enhanceContractRouter, enhanceRoute, eventIterator, fallbackContractConfig, getContractRouter, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
package/dist/index.d.ts CHANGED
@@ -1,43 +1,42 @@
1
- import { ORPCErrorCode, ORPCError, ClientContext, Client } from '@orpc/client';
1
+ import { ORPCErrorCode, ORPCError, HTTPMethod, HTTPPath, ClientContext, Client } from '@orpc/client';
2
2
  export { ORPCError } from '@orpc/client';
3
- import { StandardSchemaV1 } from '@standard-schema/spec';
4
3
  import { Promisable, IsEqual } from '@orpc/shared';
4
+ import { StandardSchemaV1 } from '@standard-schema/spec';
5
5
 
6
- type Schema = StandardSchemaV1 | undefined;
7
- type SchemaInput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<TSchema> : TFallback;
8
- type SchemaOutput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TSchema> : TFallback;
6
+ type Schema<TInput, TOutput> = StandardSchemaV1<TInput, TOutput>;
7
+ type AnySchema = Schema<any, any>;
8
+ type SchemaIssue = StandardSchemaV1.Issue;
9
+ type InferSchemaInput<T extends AnySchema> = T extends StandardSchemaV1<infer UInput, any> ? UInput : never;
10
+ type InferSchemaOutput<T extends AnySchema> = T extends StandardSchemaV1<any, infer UOutput> ? UOutput : never;
9
11
  type TypeRest<TInput, TOutput> = [map: (input: TInput) => Promisable<TOutput>] | (IsEqual<TInput, TOutput> extends true ? [] : never);
10
- declare function type<TInput, TOutput = TInput>(...[map]: TypeRest<TInput, TOutput>): StandardSchemaV1<TInput, TOutput>;
12
+ declare function type<TInput, TOutput = TInput>(...[map]: TypeRest<TInput, TOutput>): Schema<TInput, TOutput>;
11
13
 
12
14
  interface ValidationErrorOptions extends ErrorOptions {
13
15
  message: string;
14
- issues: readonly StandardSchemaV1.Issue[];
16
+ issues: readonly SchemaIssue[];
15
17
  }
16
18
  declare class ValidationError extends Error {
17
- readonly issues: readonly StandardSchemaV1.Issue[];
19
+ readonly issues: readonly SchemaIssue[];
18
20
  constructor(options: ValidationErrorOptions);
19
21
  }
20
- type ErrorMapItem<TDataSchema extends Schema> = {
22
+ interface ErrorMapItem<TDataSchema extends AnySchema> {
21
23
  status?: number;
22
24
  message?: string;
23
- description?: string;
24
25
  data?: TDataSchema;
25
- };
26
+ }
26
27
  type ErrorMap = {
27
- [key in ORPCErrorCode]?: ErrorMapItem<Schema>;
28
+ [key in ORPCErrorCode]?: ErrorMapItem<AnySchema>;
28
29
  };
29
30
  type MergedErrorMap<T1 extends ErrorMap, T2 extends ErrorMap> = Omit<T1, keyof T2> & T2;
30
31
  declare function mergeErrorMap<T1 extends ErrorMap, T2 extends ErrorMap>(errorMap1: T1, errorMap2: T2): MergedErrorMap<T1, T2>;
31
32
  type ORPCErrorFromErrorMap<TErrorMap extends ErrorMap> = {
32
- [K in keyof TErrorMap]: K extends string ? TErrorMap[K] extends ErrorMapItem<infer TDataSchema> ? ORPCError<K, SchemaOutput<TDataSchema>> : never : never;
33
+ [K in keyof TErrorMap]: K extends string ? TErrorMap[K] extends ErrorMapItem<infer TDataSchema extends Schema<unknown, unknown>> ? ORPCError<K, InferSchemaOutput<TDataSchema>> : never : never;
33
34
  }[keyof TErrorMap];
34
35
  type ErrorFromErrorMap<TErrorMap extends ErrorMap> = Error | ORPCErrorFromErrorMap<TErrorMap>;
35
36
 
36
37
  type Meta = Record<string, any>;
37
38
  declare function mergeMeta<T extends Meta>(meta1: T, meta2: T): T;
38
39
 
39
- type HTTPPath = `/${string}`;
40
- type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
41
40
  type InputStructure = 'compact' | 'detailed';
42
41
  type OutputStructure = 'compact' | 'detailed';
43
42
  interface Route {
@@ -109,20 +108,20 @@ declare function prefixRoute(route: Route, prefix: HTTPPath): Route;
109
108
  declare function unshiftTagRoute(route: Route, tags: readonly string[]): Route;
110
109
  declare function mergePrefix(a: HTTPPath | undefined, b: HTTPPath): HTTPPath;
111
110
  declare function mergeTags(a: readonly string[] | undefined, b: readonly string[]): readonly string[];
112
- interface AdaptRouteOptions {
111
+ interface EnhanceRouteOptions {
113
112
  prefix?: HTTPPath;
114
113
  tags?: readonly string[];
115
114
  }
116
- declare function adaptRoute(route: Route, options: AdaptRouteOptions): Route;
115
+ declare function enhanceRoute(route: Route, options: EnhanceRouteOptions): Route;
117
116
 
118
- interface ContractProcedureDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> {
117
+ interface ContractProcedureDef<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> {
119
118
  meta: TMeta;
120
119
  route: Route;
121
- inputSchema: TInputSchema;
122
- outputSchema: TOutputSchema;
120
+ inputSchema?: TInputSchema;
121
+ outputSchema?: TOutputSchema;
123
122
  errorMap: TErrorMap;
124
123
  }
125
- declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> {
124
+ declare class ContractProcedure<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> {
126
125
  '~orpc': ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
127
126
  constructor(def: ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>);
128
127
  }
@@ -133,67 +132,67 @@ type ContractRouter<TMeta extends Meta> = ContractProcedure<any, any, any, TMeta
133
132
  [k: string]: ContractRouter<TMeta>;
134
133
  };
135
134
  type AnyContractRouter = ContractRouter<any>;
136
- type AdaptedContractRouter<TContract extends AnyContractRouter, TErrorMap extends ErrorMap> = {
137
- [K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrors, infer UMeta> ? ContractProcedure<UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrors>, UMeta> : TContract[K] extends AnyContractRouter ? AdaptedContractRouter<TContract[K], TErrorMap> : never;
138
- };
139
- interface AdaptContractRouterOptions<TErrorMap extends ErrorMap> {
140
- errorMap: TErrorMap;
141
- prefix?: HTTPPath;
142
- tags?: readonly string[];
143
- }
144
- declare function adaptContractRouter<TRouter extends ContractRouter<any>, TErrorMap extends ErrorMap>(contract: TRouter, options: AdaptContractRouterOptions<TErrorMap>): AdaptedContractRouter<TRouter, TErrorMap>;
145
- type InferContractRouterInputs<T extends AnyContractRouter> = T extends ContractProcedure<infer UInputSchema, any, any, any> ? SchemaInput<UInputSchema> : {
135
+ type InferContractRouterInputs<T extends AnyContractRouter> = T extends ContractProcedure<infer UInputSchema, any, any, any> ? InferSchemaInput<UInputSchema> : {
146
136
  [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterInputs<T[K]> : never;
147
137
  };
148
- type InferContractRouterOutputs<T extends AnyContractRouter> = T extends ContractProcedure<any, infer UOutputSchema, any, any> ? SchemaOutput<UOutputSchema> : {
138
+ type InferContractRouterOutputs<T extends AnyContractRouter> = T extends ContractProcedure<any, infer UOutputSchema, any, any> ? InferSchemaOutput<UOutputSchema> : {
149
139
  [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterOutputs<T[K]> : never;
150
140
  };
151
- type ContractRouterToErrorMap<T extends AnyContractRouter> = T extends ContractProcedure<any, any, infer UErrorMap, any> ? UErrorMap : {
152
- [K in keyof T]: T[K] extends AnyContractRouter ? ContractRouterToErrorMap<T[K]> : never;
141
+ type InferContractRouterErrorMap<T extends AnyContractRouter> = T extends ContractProcedure<any, any, infer UErrorMap, any> ? UErrorMap : {
142
+ [K in keyof T]: T[K] extends AnyContractRouter ? InferContractRouterErrorMap<T[K]> : never;
153
143
  }[keyof T];
154
- type ContractRouterToMeta<T extends AnyContractRouter> = T extends ContractRouter<infer UMeta> ? UMeta : never;
144
+ type InferContractRouterMeta<T extends AnyContractRouter> = T extends ContractRouter<infer UMeta> ? UMeta : never;
145
+
146
+ declare function getContractRouter(router: AnyContractRouter, path: readonly string[]): AnyContractRouter | undefined;
147
+ type EnhancedContractRouter<T extends AnyContractRouter, TErrorMap extends ErrorMap> = T extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrors, infer UMeta> ? ContractProcedure<UInputSchema, UOutputSchema, MergedErrorMap<TErrorMap, UErrors>, UMeta> : {
148
+ [K in keyof T]: T[K] extends AnyContractRouter ? EnhancedContractRouter<T[K], TErrorMap> : never;
149
+ };
150
+ interface EnhanceContractRouterOptions<TErrorMap extends ErrorMap> extends EnhanceRouteOptions {
151
+ errorMap: TErrorMap;
152
+ }
153
+ declare function enhanceContractRouter<T extends AnyContractRouter, TErrorMap extends ErrorMap>(router: T, options: EnhanceContractRouterOptions<TErrorMap>): EnhancedContractRouter<T, TErrorMap>;
155
154
 
156
- interface ContractProcedureBuilder<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
155
+ interface ContractProcedureBuilder<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
157
156
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilder<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
158
157
  meta(meta: TMeta): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
159
158
  route(route: Route): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
160
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
161
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
159
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
160
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
162
161
  }
163
- interface ContractProcedureBuilderWithInput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
162
+ interface ContractProcedureBuilderWithInput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
164
163
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
165
164
  meta(meta: TMeta): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
166
165
  route(route: Route): ContractProcedureBuilderWithInput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
167
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithInputOutput<TInputSchema, U, TErrorMap, TMeta>;
166
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInputOutput<TInputSchema, U, TErrorMap, TMeta>;
168
167
  }
169
- interface ContractProcedureBuilderWithOutput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
168
+ interface ContractProcedureBuilderWithOutput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
170
169
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
171
170
  meta(meta: TMeta): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
172
171
  route(route: Route): ContractProcedureBuilderWithOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
173
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInputOutput<U, TOutputSchema, TErrorMap, TMeta>;
172
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInputOutput<U, TOutputSchema, TErrorMap, TMeta>;
174
173
  }
175
- interface ContractProcedureBuilderWithInputOutput<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
174
+ interface ContractProcedureBuilderWithInputOutput<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
176
175
  errors<U extends ErrorMap>(errors: U): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
177
176
  meta(meta: TMeta): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
178
177
  route(route: Route): ContractProcedureBuilderWithInputOutput<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
179
178
  }
180
179
  interface ContractRouterBuilder<TErrorMap extends ErrorMap, TMeta extends Meta> {
181
- '~orpc': AdaptContractRouterOptions<TErrorMap>;
180
+ '~orpc': EnhanceContractRouterOptions<TErrorMap>;
182
181
  'errors'<U extends ErrorMap>(errors: U): ContractRouterBuilder<MergedErrorMap<TErrorMap, U>, TMeta>;
183
182
  'prefix'(prefix: HTTPPath): ContractRouterBuilder<TErrorMap, TMeta>;
184
183
  'tag'(...tags: string[]): ContractRouterBuilder<TErrorMap, TMeta>;
185
- 'router'<T extends ContractRouter<TMeta>>(router: T): AdaptedContractRouter<T, TErrorMap>;
184
+ 'router'<T extends ContractRouter<TMeta>>(router: T): EnhancedContractRouter<T, TErrorMap>;
186
185
  }
187
186
 
188
- interface ContractBuilderDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>, AdaptContractRouterOptions<TErrorMap> {
187
+ interface ContractBuilderDef<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>, EnhanceContractRouterOptions<TErrorMap> {
189
188
  }
190
- declare class ContractBuilder<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
189
+ declare class ContractBuilder<TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap, TMeta extends Meta> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap, TMeta> {
191
190
  '~orpc': ContractBuilderDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
192
191
  constructor(def: ContractBuilderDef<TInputSchema, TOutputSchema, TErrorMap, TMeta>);
193
192
  /**
194
193
  * Reset initial meta
195
194
  */
196
- $meta<U extends Meta>(initialMeta: U): ContractBuilder<TInputSchema, TOutputSchema, TErrorMap, U>;
195
+ $meta<U extends Meta>(initialMeta: U): ContractBuilder<TInputSchema, TOutputSchema, TErrorMap, U & Record<never, never>>;
197
196
  /**
198
197
  * Reset initial route
199
198
  */
@@ -201,33 +200,34 @@ declare class ContractBuilder<TInputSchema extends Schema, TOutputSchema extends
201
200
  errors<U extends ErrorMap>(errors: U): ContractBuilder<TInputSchema, TOutputSchema, MergedErrorMap<TErrorMap, U>, TMeta>;
202
201
  meta(meta: TMeta): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
203
202
  route(route: Route): ContractProcedureBuilder<TInputSchema, TOutputSchema, TErrorMap, TMeta>;
204
- input<U extends Schema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
205
- output<U extends Schema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
203
+ input<U extends AnySchema>(schema: U): ContractProcedureBuilderWithInput<U, TOutputSchema, TErrorMap, TMeta>;
204
+ output<U extends AnySchema>(schema: U): ContractProcedureBuilderWithOutput<TInputSchema, U, TErrorMap, TMeta>;
206
205
  prefix(prefix: HTTPPath): ContractRouterBuilder<TErrorMap, TMeta>;
207
206
  tag(...tags: string[]): ContractRouterBuilder<TErrorMap, TMeta>;
208
- router<T extends ContractRouter<TMeta>>(router: T): AdaptedContractRouter<T, TErrorMap>;
207
+ router<T extends ContractRouter<TMeta>>(router: T): EnhancedContractRouter<T, TErrorMap>;
209
208
  }
210
- declare const oc: ContractBuilder<undefined, undefined, {}, {}>;
209
+ declare const oc: ContractBuilder<Schema<unknown, unknown>, Schema<unknown, unknown>, Record<never, never>, Record<never, never>>;
211
210
 
212
211
  interface ContractConfig {
213
212
  defaultMethod: HTTPMethod;
214
213
  defaultSuccessStatus: number;
215
214
  defaultSuccessDescription: string;
216
215
  defaultInputStructure: InputStructure;
217
- defaultOutputStructure: InputStructure;
216
+ defaultOutputStructure: OutputStructure;
218
217
  }
219
218
  declare function fallbackContractConfig<T extends keyof ContractConfig>(key: T, value: ContractConfig[T] | undefined): ContractConfig[T];
220
219
 
221
- declare function eventIterator<TYieldIn, TYieldOut, TReturnIn = unknown, TReturnOut = unknown>(yields: StandardSchemaV1<TYieldIn, TYieldOut>, returns?: StandardSchemaV1<TReturnIn, TReturnOut>): StandardSchemaV1<AsyncIteratorObject<TYieldIn, TReturnIn, void>, AsyncIteratorObject<TYieldOut, TReturnOut, void>>;
222
- declare function getEventIteratorSchemaDetails(schema: Schema): undefined | {
223
- yields: Schema;
224
- returns: Schema;
225
- };
220
+ interface EventIteratorSchemaDetails {
221
+ yields: AnySchema;
222
+ returns?: AnySchema;
223
+ }
224
+ declare function eventIterator<TYieldIn, TYieldOut, TReturnIn = unknown, TReturnOut = unknown>(yields: Schema<TYieldIn, TYieldOut>, returns?: Schema<TReturnIn, TReturnOut>): Schema<AsyncIteratorObject<TYieldIn, TReturnIn, void>, AsyncIteratorObject<TYieldOut, TReturnOut, void>>;
225
+ declare function getEventIteratorSchemaDetails(schema: AnySchema | undefined): undefined | EventIteratorSchemaDetails;
226
226
 
227
- type ContractProcedureClient<TClientContext extends ClientContext, TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> = Client<TClientContext, SchemaInput<TInputSchema>, SchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>;
227
+ type ContractProcedureClient<TClientContext extends ClientContext, TInputSchema extends AnySchema, TOutputSchema extends AnySchema, TErrorMap extends ErrorMap> = Client<TClientContext, InferSchemaInput<TInputSchema>, InferSchemaOutput<TOutputSchema>, ErrorFromErrorMap<TErrorMap>>;
228
228
 
229
229
  type ContractRouterClient<TRouter extends AnyContractRouter, TClientContext extends ClientContext = Record<never, never>> = TRouter extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrorMap, any> ? ContractProcedureClient<TClientContext, UInputSchema, UOutputSchema, UErrorMap> : {
230
230
  [K in keyof TRouter]: TRouter[K] extends AnyContractRouter ? ContractRouterClient<TRouter[K], TClientContext> : never;
231
231
  };
232
232
 
233
- export { type AdaptContractRouterOptions, type AdaptRouteOptions, type AdaptedContractRouter, type AnyContractProcedure, type AnyContractRouter, ContractBuilder, type ContractBuilderDef, type ContractConfig, ContractProcedure, type ContractProcedureBuilder, type ContractProcedureBuilderWithInput, type ContractProcedureBuilderWithInputOutput, type ContractProcedureBuilderWithOutput, type ContractProcedureClient, type ContractProcedureDef, type ContractRouter, type ContractRouterBuilder, type ContractRouterClient, type ContractRouterToErrorMap, type ContractRouterToMeta, type ErrorFromErrorMap, type ErrorMap, type ErrorMapItem, type HTTPMethod, type HTTPPath, type InferContractRouterInputs, type InferContractRouterOutputs, type InputStructure, type MergedErrorMap, type Meta, type ORPCErrorFromErrorMap, type OutputStructure, type Route, type Schema, type SchemaInput, type SchemaOutput, type TypeRest, ValidationError, type ValidationErrorOptions, adaptContractRouter, adaptRoute, eventIterator, fallbackContractConfig, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
233
+ export { type AnyContractProcedure, type AnyContractRouter, type AnySchema, ContractBuilder, type ContractBuilderDef, type ContractConfig, ContractProcedure, type ContractProcedureBuilder, type ContractProcedureBuilderWithInput, type ContractProcedureBuilderWithInputOutput, type ContractProcedureBuilderWithOutput, type ContractProcedureClient, type ContractProcedureDef, type ContractRouter, type ContractRouterBuilder, type ContractRouterClient, type EnhanceContractRouterOptions, type EnhanceRouteOptions, type EnhancedContractRouter, type ErrorFromErrorMap, type ErrorMap, type ErrorMapItem, type EventIteratorSchemaDetails, type InferContractRouterErrorMap, type InferContractRouterInputs, type InferContractRouterMeta, type InferContractRouterOutputs, type InferSchemaInput, type InferSchemaOutput, type InputStructure, type MergedErrorMap, type Meta, type ORPCErrorFromErrorMap, type OutputStructure, type Route, type Schema, type SchemaIssue, type TypeRest, ValidationError, type ValidationErrorOptions, enhanceContractRouter, enhanceRoute, eventIterator, fallbackContractConfig, getContractRouter, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
package/dist/index.mjs CHANGED
@@ -33,7 +33,7 @@ function isContractProcedure(item) {
33
33
  if (item instanceof ContractProcedure) {
34
34
  return true;
35
35
  }
36
- return (typeof item === "object" || typeof item === "function") && item !== null && "~orpc" in item && typeof item["~orpc"] === "object" && item["~orpc"] !== null && "inputSchema" in item["~orpc"] && "outputSchema" in item["~orpc"] && "errorMap" in item["~orpc"] && "route" in item["~orpc"] && "meta" in item["~orpc"];
36
+ return (typeof item === "object" || typeof item === "function") && item !== null && "~orpc" in item && typeof item["~orpc"] === "object" && item["~orpc"] !== null && "errorMap" in item["~orpc"] && "route" in item["~orpc"] && "meta" in item["~orpc"];
37
37
  }
38
38
 
39
39
  function mergeRoute(a, b) {
@@ -60,31 +60,45 @@ function mergePrefix(a, b) {
60
60
  function mergeTags(a, b) {
61
61
  return a ? [...a, ...b] : b;
62
62
  }
63
- function adaptRoute(route, options) {
63
+ function enhanceRoute(route, options) {
64
64
  let router = route;
65
65
  if (options.prefix) {
66
66
  router = prefixRoute(router, options.prefix);
67
67
  }
68
- if (options.tags) {
68
+ if (options.tags?.length) {
69
69
  router = unshiftTagRoute(router, options.tags);
70
70
  }
71
71
  return router;
72
72
  }
73
73
 
74
- function adaptContractRouter(contract, options) {
75
- if (isContractProcedure(contract)) {
76
- const adapted2 = new ContractProcedure({
77
- ...contract["~orpc"],
78
- errorMap: mergeErrorMap(options.errorMap, contract["~orpc"].errorMap),
79
- route: adaptRoute(contract["~orpc"].route, options)
74
+ function getContractRouter(router, path) {
75
+ let current = router;
76
+ for (let i = 0; i < path.length; i++) {
77
+ const segment = path[i];
78
+ if (!current) {
79
+ return void 0;
80
+ }
81
+ if (isContractProcedure(current)) {
82
+ return void 0;
83
+ }
84
+ current = current[segment];
85
+ }
86
+ return current;
87
+ }
88
+ function enhanceContractRouter(router, options) {
89
+ if (isContractProcedure(router)) {
90
+ const enhanced2 = new ContractProcedure({
91
+ ...router["~orpc"],
92
+ errorMap: mergeErrorMap(options.errorMap, router["~orpc"].errorMap),
93
+ route: enhanceRoute(router["~orpc"].route, options)
80
94
  });
81
- return adapted2;
95
+ return enhanced2;
82
96
  }
83
- const adapted = {};
84
- for (const key in contract) {
85
- adapted[key] = adaptContractRouter(contract[key], options);
97
+ const enhanced = {};
98
+ for (const key in router) {
99
+ enhanced[key] = enhanceContractRouter(router[key], options);
86
100
  }
87
- return adapted;
101
+ return enhanced;
88
102
  }
89
103
 
90
104
  class ContractBuilder extends ContractProcedure {
@@ -154,13 +168,11 @@ class ContractBuilder extends ContractProcedure {
154
168
  });
155
169
  }
156
170
  router(router) {
157
- return adaptContractRouter(router, this["~orpc"]);
171
+ return enhanceContractRouter(router, this["~orpc"]);
158
172
  }
159
173
  }
160
174
  const oc = new ContractBuilder({
161
175
  errorMap: {},
162
- inputSchema: void 0,
163
- outputSchema: void 0,
164
176
  route: {},
165
177
  meta: {}
166
178
  });
@@ -179,16 +191,16 @@ function fallbackContractConfig(key, value) {
179
191
  return value;
180
192
  }
181
193
 
182
- const EVENT_ITERATOR_SCHEMA_SYMBOL = Symbol("ORPC_EVENT_ITERATOR_SCHEMA");
194
+ const EVENT_ITERATOR_DETAILS_SYMBOL = Symbol("ORPC_EVENT_ITERATOR_DETAILS");
183
195
  function eventIterator(yields, returns) {
184
196
  return {
185
197
  "~standard": {
186
- [EVENT_ITERATOR_SCHEMA_SYMBOL]: { yields, returns },
198
+ [EVENT_ITERATOR_DETAILS_SYMBOL]: { yields, returns },
187
199
  vendor: "orpc",
188
200
  version: 1,
189
201
  validate(iterator) {
190
202
  if (!isAsyncIteratorObject(iterator)) {
191
- return { issues: [{ message: "Expect event source iterator", path: [] }] };
203
+ return { issues: [{ message: "Expect event iterator", path: [] }] };
192
204
  }
193
205
  const mapped = mapEventIterator(iterator, {
194
206
  async value(value, done) {
@@ -199,10 +211,10 @@ function eventIterator(yields, returns) {
199
211
  const result = await schema["~standard"].validate(value);
200
212
  if (result.issues) {
201
213
  throw new ORPCError("EVENT_ITERATOR_VALIDATION_FAILED", {
202
- message: "Event source iterator validation failed",
214
+ message: "Event iterator validation failed",
203
215
  cause: new ValidationError({
204
216
  issues: result.issues,
205
- message: "Event source iterator validation failed"
217
+ message: "Event iterator validation failed"
206
218
  })
207
219
  });
208
220
  }
@@ -219,7 +231,7 @@ function getEventIteratorSchemaDetails(schema) {
219
231
  if (schema === void 0) {
220
232
  return void 0;
221
233
  }
222
- return schema["~standard"][EVENT_ITERATOR_SCHEMA_SYMBOL];
234
+ return schema["~standard"][EVENT_ITERATOR_DETAILS_SYMBOL];
223
235
  }
224
236
 
225
237
  function type(...[map]) {
@@ -237,4 +249,4 @@ function type(...[map]) {
237
249
  };
238
250
  }
239
251
 
240
- export { ContractBuilder, ContractProcedure, ValidationError, adaptContractRouter, adaptRoute, eventIterator, fallbackContractConfig, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
252
+ export { ContractBuilder, ContractProcedure, ValidationError, enhanceContractRouter, enhanceRoute, eventIterator, fallbackContractConfig, getContractRouter, getEventIteratorSchemaDetails, isContractProcedure, mergeErrorMap, mergeMeta, mergePrefix, mergeRoute, mergeTags, oc, prefixRoute, type, unshiftTagRoute };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/contract",
3
3
  "type": "module",
4
- "version": "0.0.0-next.a05fbfd",
4
+ "version": "0.0.0-next.a246703",
5
5
  "license": "MIT",
6
6
  "homepage": "https://orpc.unnoq.com",
7
7
  "repository": {
@@ -25,14 +25,14 @@
25
25
  ],
26
26
  "dependencies": {
27
27
  "@standard-schema/spec": "^1.0.0",
28
- "@orpc/shared": "0.0.0-next.a05fbfd",
29
- "@orpc/client": "0.0.0-next.a05fbfd",
30
- "@orpc/standard-server": "0.0.0-next.a05fbfd"
28
+ "@orpc/standard-server": "0.0.0-next.a246703",
29
+ "@orpc/shared": "0.0.0-next.a246703",
30
+ "@orpc/client": "0.0.0-next.a246703"
31
31
  },
32
32
  "devDependencies": {
33
33
  "arktype": "2.0.0-rc.26",
34
34
  "valibot": "1.0.0-beta.9",
35
- "zod": "^3.24.1"
35
+ "zod": "^3.24.2"
36
36
  },
37
37
  "scripts": {
38
38
  "build": "unbuild",