New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@orpc/contract

Package Overview
Dependencies
Maintainers
0
Versions
238
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@orpc/contract - npm Package Compare versions

Comparing version 0.0.0-next.a055cad to 0.0.0-next.a2e4a58

dist/src/client-utils.d.ts

516

dist/index.js
// src/procedure.ts
var ContractProcedure = class {
constructor(zz$cp) {
this.zz$cp = zz$cp;
"~type" = "ContractProcedure";
"~orpc";
constructor(def) {
if (def.route?.successStatus && (def.route.successStatus < 200 || def.route?.successStatus > 299)) {
throw new Error("[ContractProcedure] The successStatus must be between 200 and 299");
}
if (Object.values(def.errorMap ?? {}).some((val) => val && val.status && (val.status < 400 || val.status > 599))) {
throw new Error("[ContractProcedure] The error status code must be in the 400-599 range.");
}
this["~orpc"] = def;
}
};
function isContractProcedure(item) {
if (item instanceof ContractProcedure) {
return true;
}
return (typeof item === "object" || typeof item === "function") && item !== null && "~type" in item && item["~type"] === "ContractProcedure" && "~orpc" in item && typeof item["~orpc"] === "object" && item["~orpc"] !== null && "InputSchema" in item["~orpc"] && "OutputSchema" in item["~orpc"] && "errorMap" in item["~orpc"];
}
// src/procedure-decorated.ts
var DecoratedContractProcedure = class _DecoratedContractProcedure extends ContractProcedure {
static decorate(cp) {
if (cp instanceof _DecoratedContractProcedure)
return cp;
return new _DecoratedContractProcedure(cp.zz$cp);
static decorate(procedure) {
if (procedure instanceof _DecoratedContractProcedure) {
return procedure;
}
return new _DecoratedContractProcedure(procedure["~orpc"]);
}
route(opts) {
errors(errors) {
return new _DecoratedContractProcedure({
...this.zz$cp,
...opts,
method: opts.method,
path: opts.path
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
route(route) {
return new _DecoratedContractProcedure({
...this["~orpc"],
route: {
...this["~orpc"].route,
...route
}
});
}
prefix(prefix) {
if (!this.zz$cp.path)
return this;
return new _DecoratedContractProcedure({
...this.zz$cp,
path: `${prefix}${this.zz$cp.path}`
...this["~orpc"],
...this["~orpc"].route?.path ? {
route: {
...this["~orpc"].route,
path: `${prefix}${this["~orpc"].route.path}`
}
} : void 0
});
}
addTags(...tags) {
if (!tags.length)
return this;
unshiftTag(...tags) {
return new _DecoratedContractProcedure({
...this.zz$cp,
tags: [...this.zz$cp.tags ?? [], ...tags]
...this["~orpc"],
route: {
...this["~orpc"].route,
tags: [
...tags,
...this["~orpc"].route?.tags?.filter((tag) => !tags.includes(tag)) ?? []
]
}
});
}
};
// src/procedure-builder-with-input.ts
var ContractProcedureBuilderWithInput = class _ContractProcedureBuilderWithInput extends ContractProcedure {
errors(errors) {
const decorated = DecoratedContractProcedure.decorate(this).errors(errors);
return new _ContractProcedureBuilderWithInput(decorated["~orpc"]);
}
route(route) {
const decorated = DecoratedContractProcedure.decorate(this).route(route);
return new _ContractProcedureBuilderWithInput(decorated["~orpc"]);
}
prefix(prefix) {
const decorated = DecoratedContractProcedure.decorate(this).prefix(prefix);
return new _ContractProcedureBuilderWithInput(decorated["~orpc"]);
}
unshiftTag(...tags) {
const decorated = DecoratedContractProcedure.decorate(this).unshiftTag(...tags);
return new _ContractProcedureBuilderWithInput(decorated["~orpc"]);
}
output(schema, example) {
return new DecoratedContractProcedure({
...this["~orpc"],
OutputSchema: schema,
outputExample: example
});
}
};
// src/procedure-builder-with-output.ts
var ContractProcedureBuilderWithOutput = class _ContractProcedureBuilderWithOutput extends ContractProcedure {
errors(errors) {
const decorated = DecoratedContractProcedure.decorate(this).errors(errors);
return new _ContractProcedureBuilderWithOutput(decorated["~orpc"]);
}
route(route) {
const decorated = DecoratedContractProcedure.decorate(this).route(route);
return new _ContractProcedureBuilderWithOutput(decorated["~orpc"]);
}
prefix(prefix) {
const decorated = DecoratedContractProcedure.decorate(this).prefix(prefix);
return new _ContractProcedureBuilderWithOutput(decorated["~orpc"]);
}
unshiftTag(...tags) {
const decorated = DecoratedContractProcedure.decorate(this).unshiftTag(...tags);
return new _ContractProcedureBuilderWithOutput(decorated["~orpc"]);
}
input(schema, example) {
return new _DecoratedContractProcedure({
...this.zz$cp,
return new DecoratedContractProcedure({
...this["~orpc"],
InputSchema: schema,

@@ -44,5 +125,32 @@ inputExample: example

}
};
// src/procedure-builder.ts
var ContractProcedureBuilder = class _ContractProcedureBuilder extends ContractProcedure {
errors(errors) {
const decorated = DecoratedContractProcedure.decorate(this).errors(errors);
return new _ContractProcedureBuilder(decorated["~orpc"]);
}
route(route) {
const decorated = DecoratedContractProcedure.decorate(this).route(route);
return new _ContractProcedureBuilder(decorated["~orpc"]);
}
prefix(prefix) {
const decorated = DecoratedContractProcedure.decorate(this).prefix(prefix);
return new _ContractProcedureBuilder(decorated["~orpc"]);
}
unshiftTag(...tags) {
const decorated = DecoratedContractProcedure.decorate(this).unshiftTag(...tags);
return new _ContractProcedureBuilder(decorated["~orpc"]);
}
input(schema, example) {
return new ContractProcedureBuilderWithInput({
...this["~orpc"],
InputSchema: schema,
inputExample: example
});
}
output(schema, example) {
return new _DecoratedContractProcedure({
...this.zz$cp,
return new ContractProcedureBuilderWithOutput({
...this["~orpc"],
OutputSchema: schema,

@@ -53,44 +161,48 @@ outputExample: example

};
function isContractProcedure(item) {
if (item instanceof ContractProcedure)
return true;
return (typeof item === "object" || typeof item === "function") && item !== null && "zz$cp" in item && typeof item.zz$cp === "object" && item.zz$cp !== null && "InputSchema" in item.zz$cp && "OutputSchema" in item.zz$cp;
}
// src/router-builder.ts
var ContractRouterBuilder = class _ContractRouterBuilder {
constructor(zz$crb) {
this.zz$crb = zz$crb;
if (zz$crb.prefix && zz$crb.prefix.includes("{")) {
throw new Error('Prefix cannot contain "{" for dynamic routing');
}
"~type" = "ContractProcedure";
"~orpc";
constructor(def) {
this["~orpc"] = def;
}
prefix(prefix) {
return new _ContractRouterBuilder({
...this.zz$crb,
prefix: `${this.zz$crb.prefix ?? ""}${prefix}`
...this["~orpc"],
prefix: `${this["~orpc"].prefix ?? ""}${prefix}`
});
}
tags(...tags) {
if (!tags.length)
return this;
tag(...tags) {
return new _ContractRouterBuilder({
...this.zz$crb,
tags: [...this.zz$crb.tags ?? [], ...tags]
...this["~orpc"],
tags: [...this["~orpc"].tags ?? [], ...tags]
});
}
errors(errors) {
return new _ContractRouterBuilder({
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
router(router) {
const handled = {};
for (const key in router) {
const item = router[key];
if (isContractProcedure(item)) {
const decorated = DecoratedContractProcedure.decorate(item).addTags(
...this.zz$crb.tags ?? []
);
handled[key] = this.zz$crb.prefix ? decorated.prefix(this.zz$crb.prefix) : decorated;
} else {
handled[key] = this.router(item);
if (isContractProcedure(router)) {
let decorated = DecoratedContractProcedure.decorate(router);
if (this["~orpc"].tags) {
decorated = decorated.unshiftTag(...this["~orpc"].tags);
}
if (this["~orpc"].prefix) {
decorated = decorated.prefix(this["~orpc"].prefix);
}
decorated = decorated.errors(this["~orpc"].errorMap);
return decorated;
}
return handled;
const adapted = {};
for (const key in router) {
adapted[key] = this.router(router[key]);
}
return adapted;
}

@@ -100,83 +212,295 @@ };

// src/builder.ts
var ContractBuilder = class {
prefix(prefix) {
return new ContractRouterBuilder({
prefix
var ContractBuilder = class _ContractBuilder extends ContractProcedure {
constructor(def) {
super(def);
}
config(config) {
return new _ContractBuilder({
...this["~orpc"],
config: {
...this["~orpc"].config,
...config
}
});
}
tags(...tags) {
return new ContractRouterBuilder({
tags
errors(errors) {
return new _ContractBuilder({
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
route(opts) {
return new DecoratedContractProcedure({
route(route) {
return new ContractProcedureBuilder({
route: {
...this["~orpc"].config.initialRoute,
...route
},
InputSchema: void 0,
OutputSchema: void 0,
...opts
errorMap: this["~orpc"].errorMap
});
}
input(schema, example) {
return new DecoratedContractProcedure({
return new ContractProcedureBuilderWithInput({
route: this["~orpc"].config.initialRoute,
InputSchema: schema,
inputExample: example,
OutputSchema: void 0
OutputSchema: void 0,
errorMap: this["~orpc"].errorMap
});
}
output(schema, example) {
return new DecoratedContractProcedure({
return new ContractProcedureBuilderWithOutput({
route: this["~orpc"].config.initialRoute,
OutputSchema: schema,
outputExample: example,
InputSchema: void 0,
OutputSchema: schema,
outputExample: example
errorMap: this["~orpc"].errorMap
});
}
prefix(prefix) {
return new ContractRouterBuilder({
prefix,
errorMap: this["~orpc"].errorMap
});
}
tag(...tags) {
return new ContractRouterBuilder({
tags,
errorMap: this["~orpc"].errorMap
});
}
router(router) {
return router;
return new ContractRouterBuilder({
errorMap: this["~orpc"].errorMap
}).router(router);
}
};
// src/constants.ts
var ORPC_HEADER = "x-orpc-transformer";
var ORPC_HEADER_VALUE = "t";
// src/error-orpc.ts
import { isPlainObject } from "@orpc/shared";
var COMMON_ORPC_ERROR_DEFS = {
BAD_REQUEST: {
status: 400,
message: "Bad Request"
},
UNAUTHORIZED: {
status: 401,
message: "Unauthorized"
},
FORBIDDEN: {
status: 403,
message: "Forbidden"
},
NOT_FOUND: {
status: 404,
message: "Not Found"
},
METHOD_NOT_SUPPORTED: {
status: 405,
message: "Method Not Supported"
},
NOT_ACCEPTABLE: {
status: 406,
message: "Not Acceptable"
},
TIMEOUT: {
status: 408,
message: "Request Timeout"
},
CONFLICT: {
status: 409,
message: "Conflict"
},
PRECONDITION_FAILED: {
status: 412,
message: "Precondition Failed"
},
PAYLOAD_TOO_LARGE: {
status: 413,
message: "Payload Too Large"
},
UNSUPPORTED_MEDIA_TYPE: {
status: 415,
message: "Unsupported Media Type"
},
UNPROCESSABLE_CONTENT: {
status: 422,
message: "Unprocessable Content"
},
TOO_MANY_REQUESTS: {
status: 429,
message: "Too Many Requests"
},
CLIENT_CLOSED_REQUEST: {
status: 499,
message: "Client Closed Request"
},
INTERNAL_SERVER_ERROR: {
status: 500,
message: "Internal Server Error"
},
NOT_IMPLEMENTED: {
status: 501,
message: "Not Implemented"
},
BAD_GATEWAY: {
status: 502,
message: "Bad Gateway"
},
SERVICE_UNAVAILABLE: {
status: 503,
message: "Service Unavailable"
},
GATEWAY_TIMEOUT: {
status: 504,
message: "Gateway Timeout"
}
};
function fallbackORPCErrorStatus(code, status) {
return status ?? COMMON_ORPC_ERROR_DEFS[code]?.status ?? 500;
}
function fallbackORPCErrorMessage(code, message) {
return message || COMMON_ORPC_ERROR_DEFS[code]?.message || code;
}
var ORPCError = class extends Error {
defined;
code;
status;
data;
constructor(options) {
if (options.status && (options.status < 400 || options.status >= 600)) {
throw new Error("[ORPCError] The error status code must be in the 400-599 range.");
}
const message = fallbackORPCErrorMessage(options.code, options.message);
super(message, options);
this.code = options.code;
this.status = fallbackORPCErrorStatus(options.code, options.status);
this.defined = options.defined ?? false;
this.data = options.data;
}
toJSON() {
return {
defined: this.defined,
code: this.code,
status: this.status,
message: this.message,
data: this.data
};
}
static isValidJSON(json) {
return isPlainObject(json) && "defined" in json && typeof json.defined === "boolean" && "code" in json && typeof json.code === "string" && "status" in json && typeof json.status === "number" && "message" in json && typeof json.message === "string";
}
};
function isDefinedError(error) {
return error instanceof ORPCError && error.defined;
}
async function validateORPCError(map, error) {
const { code, status, message, data, cause, defined } = error;
const config = map?.[error.code];
if (!config || fallbackORPCErrorStatus(error.code, config.status) !== error.status) {
return defined ? new ORPCError({ defined: false, code, status, message, data, cause }) : error;
}
if (!config.data) {
return defined ? error : new ORPCError({ defined: true, code, status, message, data, cause });
}
const validated = await config.data["~standard"].validate(error.data);
if (validated.issues) {
return defined ? new ORPCError({ defined: false, code, status, message, data, cause }) : error;
}
return new ORPCError({
defined: true,
code,
status,
message,
data: validated.value,
cause
});
}
// src/router.ts
function eachContractRouterLeaf(router, callback, prefix = []) {
for (const key in router) {
const item = router[key];
if (isContractProcedure(item)) {
callback(item, [...prefix, key]);
} else {
eachContractRouterLeaf(item, callback, [...prefix, key]);
// src/client-utils.ts
async function safe(promise) {
try {
const output = await promise;
return [output, void 0, false];
} catch (e) {
const error = e;
if (isDefinedError(error)) {
return [void 0, error, true];
}
return [void 0, error, false];
}
}
// src/utils.ts
function standardizeHTTPPath(path) {
return `/${path.replace(/\/{2,}/g, "/").replace(/^\/|\/$/g, "")}`;
// src/config.ts
var DEFAULT_CONFIG = {
defaultMethod: "POST",
defaultSuccessStatus: 200,
defaultSuccessDescription: "OK",
defaultInputStructure: "compact",
defaultOutputStructure: "compact"
};
function fallbackContractConfig(key, value) {
if (value === void 0) {
return DEFAULT_CONFIG[key];
}
return value;
}
function prefixHTTPPath(prefix, path) {
const prefix_ = standardizeHTTPPath(prefix);
const path_ = standardizeHTTPPath(path);
if (prefix_ === "/")
return path_;
if (path_ === "/")
return prefix_;
return `${prefix_}${path_}`;
// src/error.ts
var ValidationError = class extends Error {
issues;
constructor(options) {
super(options.message, options);
this.issues = options.issues;
}
};
// src/schema-utils.ts
function type(...[map]) {
return {
"~standard": {
vendor: "custom",
version: 1,
async validate(value) {
if (map) {
return { value: await map(value) };
}
return { value };
}
}
};
}
// src/index.ts
var oc = new ContractBuilder();
var oc = new ContractBuilder({
errorMap: {},
InputSchema: void 0,
OutputSchema: void 0,
config: {}
});
export {
COMMON_ORPC_ERROR_DEFS,
ContractBuilder,
ContractProcedure,
ContractProcedureBuilder,
ContractProcedureBuilderWithInput,
ContractProcedureBuilderWithOutput,
ContractRouterBuilder,
DecoratedContractProcedure,
ORPC_HEADER,
ORPC_HEADER_VALUE,
eachContractRouterLeaf,
ORPCError,
ValidationError,
fallbackContractConfig,
fallbackORPCErrorMessage,
fallbackORPCErrorStatus,
isContractProcedure,
isDefinedError,
oc,
prefixHTTPPath,
standardizeHTTPPath
safe,
type,
validateORPCError
};
//# sourceMappingURL=index.js.map

32

dist/src/builder.d.ts

@@ -0,13 +1,29 @@

import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions, StrictErrorMap } from './error-map';
import type { ContractProcedureDef, RouteOptions } from './procedure';
import type { ContractRouter } from './router';
import type { AdaptedContractRouter } from './router-builder';
import type { HTTPPath, Schema, SchemaInput, SchemaOutput } from './types';
import { DecoratedContractProcedure, type RouteOptions } from './procedure';
import { ContractProcedure } from './procedure';
import { ContractProcedureBuilder } from './procedure-builder';
import { ContractProcedureBuilderWithInput } from './procedure-builder-with-input';
import { ContractProcedureBuilderWithOutput } from './procedure-builder-with-output';
import { ContractRouterBuilder } from './router-builder';
export declare class ContractBuilder {
prefix(prefix: HTTPPath): ContractRouterBuilder;
tags(...tags: string[]): ContractRouterBuilder;
route(opts: RouteOptions): DecoratedContractProcedure<undefined, undefined>;
input<USchema extends Schema>(schema: USchema, example?: SchemaInput<USchema>): DecoratedContractProcedure<USchema, undefined>;
output<USchema extends Schema>(schema: USchema, example?: SchemaOutput<USchema>): DecoratedContractProcedure<undefined, USchema>;
router<T extends ContractRouter>(router: T): T;
export interface ContractBuilderConfig {
initialRoute?: RouteOptions;
}
export interface ContractBuilderDef<TErrorMap extends ErrorMap> extends ContractProcedureDef<undefined, undefined, TErrorMap> {
config: ContractBuilderConfig;
}
export declare class ContractBuilder<TErrorMap extends ErrorMap> extends ContractProcedure<undefined, undefined, TErrorMap> {
'~orpc': ContractBuilderDef<TErrorMap>;
constructor(def: ContractBuilderDef<TErrorMap>);
config(config: ContractBuilderConfig): ContractBuilder<TErrorMap>;
errors<const U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): ContractBuilder<U & TErrorMap>;
route(route: RouteOptions): ContractProcedureBuilder<TErrorMap>;
input<U extends Schema>(schema: U, example?: SchemaInput<U>): ContractProcedureBuilderWithInput<U, TErrorMap>;
output<U extends Schema>(schema: U, example?: SchemaOutput<U>): ContractProcedureBuilderWithOutput<U, TErrorMap>;
prefix(prefix: HTTPPath): ContractRouterBuilder<TErrorMap>;
tag(...tags: string[]): ContractRouterBuilder<TErrorMap>;
router<T extends ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>(router: T): AdaptedContractRouter<T, TErrorMap>;
}
//# sourceMappingURL=builder.d.ts.map
/** unnoq */
import { ContractBuilder } from './builder';
export * from './builder';
export * from './constants';
export * from './client';
export * from './client-utils';
export * from './config';
export * from './error';
export * from './error-map';
export * from './error-orpc';
export * from './procedure';
export * from './procedure-builder';
export * from './procedure-builder-with-input';
export * from './procedure-builder-with-output';
export * from './procedure-client';
export * from './procedure-decorated';
export * from './router';
export * from './router-builder';
export * from './router-client';
export * from './schema-utils';
export * from './types';
export * from './utils';
export declare const oc: ContractBuilder;
export declare const oc: ContractBuilder<Record<never, never>>;
//# sourceMappingURL=index.d.ts.map

@@ -1,2 +0,3 @@

import type { HTTPMethod, HTTPPath, Schema, SchemaInput, SchemaOutput } from './types';
import type { ErrorMap } from './error-map';
import type { HTTPMethod, HTTPPath, InputStructure, OutputStructure, Schema, SchemaOutput } from './types';
export interface RouteOptions {

@@ -8,41 +9,76 @@ method?: HTTPMethod;

deprecated?: boolean;
tags?: string[];
tags?: readonly string[];
/**
* The status code of the response when the procedure is successful.
*
* @default 200
*/
successStatus?: number;
/**
* The description of the response when the procedure is successful.
*
* @default 'OK'
*/
successDescription?: string;
/**
* Determines how the input should be structured based on `params`, `query`, `headers`, and `body`.
*
* @option 'compact'
* Combines `params` and either `query` or `body` (depending on the HTTP method) into a single object.
*
* @option 'detailed'
* Keeps each part of the request (`params`, `query`, `headers`, and `body`) as separate fields in the input object.
*
* Example:
* ```ts
* const input = {
* params: { id: 1 },
* query: { search: 'hello' },
* headers: { 'Content-Type': 'application/json' },
* body: { name: 'John' },
* }
* ```
*
* @default 'compact'
*/
inputStructure?: InputStructure;
/**
* Determines how the response should be structured based on the output.
*
* @option 'compact'
* Includes only the body data, encoded directly in the response.
*
* @option 'detailed'
* Separates the output into `headers` and `body` fields.
* - `headers`: Custom headers to merge with the response headers.
* - `body`: The response data.
*
* Example:
* ```ts
* const output = {
* headers: { 'x-custom-header': 'value' },
* body: { message: 'Hello, world!' },
* };
* ```
*
* @default 'compact'
*/
outputStructure?: OutputStructure;
}
export declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema> {
zz$cp: {
path?: HTTPPath;
method?: HTTPMethod;
summary?: string;
description?: string;
deprecated?: boolean;
tags?: string[];
InputSchema: TInputSchema;
inputExample?: SchemaOutput<TInputSchema>;
OutputSchema: TOutputSchema;
outputExample?: SchemaOutput<TOutputSchema>;
};
constructor(zz$cp: {
path?: HTTPPath;
method?: HTTPMethod;
summary?: string;
description?: string;
deprecated?: boolean;
tags?: string[];
InputSchema: TInputSchema;
inputExample?: SchemaOutput<TInputSchema>;
OutputSchema: TOutputSchema;
outputExample?: SchemaOutput<TOutputSchema>;
});
export interface ContractProcedureDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
route?: RouteOptions;
InputSchema: TInputSchema;
inputExample?: SchemaOutput<TInputSchema>;
OutputSchema: TOutputSchema;
outputExample?: SchemaOutput<TOutputSchema>;
errorMap: TErrorMap;
}
export type WELL_CONTRACT_PROCEDURE = ContractProcedure<Schema, Schema>;
export declare class DecoratedContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema> extends ContractProcedure<TInputSchema, TOutputSchema> {
static decorate<TInputSchema extends Schema, TOutputSchema extends Schema>(cp: ContractProcedure<TInputSchema, TOutputSchema>): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
route(opts: RouteOptions): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
prefix(prefix: HTTPPath): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
addTags(...tags: string[]): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
input<USchema extends Schema>(schema: USchema, example?: SchemaInput<USchema>): DecoratedContractProcedure<USchema, TOutputSchema>;
output<USchema extends Schema>(schema: USchema, example?: SchemaOutput<USchema>): DecoratedContractProcedure<TInputSchema, USchema>;
export declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
'~type': "ContractProcedure";
'~orpc': ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap>;
constructor(def: ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap>);
}
export type WELL_DEFINED_CONTRACT_PROCEDURE = ContractProcedure<Schema, Schema>;
export declare function isContractProcedure(item: unknown): item is WELL_DEFINED_CONTRACT_PROCEDURE;
export type ANY_CONTRACT_PROCEDURE = ContractProcedure<any, any, any>;
export type WELL_CONTRACT_PROCEDURE = ContractProcedure<Schema, Schema, ErrorMap>;
export declare function isContractProcedure(item: unknown): item is ANY_CONTRACT_PROCEDURE;
//# sourceMappingURL=procedure.d.ts.map

@@ -1,16 +0,23 @@

import type { ContractRouter, HandledContractRouter } from './router';
import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions, StrictErrorMap } from './error-map';
import type { ContractProcedure } from './procedure';
import type { ContractRouter } from './router';
import type { HTTPPath } from './types';
export declare class ContractRouterBuilder {
zz$crb: {
prefix?: HTTPPath;
tags?: string[];
};
constructor(zz$crb: {
prefix?: HTTPPath;
tags?: string[];
});
prefix(prefix: HTTPPath): ContractRouterBuilder;
tags(...tags: string[]): ContractRouterBuilder;
router<T extends ContractRouter>(router: T): HandledContractRouter<T>;
import { DecoratedContractProcedure } from './procedure-decorated';
export type AdaptedContractRouter<TContract extends ContractRouter<any>, TErrorMapExtra extends ErrorMap> = {
[K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema, infer UErrors> ? DecoratedContractProcedure<UInputSchema, UOutputSchema, UErrors & TErrorMapExtra> : TContract[K] extends ContractRouter<any> ? AdaptedContractRouter<TContract[K], TErrorMapExtra> : never;
};
export interface ContractRouterBuilderDef<TErrorMap extends ErrorMap> {
prefix?: HTTPPath;
tags?: string[];
errorMap: TErrorMap;
}
export declare class ContractRouterBuilder<TErrorMap extends ErrorMap> {
'~type': "ContractProcedure";
'~orpc': ContractRouterBuilderDef<TErrorMap>;
constructor(def: ContractRouterBuilderDef<TErrorMap>);
prefix(prefix: HTTPPath): ContractRouterBuilder<TErrorMap>;
tag(...tags: string[]): ContractRouterBuilder<TErrorMap>;
errors<const U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): ContractRouterBuilder<U & TErrorMap>;
router<T extends ContractRouter<ErrorMap & Partial<StrictErrorMap<TErrorMap>>>>(router: T): AdaptedContractRouter<T, TErrorMap>;
}
//# sourceMappingURL=router-builder.d.ts.map

@@ -0,16 +1,13 @@

import type { ErrorMap } from './error-map';
import type { ContractProcedure } from './procedure';
import type { SchemaInput, SchemaOutput } from './types';
import { type ContractProcedure, type DecoratedContractProcedure, type WELL_DEFINED_CONTRACT_PROCEDURE } from './procedure';
export interface ContractRouter {
[k: string]: ContractProcedure<any, any> | ContractRouter;
}
export type HandledContractRouter<TContract extends ContractRouter> = {
[K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? DecoratedContractProcedure<UInputSchema, UOutputSchema> : TContract[K] extends ContractRouter ? HandledContractRouter<TContract[K]> : never;
export type ContractRouter<T extends ErrorMap> = ContractProcedure<any, any, T> | {
[k: string]: ContractRouter<T>;
};
export declare function eachContractRouterLeaf(router: ContractRouter, callback: (item: WELL_DEFINED_CONTRACT_PROCEDURE, path: string[]) => void, prefix?: string[]): void;
export type InferContractRouterInputs<T extends ContractRouter> = {
[K in keyof T]: T[K] extends ContractProcedure<infer UInputSchema, any> ? SchemaInput<UInputSchema> : T[K] extends ContractRouter ? InferContractRouterInputs<T[K]> : never;
export type InferContractRouterInputs<T extends ContractRouter<any>> = T extends ContractProcedure<infer UInputSchema, any, any> ? SchemaInput<UInputSchema> : {
[K in keyof T]: T[K] extends ContractRouter<any> ? InferContractRouterInputs<T[K]> : never;
};
export type InferContractRouterOutputs<T extends ContractRouter> = {
[K in keyof T]: T[K] extends ContractProcedure<any, infer UOutputSchema> ? SchemaOutput<UOutputSchema> : T[K] extends ContractRouter ? InferContractRouterOutputs<T[K]> : never;
export type InferContractRouterOutputs<T extends ContractRouter<any>> = T extends ContractProcedure<any, infer UOutputSchema, any> ? SchemaOutput<UOutputSchema> : {
[K in keyof T]: T[K] extends ContractRouter<any> ? InferContractRouterOutputs<T[K]> : never;
};
//# sourceMappingURL=router.d.ts.map

@@ -1,8 +0,11 @@

import type { input, output, ZodType } from 'zod';
import type { FindGlobalInstanceType } from '@orpc/shared';
import type { StandardSchemaV1 } from '@standard-schema/spec';
export type HTTPPath = `/${string}`;
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
export type HTTPStatus = number;
export type Schema = ZodType<any, any, any> | undefined;
export type SchemaInput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends ZodType<any, any, any> ? input<TSchema> : TFallback;
export type SchemaOutput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends ZodType<any, any, any> ? output<TSchema> : TFallback;
export type InputStructure = 'compact' | 'detailed';
export type OutputStructure = 'compact' | 'detailed';
export type Schema = StandardSchemaV1 | undefined;
export type SchemaInput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<TSchema> : TFallback;
export type SchemaOutput<TSchema extends Schema, TFallback = unknown> = TSchema extends undefined ? TFallback : TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TSchema> : TFallback;
export type AbortSignal = FindGlobalInstanceType<'AbortSignal'>;
//# sourceMappingURL=types.d.ts.map
{
"name": "@orpc/contract",
"type": "module",
"version": "0.0.0-next.a055cad",
"version": "0.0.0-next.a2e4a58",
"license": "MIT",

@@ -31,8 +31,11 @@ "homepage": "https://orpc.unnoq.com",

],
"peerDependencies": {
"zod": ">=3.23.0"
},
"dependencies": {
"@orpc/shared": "0.0.0-next.a055cad"
"@standard-schema/spec": "1.0.0-beta.4",
"@orpc/shared": "0.0.0-next.a2e4a58"
},
"devDependencies": {
"arktype": "2.0.0-rc.26",
"valibot": "1.0.0-beta.9",
"zod": "3.24.1"
},
"scripts": {

@@ -39,0 +42,0 @@ "build": "tsup --clean --sourcemap --entry.index=src/index.ts --format=esm --onSuccess='tsc -b --noCheck'",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc