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.c29cb6d to 0.0.0-next.c4a591c

dist/src/client-utils.d.ts

270

dist/index.js

@@ -6,2 +6,8 @@ // src/procedure.ts

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;

@@ -14,3 +20,3 @@ }

}
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"];
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"];
}

@@ -29,3 +35,6 @@

...this["~orpc"],
route
route: {
...this["~orpc"].route,
...route
}
});

@@ -70,2 +79,11 @@ }

}
errors(errors) {
return new _DecoratedContractProcedure({
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
};

@@ -92,2 +110,11 @@

}
errors(errors) {
return new _ContractRouterBuilder({
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
router(router) {

@@ -102,2 +129,3 @@ if (isContractProcedure(router)) {

}
decorated = decorated.errors(this["~orpc"].errorMap);
return decorated;

@@ -114,6 +142,16 @@ }

// src/builder.ts
var ContractBuilder = class {
var ContractBuilder = class _ContractBuilder extends ContractProcedure {
errors(errors) {
return new _ContractBuilder({
...this["~orpc"],
errorMap: {
...this["~orpc"].errorMap,
...errors
}
});
}
prefix(prefix) {
return new ContractRouterBuilder({
prefix
prefix,
errorMap: this["~orpc"].errorMap
});

@@ -123,3 +161,4 @@ }

return new ContractRouterBuilder({
tags
tags,
errorMap: this["~orpc"].errorMap
});

@@ -131,3 +170,4 @@ }

InputSchema: void 0,
OutputSchema: void 0
OutputSchema: void 0,
errorMap: this["~orpc"].errorMap
});

@@ -139,3 +179,4 @@ }

inputExample: example,
OutputSchema: void 0
OutputSchema: void 0,
errorMap: this["~orpc"].errorMap
});

@@ -147,13 +188,211 @@ }

outputExample: example,
InputSchema: void 0
InputSchema: void 0,
errorMap: this["~orpc"].errorMap
});
}
router(router) {
return router;
return new ContractRouterBuilder({
errorMap: this["~orpc"].errorMap
}).router(router);
}
};
// 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/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/config.ts
var DEFAULT_CONFIG = {
defaultMethod: "POST",
defaultSuccessStatus: 200,
defaultSuccessDescription: "OK",
defaultInputStructure: "compact",
defaultOutputStructure: "compact"
};
var GLOBAL_CONFIG_REF = { value: DEFAULT_CONFIG };
function configGlobal(config) {
if (config.defaultSuccessStatus !== void 0 && (config.defaultSuccessStatus < 200 || config.defaultSuccessStatus > 299)) {
throw new Error("[configGlobal] The defaultSuccessStatus must be between 200 and 299");
}
GLOBAL_CONFIG_REF.value = config;
}
function fallbackToGlobalConfig(key, value) {
if (value === void 0) {
const fallback = GLOBAL_CONFIG_REF.value[key];
if (fallback === void 0) {
return DEFAULT_CONFIG[key];
}
return fallback;
}
return value;
}
// src/error.ts
var ValidationError = class extends Error {
issues;
constructor(options) {
super(options.message, options);
this.issues = options.issues;
}
};
// src/index.ts
var oc = new ContractBuilder();
var oc = new ContractBuilder({
errorMap: {},
InputSchema: void 0,
OutputSchema: void 0
});
export {
COMMON_ORPC_ERROR_DEFS,
ContractBuilder,

@@ -163,5 +402,14 @@ ContractProcedure,

DecoratedContractProcedure,
ORPCError,
ValidationError,
configGlobal,
fallbackORPCErrorMessage,
fallbackORPCErrorStatus,
fallbackToGlobalConfig,
isContractProcedure,
oc
isDefinedError,
oc,
safe,
validateORPCError
};
//# sourceMappingURL=index.js.map

22

dist/src/builder.d.ts

@@ -1,14 +0,20 @@

import type { RouteOptions } from './procedure';
import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions, StrictErrorMap } from './error-map';
import type { ContractRouter } from './router';
import type { AdaptedContractRouter } from './router-builder';
import type { HTTPPath, Schema, SchemaInput, SchemaOutput } from './types';
import { ContractProcedure, type RouteOptions } from './procedure';
import { DecoratedContractProcedure } from './procedure-decorated';
import { ContractRouterBuilder } from './router-builder';
export declare class ContractBuilder {
prefix(prefix: HTTPPath): ContractRouterBuilder;
tag(...tags: string[]): ContractRouterBuilder;
route(route: RouteOptions): DecoratedContractProcedure<undefined, undefined>;
input<U extends Schema = undefined>(schema: U, example?: SchemaInput<U>): DecoratedContractProcedure<U, undefined>;
output<U extends Schema = undefined>(schema: U, example?: SchemaOutput<U>): DecoratedContractProcedure<undefined, U>;
router<T extends ContractRouter>(router: T): T;
export type ContractBuilderDef<TErrorMap extends ErrorMap> = {
errorMap: TErrorMap;
};
export declare class ContractBuilder<TErrorMap extends ErrorMap> extends ContractProcedure<undefined, undefined, TErrorMap> {
errors<const U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): ContractBuilder<U & TErrorMap>;
prefix(prefix: HTTPPath): ContractRouterBuilder<TErrorMap>;
tag(...tags: string[]): ContractRouterBuilder<TErrorMap>;
route(route: RouteOptions): DecoratedContractProcedure<undefined, undefined, TErrorMap>;
input<U extends Schema>(schema: U, example?: SchemaInput<U>): DecoratedContractProcedure<U, undefined, TErrorMap>;
output<U extends Schema>(schema: U, example?: SchemaOutput<U>): DecoratedContractProcedure<undefined, U, 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 './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-client';
export * from './procedure-decorated';
export * from './router';
export * from './router-builder';
export * from './router-client';
export * from './types';
export declare const oc: ContractBuilder;
export declare const oc: ContractBuilder<Record<never, never>>;
//# sourceMappingURL=index.d.ts.map

@@ -0,12 +1,14 @@

import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions } from './error-map';
import type { RouteOptions } from './procedure';
import type { HTTPPath, Schema, SchemaInput, SchemaOutput } from './types';
import { ContractProcedure } from './procedure';
export declare class DecoratedContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema> extends ContractProcedure<TInputSchema, TOutputSchema> {
static decorate<UInputSchema extends Schema = undefined, UOutputSchema extends Schema = undefined>(procedure: ContractProcedure<UInputSchema, UOutputSchema>): DecoratedContractProcedure<UInputSchema, UOutputSchema>;
route(route: RouteOptions): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
prefix(prefix: HTTPPath): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
unshiftTag(...tags: string[]): DecoratedContractProcedure<TInputSchema, TOutputSchema>;
input<U extends Schema = undefined>(schema: U, example?: SchemaInput<U>): DecoratedContractProcedure<U, TOutputSchema>;
output<U extends Schema = undefined>(schema: U, example?: SchemaOutput<U>): DecoratedContractProcedure<TInputSchema, U>;
export declare class DecoratedContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> extends ContractProcedure<TInputSchema, TOutputSchema, TErrorMap> {
static decorate<UInputSchema extends Schema, UOutputSchema extends Schema, TErrorMap extends ErrorMap>(procedure: ContractProcedure<UInputSchema, UOutputSchema, TErrorMap>): DecoratedContractProcedure<UInputSchema, UOutputSchema, TErrorMap>;
route(route: RouteOptions): DecoratedContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
prefix(prefix: HTTPPath): DecoratedContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
unshiftTag(...tags: string[]): DecoratedContractProcedure<TInputSchema, TOutputSchema, TErrorMap>;
input<U extends Schema>(schema: U, example?: SchemaInput<U>): DecoratedContractProcedure<U, TOutputSchema, TErrorMap>;
output<U extends Schema>(schema: U, example?: SchemaOutput<U>): DecoratedContractProcedure<TInputSchema, U, TErrorMap>;
errors<const U extends ErrorMap & ErrorMapGuard<TErrorMap> & ErrorMapSuggestions>(errors: U): DecoratedContractProcedure<TInputSchema, TOutputSchema, TErrorMap & U>;
}
//# sourceMappingURL=procedure-decorated.d.ts.map

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

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

@@ -9,4 +10,60 @@ method?: HTTPMethod;

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 interface ContractProcedureDef<TInputSchema extends Schema, TOutputSchema extends Schema> {
export interface ContractProcedureDef<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
route?: RouteOptions;

@@ -17,11 +74,12 @@ InputSchema: TInputSchema;

outputExample?: SchemaOutput<TOutputSchema>;
errorMap: TErrorMap;
}
export declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema> {
export declare class ContractProcedure<TInputSchema extends Schema, TOutputSchema extends Schema, TErrorMap extends ErrorMap> {
'~type': "ContractProcedure";
'~orpc': ContractProcedureDef<TInputSchema, TOutputSchema>;
constructor(def: ContractProcedureDef<TInputSchema, TOutputSchema>);
'~orpc': ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap>;
constructor(def: ContractProcedureDef<TInputSchema, TOutputSchema, TErrorMap>);
}
export type ANY_CONTRACT_PROCEDURE = ContractProcedure<any, any>;
export type WELL_CONTRACT_PROCEDURE = ContractProcedure<Schema, Schema>;
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

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

import type { ErrorMap, ErrorMapGuard, ErrorMapSuggestions, StrictErrorMap } from './error-map';
import type { ContractProcedure } from './procedure';

@@ -5,17 +6,19 @@ import type { ContractRouter } from './router';

import { DecoratedContractProcedure } from './procedure-decorated';
export type AdaptedContractRouter<TContract extends ContractRouter> = {
[K in keyof TContract]: TContract[K] extends ContractProcedure<infer UInputSchema, infer UOutputSchema> ? DecoratedContractProcedure<UInputSchema, UOutputSchema> : TContract[K] extends ContractRouter ? AdaptedContractRouter<TContract[K]> : never;
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 {
export interface ContractRouterBuilderDef<TErrorMap extends ErrorMap> {
prefix?: HTTPPath;
tags?: string[];
errorMap: TErrorMap;
}
export declare class ContractRouterBuilder {
export declare class ContractRouterBuilder<TErrorMap extends ErrorMap> {
'~type': "ContractProcedure";
'~orpc': ContractRouterBuilderDef;
constructor(def: ContractRouterBuilderDef);
prefix(prefix: HTTPPath): ContractRouterBuilder;
tag(...tags: string[]): ContractRouterBuilder;
router<T extends ContractRouter>(router: T): AdaptedContractRouter<T>;
'~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

@@ -1,12 +0,13 @@

import type { ANY_CONTRACT_PROCEDURE, ContractProcedure } from './procedure';
import type { ErrorMap } from './error-map';
import type { ContractProcedure } from './procedure';
import type { SchemaInput, SchemaOutput } from './types';
export type ContractRouter = ANY_CONTRACT_PROCEDURE | {
[k: string]: ContractRouter;
export type ContractRouter<T extends ErrorMap> = ContractProcedure<any, any, T> | {
[k: string]: ContractRouter<T>;
};
export type InferContractRouterInputs<T extends ContractRouter> = T extends ContractProcedure<infer UInputSchema, any> ? SchemaInput<UInputSchema> : {
[K in keyof T]: 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> = T extends ContractProcedure<any, infer UOutputSchema> ? SchemaOutput<UOutputSchema> : {
[K in keyof T]: 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

@@ -0,7 +1,11 @@

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 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.c29cb6d",
"version": "0.0.0-next.c4a591c",
"license": "MIT",

@@ -33,3 +33,3 @@ "homepage": "https://orpc.unnoq.com",

"@standard-schema/spec": "1.0.0-beta.4",
"@orpc/shared": "0.0.0-next.c29cb6d"
"@orpc/shared": "0.0.0-next.c4a591c"
},

@@ -36,0 +36,0 @@ "devDependencies": {

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