orpc-fn 0.2.0 → 0.4.0
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 +28 -8
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +56 -0
- package/dist/cli.js.map +1 -0
- package/dist/create-fn.d.ts +3 -3
- package/dist/create-fn.d.ts.map +1 -1
- package/dist/create-fn.js +2 -7
- package/dist/create-fn.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/live/fn-live.d.ts +9 -5
- package/dist/live/fn-live.d.ts.map +1 -1
- package/dist/live/fn-live.js.map +1 -1
- package/dist/live/pub-sub.d.ts +5 -1
- package/dist/live/pub-sub.d.ts.map +1 -1
- package/dist/live/pub-sub.js +29 -14
- package/dist/live/pub-sub.js.map +1 -1
- package/dist/mcp/core.d.ts +41 -0
- package/dist/mcp/core.d.ts.map +1 -0
- package/dist/mcp/core.js +61 -0
- package/dist/mcp/core.js.map +1 -0
- package/dist/mcp/sdk.d.ts +8 -16
- package/dist/mcp/sdk.d.ts.map +1 -1
- package/dist/mcp/sdk.js +10 -78
- package/dist/mcp/sdk.js.map +1 -1
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +13 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/otel.d.ts +5 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +7 -0
- package/dist/otel.js.map +1 -1
- package/dist/router.d.ts +8 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +13 -0
- package/dist/router.js.map +1 -1
- package/dist/types.d.ts +16 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +15 -3
- package/src/cli.ts +68 -0
- package/src/create-fn.ts +5 -10
- package/src/index.ts +2 -1
- package/src/live/fn-live.ts +9 -5
- package/src/live/pub-sub.ts +38 -19
- package/src/mcp/core.ts +102 -0
- package/src/mcp/sdk.ts +20 -102
- package/src/mcp/server.ts +35 -0
- package/src/otel.ts +8 -0
- package/src/router.ts +19 -0
- package/src/types.ts +24 -42
package/dist/mcp/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/mcp/sdk.ts"],"names":[],"mappings":"AACA,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EAEtB,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/mcp/sdk.ts"],"names":[],"mappings":"AACA,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EAEtB,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EACN,kBAAkB,EAClB,eAAe,EAEf,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,CAAA;AAO1B;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAyC,EACzC,MAAS,EACT,OAAmC;IAEnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAClE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAC1E,CAAA;IACD,OAAO,QAAQ,CAAC,KAAK,CAAA;AACtB,CAAC","sourcesContent":["import type { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport {\n\tCallToolRequestSchema,\n\tListToolsRequestSchema,\n\ttype CallToolResult\n} from '@modelcontextprotocol/sdk/types.js'\nimport type { AnyRouter } from '@orpc/server'\nimport {\n\tcreateToolHandlers,\n\tformatMcpResult,\n\ttype RegisterMcpToolsOptions as CoreOptions\n} from './core.js'\n\nexport { formatMcpResult }\n\nexport type RegisterMcpToolsOptions<R extends AnyRouter> = CoreOptions<\n\tR,\n\tCallToolResult\n>\n\n/**\n * Register on the SDK v1 low-level Server, or on McpServer.server. For SDK v2\n * (`@modelcontextprotocol/server`) use `orpc-fn/mcp/server`.\n */\nexport function registerMcpTools<R extends AnyRouter>(\n\tserver: Pick<Server, 'setRequestHandler'>,\n\trouter: R,\n\toptions: RegisterMcpToolsOptions<R>\n): readonly string[] {\n\tconst handlers = createToolHandlers(router, options)\n\tserver.setRequestHandler(ListToolsRequestSchema, handlers.list)\n\tserver.setRequestHandler(CallToolRequestSchema, (request, extra) =>\n\t\thandlers.call(request.params.name, request.params.arguments, extra.signal)\n\t)\n\treturn handlers.names\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CallToolResult, Server } from '@modelcontextprotocol/server';
|
|
2
|
+
import type { AnyRouter } from '@orpc/server';
|
|
3
|
+
import { formatMcpResult, type RegisterMcpToolsOptions as CoreOptions } from './core.js';
|
|
4
|
+
export { formatMcpResult };
|
|
5
|
+
export type RegisterMcpToolsOptions<R extends AnyRouter> = CoreOptions<R, CallToolResult>;
|
|
6
|
+
/**
|
|
7
|
+
* Register on the SDK v2 (`@modelcontextprotocol/server`) low-level Server, or
|
|
8
|
+
* on McpServer.server. Declare `capabilities: { tools: {} }` on the Server.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerMcpTools<R extends AnyRouter>(server: Pick<Server, 'setRequestHandler'>, router: R, options: RegisterMcpToolsOptions<R>): readonly string[];
|
|
11
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAEN,eAAe,EACf,KAAK,uBAAuB,IAAI,WAAW,EAC3C,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,SAAS,IAAI,WAAW,CACrE,CAAC,EACD,cAAc,CACd,CAAA;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,EACnD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACzC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACjC,SAAS,MAAM,EAAE,CAWnB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createToolHandlers, formatMcpResult } from './core.js';
|
|
2
|
+
export { formatMcpResult };
|
|
3
|
+
/**
|
|
4
|
+
* Register on the SDK v2 (`@modelcontextprotocol/server`) low-level Server, or
|
|
5
|
+
* on McpServer.server. Declare `capabilities: { tools: {} }` on the Server.
|
|
6
|
+
*/
|
|
7
|
+
export function registerMcpTools(server, router, options) {
|
|
8
|
+
const handlers = createToolHandlers(router, options);
|
|
9
|
+
server.setRequestHandler('tools/list', handlers.list);
|
|
10
|
+
server.setRequestHandler('tools/call', (request, ctx) => handlers.call(request.params.name, request.params.arguments, ctx.mcpReq.signal));
|
|
11
|
+
return handlers.names;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,kBAAkB,EAClB,eAAe,EAEf,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,CAAA;AAO1B;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC/B,MAAyC,EACzC,MAAS,EACT,OAAmC;IAEnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpD,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CACvD,QAAQ,CAAC,IAAI,CACZ,OAAO,CAAC,MAAM,CAAC,IAAI,EACnB,OAAO,CAAC,MAAM,CAAC,SAAS,EACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CACjB,CACD,CAAA;IACD,OAAO,QAAQ,CAAC,KAAK,CAAA;AACtB,CAAC","sourcesContent":["import type { CallToolResult, Server } from '@modelcontextprotocol/server'\nimport type { AnyRouter } from '@orpc/server'\nimport {\n\tcreateToolHandlers,\n\tformatMcpResult,\n\ttype RegisterMcpToolsOptions as CoreOptions\n} from './core.js'\n\nexport { formatMcpResult }\n\nexport type RegisterMcpToolsOptions<R extends AnyRouter> = CoreOptions<\n\tR,\n\tCallToolResult\n>\n\n/**\n * Register on the SDK v2 (`@modelcontextprotocol/server`) low-level Server, or\n * on McpServer.server. Declare `capabilities: { tools: {} }` on the Server.\n */\nexport function registerMcpTools<R extends AnyRouter>(\n\tserver: Pick<Server, 'setRequestHandler'>,\n\trouter: R,\n\toptions: RegisterMcpToolsOptions<R>\n): readonly string[] {\n\tconst handlers = createToolHandlers(router, options)\n\tserver.setRequestHandler('tools/list', handlers.list)\n\tserver.setRequestHandler('tools/call', (request, ctx) =>\n\t\thandlers.call(\n\t\t\trequest.params.name,\n\t\t\trequest.params.arguments,\n\t\t\tctx.mcpReq.signal\n\t\t)\n\t)\n\treturn handlers.names\n}\n"]}
|
package/dist/otel.d.ts
CHANGED
|
@@ -62,5 +62,10 @@ export type Tracing = {
|
|
|
62
62
|
};
|
|
63
63
|
export declare function createTracing(otel: OtelApiLike | undefined): Tracing;
|
|
64
64
|
export declare function errorMessageOf(error: unknown): string;
|
|
65
|
+
/** Error fields for a log line, named like the `fn.completed` ones. */
|
|
66
|
+
export declare function errorAttributes(error: unknown): {
|
|
67
|
+
error_type: string;
|
|
68
|
+
error_message: string;
|
|
69
|
+
};
|
|
65
70
|
export {};
|
|
66
71
|
//# sourceMappingURL=otel.d.ts.map
|
package/dist/otel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
|
package/dist/otel.js
CHANGED
|
@@ -112,6 +112,13 @@ export function createTracing(otel) {
|
|
|
112
112
|
export function errorMessageOf(error) {
|
|
113
113
|
return error instanceof Error ? error.message : String(error);
|
|
114
114
|
}
|
|
115
|
+
/** Error fields for a log line, named like the `fn.completed` ones. */
|
|
116
|
+
export function errorAttributes(error) {
|
|
117
|
+
return {
|
|
118
|
+
error_type: error instanceof Error ? error.name : typeof error,
|
|
119
|
+
error_message: errorMessageOf(error)
|
|
120
|
+
};
|
|
121
|
+
}
|
|
115
122
|
function protectSpan(span) {
|
|
116
123
|
return new Proxy(span, {
|
|
117
124
|
get(target, key) {
|
package/dist/otel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tisAsyncIteratorObject,\n\tonStreamEnd,\n\ttype StreamScope\n} from './stream.js'\n\n/** Attribute values accepted by OpenTelemetry spans. */\nexport type AttributeValue = string | number | boolean\n\n/** The part of an OpenTelemetry `Span` this package uses. */\nexport interface SpanLike {\n\tsetAttribute(key: string, value: AttributeValue): unknown\n\tsetStatus(status: { code: number; message?: string }): unknown\n\trecordException(exception: Error): unknown\n\tend(): unknown\n}\n\ntype SpanOptionsLike = {\n\tkind?: number\n\tattributes?: Record<string, AttributeValue>\n}\n\ninterface TracerLike<TSpan> {\n\tstartActiveSpan<F extends (span: TSpan) => unknown>(\n\t\tname: string,\n\t\toptions: SpanOptionsLike,\n\t\tfn: F\n\t): ReturnType<F>\n\tstartSpan(name: string, options?: SpanOptionsLike): TSpan\n}\n\n/**\n * The part of `@opentelemetry/api` this package uses. Pass the module itself:\n * `import * as otel from '@opentelemetry/api'` then `createFn({ otel })`.\n * Without it no spans are created and handlers receive `span: undefined`.\n */\nexport interface OtelApiLike<TSpan extends SpanLike = SpanLike> {\n\ttrace: { getTracer(name: string): TracerLike<TSpan> }\n\tSpanStatusCode: { OK: number; ERROR: number }\n\tSpanKind: {\n\t\tINTERNAL: number\n\t\tSERVER: number\n\t\tPRODUCER: number\n\t}\n\t/** Restores a span's context for each step of a stream it returned. */\n\tcontext: {\n\t\tactive(): unknown\n\t\twith<T>(context: never, fn: () => T): T\n\t}\n}\n\n/** The span type of an OpenTelemetry API, or `SpanLike` when absent. */\nexport type SpanOf<TOtel> =\n\tTOtel extends OtelApiLike<infer TSpan> ? TSpan : SpanLike\n\n/** Called once when a span's work is done, before the span ends. */\nexport type OnSettled = (\n\tspan: SpanLike | undefined,\n\t...error: [] | [unknown]\n) => void\n\nexport type Tracing = {\n\t/**\n\t * Run `fn` inside an active span: OK when it resolves, ERROR when it throws,\n\t * ended either way. When `fn` resolves to a stream, the span stays open -\n\t * and active for each step of the stream - until the stream ends.\n\t * `onSettled` runs once at that point, before the span ends. Without\n\t * OpenTelemetry `span` is undefined and `onSettled` still runs.\n\t */\n\tinSpan<T>(\n\t\tname: string,\n\t\tkind: 'INTERNAL' | 'SERVER' | 'PRODUCER',\n\t\tfn: (span: SpanLike | undefined) => Promise<T>,\n\t\tonSettled?: OnSettled\n\t): Promise<T>\n\t/** Start a span that the caller ends with `end` (long-lived streams). */\n\tstartSpan(\n\t\tname: string,\n\t\tkind: 'SERVER',\n\t\tattributes: Record<string, AttributeValue>\n\t): SpanLike | undefined\n\t/** Set OK, or ERROR with `error`, and end the span. */\n\tend(span: SpanLike | undefined, error?: unknown): void\n}\n\nexport function createTracing(otel: OtelApiLike | undefined): Tracing {\n\tlet tracer: TracerLike<SpanLike> | undefined\n\ttry {\n\t\ttracer = otel?.trace.getTracer('orpc-fn')\n\t} catch {\n\t\t/* Missing telemetry cannot prevent execution. */\n\t}\n\tconst end: Tracing['end'] = (span, ...error) => {\n\t\tif (!span || !otel) return\n\t\tspan = protectSpan(span)\n\t\tif (error.length === 0) {\n\t\t\tspan.setStatus({ code: otel.SpanStatusCode.OK })\n\t\t} else {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\tmessage: errorMessageOf(error[0])\n\t\t\t})\n\t\t\tif (error[0] instanceof Error) span.recordException(error[0])\n\t\t}\n\t\tspan.end()\n\t}\n\treturn {\n\t\tinSpan(name, kind, fn, onSettled) {\n\t\t\tconst settle = (span: SpanLike | undefined, ...error: [] | [unknown]) => {\n\t\t\t\ttry {\n\t\t\t\t\tonSettled?.(span, ...error)\n\t\t\t\t} catch {\n\t\t\t\t\t/* Telemetry callbacks cannot replace the original result. */\n\t\t\t\t} finally {\n\t\t\t\t\tend(span, ...error)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst run = async (\n\t\t\t\tspan: SpanLike | undefined,\n\t\t\t\tscope?: StreamScope\n\t\t\t): Promise<Awaited<ReturnType<typeof fn>>> => {\n\t\t\t\tspan = span ? protectSpan(span) : undefined\n\t\t\t\tlet result: Awaited<ReturnType<typeof fn>>\n\t\t\t\ttry {\n\t\t\t\t\tresult = await fn(span)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tsettle(span, error)\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\tif (isAsyncIteratorObject(result)) {\n\t\t\t\t\treturn onStreamEnd(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\t(...error) => settle(span, ...error),\n\t\t\t\t\t\tscope\n\t\t\t\t\t) as typeof result\n\t\t\t\t}\n\t\t\t\tsettle(span)\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tif (!tracer || !otel) return run(undefined)\n\t\t\tlet started: Promise<Awaited<ReturnType<typeof fn>>> | undefined\n\t\t\ttry {\n\t\t\t\treturn tracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t{ kind: otel.SpanKind[kind] },\n\t\t\t\t\t(span) => {\n\t\t\t\t\t\tlet active: unknown\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tactive = otel.context.active()\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* Fall back to the span without scope restoration. */\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstarted = run(span, (step) => {\n\t\t\t\t\t\t\tlet completed: { value: ReturnType<typeof step> } | undefined\n\t\t\t\t\t\t\tlet failed: { error: unknown } | undefined\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn otel.context.with(active as never, () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst value = step()\n\t\t\t\t\t\t\t\t\t\tcompleted = { value }\n\t\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\tfailed = { error }\n\t\t\t\t\t\t\t\t\t\tthrow error\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tif (completed) return completed.value\n\t\t\t\t\t\t\t\tif (failed) throw failed.error\n\t\t\t\t\t\t\t\treturn step()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn started\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t} catch {\n\t\t\t\treturn started ?? run(undefined)\n\t\t\t}\n\t\t},\n\t\tstartSpan(name, kind, attributes) {\n\t\t\tif (!tracer || !otel) return undefined\n\t\t\ttry {\n\t\t\t\treturn protectSpan(\n\t\t\t\t\ttracer.startSpan(name, { kind: otel.SpanKind[kind], attributes })\n\t\t\t\t)\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t},\n\t\tend\n\t}\n}\n\nexport function errorMessageOf(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error)\n}\n\nfunction protectSpan<T extends SpanLike>(span: T): T {\n\treturn new Proxy(span, {\n\t\tget(target, key) {\n\t\t\tconst value = Reflect.get(target, key, target)\n\t\t\tif (typeof value !== 'function') return value\n\t\t\tif (\n\t\t\t\t['setAttribute', 'setStatus', 'recordException', 'end'].includes(\n\t\t\t\t\tString(key)\n\t\t\t\t)\n\t\t\t)\n\t\t\t\treturn (...args: unknown[]) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn value.apply(target, args)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* Ignore exporter failures. */\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn value.bind(target)\n\t\t}\n\t})\n}\n"]}
|
|
1
|
+
{"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tisAsyncIteratorObject,\n\tonStreamEnd,\n\ttype StreamScope\n} from './stream.js'\n\n/** Attribute values accepted by OpenTelemetry spans. */\nexport type AttributeValue = string | number | boolean\n\n/** The part of an OpenTelemetry `Span` this package uses. */\nexport interface SpanLike {\n\tsetAttribute(key: string, value: AttributeValue): unknown\n\tsetStatus(status: { code: number; message?: string }): unknown\n\trecordException(exception: Error): unknown\n\tend(): unknown\n}\n\ntype SpanOptionsLike = {\n\tkind?: number\n\tattributes?: Record<string, AttributeValue>\n}\n\ninterface TracerLike<TSpan> {\n\tstartActiveSpan<F extends (span: TSpan) => unknown>(\n\t\tname: string,\n\t\toptions: SpanOptionsLike,\n\t\tfn: F\n\t): ReturnType<F>\n\tstartSpan(name: string, options?: SpanOptionsLike): TSpan\n}\n\n/**\n * The part of `@opentelemetry/api` this package uses. Pass the module itself:\n * `import * as otel from '@opentelemetry/api'` then `createFn({ otel })`.\n * Without it no spans are created and handlers receive `span: undefined`.\n */\nexport interface OtelApiLike<TSpan extends SpanLike = SpanLike> {\n\ttrace: { getTracer(name: string): TracerLike<TSpan> }\n\tSpanStatusCode: { OK: number; ERROR: number }\n\tSpanKind: {\n\t\tINTERNAL: number\n\t\tSERVER: number\n\t\tPRODUCER: number\n\t}\n\t/** Restores a span's context for each step of a stream it returned. */\n\tcontext: {\n\t\tactive(): unknown\n\t\twith<T>(context: never, fn: () => T): T\n\t}\n}\n\n/** The span type of an OpenTelemetry API, or `SpanLike` when absent. */\nexport type SpanOf<TOtel> =\n\tTOtel extends OtelApiLike<infer TSpan> ? TSpan : SpanLike\n\n/** Called once when a span's work is done, before the span ends. */\nexport type OnSettled = (\n\tspan: SpanLike | undefined,\n\t...error: [] | [unknown]\n) => void\n\nexport type Tracing = {\n\t/**\n\t * Run `fn` inside an active span: OK when it resolves, ERROR when it throws,\n\t * ended either way. When `fn` resolves to a stream, the span stays open -\n\t * and active for each step of the stream - until the stream ends.\n\t * `onSettled` runs once at that point, before the span ends. Without\n\t * OpenTelemetry `span` is undefined and `onSettled` still runs.\n\t */\n\tinSpan<T>(\n\t\tname: string,\n\t\tkind: 'INTERNAL' | 'SERVER' | 'PRODUCER',\n\t\tfn: (span: SpanLike | undefined) => Promise<T>,\n\t\tonSettled?: OnSettled\n\t): Promise<T>\n\t/** Start a span that the caller ends with `end` (long-lived streams). */\n\tstartSpan(\n\t\tname: string,\n\t\tkind: 'SERVER',\n\t\tattributes: Record<string, AttributeValue>\n\t): SpanLike | undefined\n\t/** Set OK, or ERROR with `error`, and end the span. */\n\tend(span: SpanLike | undefined, error?: unknown): void\n}\n\nexport function createTracing(otel: OtelApiLike | undefined): Tracing {\n\tlet tracer: TracerLike<SpanLike> | undefined\n\ttry {\n\t\ttracer = otel?.trace.getTracer('orpc-fn')\n\t} catch {\n\t\t/* Missing telemetry cannot prevent execution. */\n\t}\n\tconst end: Tracing['end'] = (span, ...error) => {\n\t\tif (!span || !otel) return\n\t\tspan = protectSpan(span)\n\t\tif (error.length === 0) {\n\t\t\tspan.setStatus({ code: otel.SpanStatusCode.OK })\n\t\t} else {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\tmessage: errorMessageOf(error[0])\n\t\t\t})\n\t\t\tif (error[0] instanceof Error) span.recordException(error[0])\n\t\t}\n\t\tspan.end()\n\t}\n\treturn {\n\t\tinSpan(name, kind, fn, onSettled) {\n\t\t\tconst settle = (span: SpanLike | undefined, ...error: [] | [unknown]) => {\n\t\t\t\ttry {\n\t\t\t\t\tonSettled?.(span, ...error)\n\t\t\t\t} catch {\n\t\t\t\t\t/* Telemetry callbacks cannot replace the original result. */\n\t\t\t\t} finally {\n\t\t\t\t\tend(span, ...error)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst run = async (\n\t\t\t\tspan: SpanLike | undefined,\n\t\t\t\tscope?: StreamScope\n\t\t\t): Promise<Awaited<ReturnType<typeof fn>>> => {\n\t\t\t\tspan = span ? protectSpan(span) : undefined\n\t\t\t\tlet result: Awaited<ReturnType<typeof fn>>\n\t\t\t\ttry {\n\t\t\t\t\tresult = await fn(span)\n\t\t\t\t} catch (error) {\n\t\t\t\t\tsettle(span, error)\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\tif (isAsyncIteratorObject(result)) {\n\t\t\t\t\treturn onStreamEnd(\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\t(...error) => settle(span, ...error),\n\t\t\t\t\t\tscope\n\t\t\t\t\t) as typeof result\n\t\t\t\t}\n\t\t\t\tsettle(span)\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tif (!tracer || !otel) return run(undefined)\n\t\t\tlet started: Promise<Awaited<ReturnType<typeof fn>>> | undefined\n\t\t\ttry {\n\t\t\t\treturn tracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t{ kind: otel.SpanKind[kind] },\n\t\t\t\t\t(span) => {\n\t\t\t\t\t\tlet active: unknown\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tactive = otel.context.active()\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t/* Fall back to the span without scope restoration. */\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstarted = run(span, (step) => {\n\t\t\t\t\t\t\tlet completed: { value: ReturnType<typeof step> } | undefined\n\t\t\t\t\t\t\tlet failed: { error: unknown } | undefined\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn otel.context.with(active as never, () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst value = step()\n\t\t\t\t\t\t\t\t\t\tcompleted = { value }\n\t\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\t\tfailed = { error }\n\t\t\t\t\t\t\t\t\t\tthrow error\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tif (completed) return completed.value\n\t\t\t\t\t\t\t\tif (failed) throw failed.error\n\t\t\t\t\t\t\t\treturn step()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\treturn started\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t} catch {\n\t\t\t\treturn started ?? run(undefined)\n\t\t\t}\n\t\t},\n\t\tstartSpan(name, kind, attributes) {\n\t\t\tif (!tracer || !otel) return undefined\n\t\t\ttry {\n\t\t\t\treturn protectSpan(\n\t\t\t\t\ttracer.startSpan(name, { kind: otel.SpanKind[kind], attributes })\n\t\t\t\t)\n\t\t\t} catch {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t},\n\t\tend\n\t}\n}\n\nexport function errorMessageOf(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error)\n}\n\n/** Error fields for a log line, named like the `fn.completed` ones. */\nexport function errorAttributes(error: unknown) {\n\treturn {\n\t\terror_type: error instanceof Error ? error.name : typeof error,\n\t\terror_message: errorMessageOf(error)\n\t}\n}\n\nfunction protectSpan<T extends SpanLike>(span: T): T {\n\treturn new Proxy(span, {\n\t\tget(target, key) {\n\t\t\tconst value = Reflect.get(target, key, target)\n\t\t\tif (typeof value !== 'function') return value\n\t\t\tif (\n\t\t\t\t['setAttribute', 'setStatus', 'recordException', 'end'].includes(\n\t\t\t\t\tString(key)\n\t\t\t\t)\n\t\t\t)\n\t\t\t\treturn (...args: unknown[]) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn value.apply(target, args)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* Ignore exporter failures. */\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn value.bind(target)\n\t\t}\n\t})\n}\n"]}
|
package/dist/router.d.ts
CHANGED
|
@@ -14,4 +14,12 @@ export declare function createRouter<T extends AnyRouter>(routes: T): Readonly<T
|
|
|
14
14
|
export declare function createStreamManifest(router: AnyRouter): readonly (readonly string[])[];
|
|
15
15
|
/** Resolve lazy routers before generating the same serializable path manifest. */
|
|
16
16
|
export declare function createStreamManifestAsync(router: AnyRouter): Promise<readonly (readonly string[])[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Deterministic module source for a stream manifest: paths sorted, `json`
|
|
19
|
+
* as an array, `ts` as `export const <name>`. Used by `orpc-fn stream-manifest`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function renderStreamManifest(paths: readonly (readonly string[])[], options: {
|
|
22
|
+
format: 'json' | 'ts';
|
|
23
|
+
name?: string | undefined;
|
|
24
|
+
}): string;
|
|
17
25
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAId,MAAM,cAAc,CAAA;AAGrB;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAExE;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,GACf,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAahC;AAED,kFAAkF;AAClF,wBAAsB,yBAAyB,CAC9C,MAAM,EAAE,SAAS,GACf,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,CASzC"}
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EAId,MAAM,cAAc,CAAA;AAGrB;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAExE;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,SAAS,GACf,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAahC;AAED,kFAAkF;AAClF,wBAAsB,yBAAyB,CAC9C,MAAM,EAAE,SAAS,GACf,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,CASzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EACrC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC3D,MAAM,CAUR"}
|
package/dist/router.js
CHANGED
|
@@ -33,4 +33,17 @@ export async function createStreamManifestAsync(router) {
|
|
|
33
33
|
});
|
|
34
34
|
return paths;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Deterministic module source for a stream manifest: paths sorted, `json`
|
|
38
|
+
* as an array, `ts` as `export const <name>`. Used by `orpc-fn stream-manifest`.
|
|
39
|
+
*/
|
|
40
|
+
export function renderStreamManifest(paths, options) {
|
|
41
|
+
const lines = paths
|
|
42
|
+
.map((path) => `\t[${path.map((segment) => JSON.stringify(segment)).join(', ')}]`)
|
|
43
|
+
.sort();
|
|
44
|
+
const array = lines.length ? `[\n${lines.join(',\n')}\n]` : '[]';
|
|
45
|
+
if (options.format === 'json')
|
|
46
|
+
return `${array}\n`;
|
|
47
|
+
return `// Generated by \`orpc-fn stream-manifest\`. Do not edit.\nexport const ${options.name ?? 'streamPaths'}: readonly (readonly string[])[] = ${array}\n`;
|
|
48
|
+
}
|
|
36
49
|
//# sourceMappingURL=router.js.map
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,yBAAyB,EACzB,0BAA0B,EAC1B,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAsB,MAAS;IAC1D,OAAO,MAAM,CAAA;AACd,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CACnC,MAAiB;IAEjB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAG,0BAA0B,CAC5C,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EACpB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,UAAU,CAAC,QAAwB,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CACD,CAAA;IACD,IAAI,UAAU,CAAC,MAAM;QACpB,MAAM,IAAI,SAAS,CAClB,yDAAyD,CACzD,CAAA;IACF,OAAO,KAAK,CAAA;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,MAAiB;IAEjB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,yBAAyB,CAC9B,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EACpB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,UAAU,CAAC,QAAwB,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CACD,CAAA;IACD,OAAO,KAAK,CAAA;AACb,CAAC","sourcesContent":["import {\n\ttype AnyRouter,\n\ttype AnyProcedure,\n\tresolveContractProcedures,\n\ttraverseContractProcedures\n} from '@orpc/server'\nimport { readFnMeta } from './meta.js'\n\n/**\n * Creates a router object from routes or nested routers.\n * Simply returns the routes as a const object for type inference.\n *\n * @example\n * ```ts\n * const items = createRouter({ getItem, updateItem })\n * export const api = createRouter({ metabase, items })\n * ```\n */\nexport function createRouter<T extends AnyRouter>(routes: T): Readonly<T> {\n\treturn routes\n}\n\n/** Serialize these paths to a frontend module; this helper belongs on the server. */\nexport function createStreamManifest(\n\trouter: AnyRouter\n): readonly (readonly string[])[] {\n\tconst paths: string[][] = []\n\tconst unresolved = traverseContractProcedures(\n\t\t{ router, path: [] },\n\t\t({ contract, path }) => {\n\t\t\tif (readFnMeta(contract as AnyProcedure).stream) paths.push([...path])\n\t\t}\n\t)\n\tif (unresolved.length)\n\t\tthrow new TypeError(\n\t\t\t'orpc-fn: lazy routers require createStreamManifestAsync'\n\t\t)\n\treturn paths\n}\n\n/** Resolve lazy routers before generating the same serializable path manifest. */\nexport async function createStreamManifestAsync(\n\trouter: AnyRouter\n): Promise<readonly (readonly string[])[]> {\n\tconst paths: string[][] = []\n\tawait resolveContractProcedures(\n\t\t{ router, path: [] },\n\t\t({ contract, path }) => {\n\t\t\tif (readFnMeta(contract as AnyProcedure).stream) paths.push([...path])\n\t\t}\n\t)\n\treturn paths\n}\n"]}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,yBAAyB,EACzB,0BAA0B,EAC1B,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEtC;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAsB,MAAS;IAC1D,OAAO,MAAM,CAAA;AACd,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CACnC,MAAiB;IAEjB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,UAAU,GAAG,0BAA0B,CAC5C,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EACpB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,UAAU,CAAC,QAAwB,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CACD,CAAA;IACD,IAAI,UAAU,CAAC,MAAM;QACpB,MAAM,IAAI,SAAS,CAClB,yDAAyD,CACzD,CAAA;IACF,OAAO,KAAK,CAAA;AACb,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,MAAiB;IAEjB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,yBAAyB,CAC9B,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EACpB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QACtB,IAAI,UAAU,CAAC,QAAwB,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACvE,CAAC,CACD,CAAA;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CACnC,KAAqC,EACrC,OAA6D;IAE7D,MAAM,KAAK,GAAG,KAAK;SACjB,GAAG,CACH,CAAC,IAAI,EAAE,EAAE,CACR,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE;SACA,IAAI,EAAE,CAAA;IACR,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,GAAG,KAAK,IAAI,CAAA;IAClD,OAAO,2EAA2E,OAAO,CAAC,IAAI,IAAI,aAAa,sCAAsC,KAAK,IAAI,CAAA;AAC/J,CAAC","sourcesContent":["import {\n\ttype AnyRouter,\n\ttype AnyProcedure,\n\tresolveContractProcedures,\n\ttraverseContractProcedures\n} from '@orpc/server'\nimport { readFnMeta } from './meta.js'\n\n/**\n * Creates a router object from routes or nested routers.\n * Simply returns the routes as a const object for type inference.\n *\n * @example\n * ```ts\n * const items = createRouter({ getItem, updateItem })\n * export const api = createRouter({ metabase, items })\n * ```\n */\nexport function createRouter<T extends AnyRouter>(routes: T): Readonly<T> {\n\treturn routes\n}\n\n/** Serialize these paths to a frontend module; this helper belongs on the server. */\nexport function createStreamManifest(\n\trouter: AnyRouter\n): readonly (readonly string[])[] {\n\tconst paths: string[][] = []\n\tconst unresolved = traverseContractProcedures(\n\t\t{ router, path: [] },\n\t\t({ contract, path }) => {\n\t\t\tif (readFnMeta(contract as AnyProcedure).stream) paths.push([...path])\n\t\t}\n\t)\n\tif (unresolved.length)\n\t\tthrow new TypeError(\n\t\t\t'orpc-fn: lazy routers require createStreamManifestAsync'\n\t\t)\n\treturn paths\n}\n\n/** Resolve lazy routers before generating the same serializable path manifest. */\nexport async function createStreamManifestAsync(\n\trouter: AnyRouter\n): Promise<readonly (readonly string[])[]> {\n\tconst paths: string[][] = []\n\tawait resolveContractProcedures(\n\t\t{ router, path: [] },\n\t\t({ contract, path }) => {\n\t\t\tif (readFnMeta(contract as AnyProcedure).stream) paths.push([...path])\n\t\t}\n\t)\n\treturn paths\n}\n\n/**\n * Deterministic module source for a stream manifest: paths sorted, `json`\n * as an array, `ts` as `export const <name>`. Used by `orpc-fn stream-manifest`.\n */\nexport function renderStreamManifest(\n\tpaths: readonly (readonly string[])[],\n\toptions: { format: 'json' | 'ts'; name?: string | undefined }\n): string {\n\tconst lines = paths\n\t\t.map(\n\t\t\t(path) =>\n\t\t\t\t`\\t[${path.map((segment) => JSON.stringify(segment)).join(', ')}]`\n\t\t)\n\t\t.sort()\n\tconst array = lines.length ? `[\\n${lines.join(',\\n')}\\n]` : '[]'\n\tif (options.format === 'json') return `${array}\\n`\n\treturn `// Generated by \\`orpc-fn stream-manifest\\`. Do not edit.\\nexport const ${options.name ?? 'streamPaths'}: readonly (readonly string[])[] = ${array}\\n`\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -58,6 +58,8 @@ export type BuildProcedure = (options: {
|
|
|
58
58
|
export type RejectKeys<T, K extends PropertyKey, TMessage extends string> = {
|
|
59
59
|
[P in Extract<keyof T, K>]: TMessage;
|
|
60
60
|
};
|
|
61
|
+
/** Params every handler receives; extras may not reuse these names. */
|
|
62
|
+
type HandlerParamKey = 'input' | 'context' | 'call' | 'signal' | 'span' | 'logger' | 'errors' | 'lastEventId';
|
|
61
63
|
/**
|
|
62
64
|
* Handler extras must have known keys: an index signature would claim every
|
|
63
65
|
* handler param. Intersected into `createFn`'s options to reject it.
|
|
@@ -66,7 +68,7 @@ export type FiniteExtras<T> = T extends unknown ? string extends keyof T ? {
|
|
|
66
68
|
extras: 'orpc-fn: extras need known keys, not an index signature';
|
|
67
69
|
} : number extends keyof T ? {
|
|
68
70
|
extras: 'orpc-fn: extras need known keys, not an index signature';
|
|
69
|
-
} : Extract<keyof T,
|
|
71
|
+
} : Extract<keyof T, HandlerParamKey> extends never ? unknown : {
|
|
70
72
|
extras: 'orpc-fn: extras cannot shadow handler parameters';
|
|
71
73
|
} : never;
|
|
72
74
|
type ProcedureOf<TBuilder> = TBuilder extends {
|
|
@@ -123,7 +125,7 @@ export type GuardOptions<TGuards> = {
|
|
|
123
125
|
type MergeExtras<TShared, TScoped> = TShared extends unknown ? TScoped extends unknown ? Omit<TShared, keyof TScoped> & TScoped : never : never;
|
|
124
126
|
export type HandlerParams<TDef extends FnDefinition, TInput, TKey extends ProcedureKey<TDef>, TErrors extends ErrorMap = Record<never, never>> = DistributiveOmit<MergeExtras<TDef['extras'], TDef extends {
|
|
125
127
|
extrasByProcedure: infer E;
|
|
126
|
-
} ? TKey extends keyof E ? E[TKey] : object : object>,
|
|
128
|
+
} ? TKey extends keyof E ? E[TKey] : object : object>, HandlerParamKey> & {
|
|
127
129
|
input: TInput;
|
|
128
130
|
context: FnContext<TDef, TKey>;
|
|
129
131
|
/** Calls another procedure with this context and signal, in a child span. */
|
|
@@ -232,10 +234,18 @@ export type CompletedHookEvent<TProcedures extends Record<string, BuilderLike>,
|
|
|
232
234
|
context: InitialContextOf<TProcedures[K]>;
|
|
233
235
|
});
|
|
234
236
|
}[keyof TProcedures & string];
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
237
|
+
/**
|
|
238
|
+
* Intersected into each scoped extras function's return type: rejects index
|
|
239
|
+
* signatures and handler-parameter names at the offending property. A
|
|
240
|
+
* top-level conditional over the whole map broke inference when zero-argument
|
|
241
|
+
* and context-reading functions were mixed.
|
|
242
|
+
*/
|
|
243
|
+
export type ScopedExtrasGuard<T> = (string extends keyof T ? {
|
|
244
|
+
'orpc-fn: scoped extras need finite keys': never;
|
|
245
|
+
} : number extends keyof T ? {
|
|
246
|
+
'orpc-fn: scoped extras need finite keys': never;
|
|
247
|
+
} : unknown) & {
|
|
248
|
+
[K in HandlerParamKey]?: never;
|
|
239
249
|
};
|
|
240
250
|
export {};
|
|
241
251
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkFA,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM;IACN,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,MAAM;CACsC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,GAAG,iBAAiB;IACpB,MAAM;IACN,WAAW;IACX,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;IACN,aAAa;IACb,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,gBAAgB;CACP,CAAA","sourcesContent":["import type {\n\tAnySchema,\n\tErrorMap,\n\tInferSchemaInput,\n\tInferSchemaOutput,\n\tMergedErrorMap,\n\tSchema\n} from '@orpc/contract'\nimport type {\n\tAnyProcedure,\n\tDecoratedProcedure,\n\tProcedure,\n\tRoute\n} from '@orpc/server'\nimport type { createORPCErrorConstructorMap } from '@orpc/server'\nimport type { StoredFnMeta } from './meta.js'\nimport type { NativeErrors, NativeMeta } from './compatibility.js'\nimport type { BoundCall } from './bound-call.js'\nimport type { FnLogger } from './logger.js'\nimport type { SpanLike } from './otel.js'\n\nexport type MaybePromise<T> = T | Promise<T>\n\n/**\n * An oRPC builder without input or output schema: `os`, `os.$context<T>()`,\n * `os.use(...)`. A schema set on the builder is rejected by `createFn`; set it\n * on the route instead.\n */\n/* biome-ignore-start lint/suspicious/noExplicitAny: matches every builder's generic methods */\nexport type BuilderLike = {\n\troute(route: any): unknown\n\tmeta(meta: any): unknown\n\tinput(schema: any): unknown\n\toutput(schema: any): unknown\n\thandler(handler: any): Procedure<any, any, any, any, any, any>\n}\n/* biome-ignore-end lint/suspicious/noExplicitAny: matches every builder's generic methods */\n\n/** Input a procedure is called with (before its input schema runs). */\nexport type ProcedureInput<T> =\n\tT extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer _TCurrent,\n\t\tinfer TInputSchema extends AnySchema,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? InferSchemaInput<TInputSchema>\n\t\t: unknown\n\n/** What a procedure resolves to (after its output schema runs). */\nexport type ProcedureOutput<T> =\n\tT extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer _TCurrent,\n\t\tinfer _TIn,\n\t\tinfer TOutputSchema extends AnySchema,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? InferSchemaOutput<TOutputSchema>\n\t\t: unknown\n\n/** Context a procedure must be called with. */\nexport type ProcedureContext<T> =\n\tT extends Procedure<\n\t\tinfer TContext,\n\t\tinfer _TCurrent,\n\t\tinfer _TIn,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? TContext\n\t\t: never\n\n/** `Omit` that keeps each member of a union (handler params narrow by discriminant). */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n\t? Omit<T, K>\n\t: never\n\n/** `fn()` options passed to oRPC's `.route()`; `RouteConfig` is derived from it. */\nexport const ROUTE_OPTION_KEYS = [\n\t'path',\n\t'method',\n\t'summary',\n\t'description',\n\t'deprecated',\n\t'successStatus',\n\t'successDescription',\n\t'inputStructure',\n\t'outputStructure',\n\t'tags'\n] as const satisfies readonly (keyof Route)[]\n\n/**\n * `fn()` option names owned by the route itself. Guard keys must not\n * reuse them: such an option would be read as the route option and the guard\n * would never run.\n */\nexport const RESERVED_OPTION_KEYS = [\n\t...ROUTE_OPTION_KEYS,\n\t'name',\n\t'procedure',\n\t'input',\n\t'output',\n\t'handler',\n\t'live',\n\t'operationId',\n\t'meta',\n\t'stream',\n\t'errors',\n\t'guardResolvers'\n] as const\n\nexport type ReservedOptionKey = (typeof RESERVED_OPTION_KEYS)[number]\n\n/** @internal Builds one route from a selected native procedure builder. */\nexport type BuildProcedure = (options: {\n\tname: string\n\tprocedure: string | undefined\n\troute: Record<string, unknown>\n\tmeta: Record<string, unknown>\n\tinput?: AnySchema | undefined\n\toutput?: AnySchema | undefined\n\tstream?: boolean\n\terrors?: ErrorMap\n\thandler: (options: {\n\t\tinput: unknown\n\t\tcontext: Record<string | symbol, unknown>\n\t\tsignal?: AbortSignal\n\t\tlastEventId?: string\n\t\terrors: ReturnType<typeof createORPCErrorConstructorMap>\n\t}) => unknown\n}) => AnyProcedure\n\n/** Turns every key of `T` found in `K` into a readable type error. */\nexport type RejectKeys<T, K extends PropertyKey, TMessage extends string> = {\n\t[P in Extract<keyof T, K>]: TMessage\n}\n\n/**\n * Handler extras must have known keys: an index signature would claim every\n * handler param. Intersected into `createFn`'s options to reject it.\n */\nexport type FiniteExtras<T> = T extends unknown\n\t? string extends keyof T\n\t\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t\t: number extends keyof T\n\t\t\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t\t\t: Extract<\n\t\t\t\t\t\tkeyof T,\n\t\t\t\t\t\t| 'input'\n\t\t\t\t\t\t| 'context'\n\t\t\t\t\t\t| 'call'\n\t\t\t\t\t\t| 'signal'\n\t\t\t\t\t\t| 'span'\n\t\t\t\t\t\t| 'logger'\n\t\t\t\t\t\t| 'errors'\n\t\t\t\t\t\t| 'lastEventId'\n\t\t\t\t\t> extends never\n\t\t\t\t? unknown\n\t\t\t\t: { extras: 'orpc-fn: extras cannot shadow handler parameters' }\n\t: never\n\ntype ProcedureOf<TBuilder> = TBuilder extends {\n\thandler(handler: never): infer TProcedure\n}\n\t? TProcedure\n\t: never\n\n/** Context a route built from this builder is called with. */\nexport type InitialContextOf<TBuilder> = ProcedureContext<ProcedureOf<TBuilder>>\n\n/** Context the handler sees, after the builder's middleware. */\nexport type CurrentContextOf<TBuilder> =\n\tProcedureOf<TBuilder> extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer TContext,\n\t\tinfer _TIn,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? TContext\n\t\t: never\n\nexport type ErrorMapOf<TBuilder> = NativeErrors<ProcedureOf<TBuilder>>\ntype MetaOf<TBuilder> = NativeMeta<ProcedureOf<TBuilder>>\n\n/**\n * Everything `createFn` inferred from its options. Route types read from it;\n * apps rarely spell it out.\n */\nexport type FnDefinition = {\n\tprocedures: Record<string, BuilderLike>\n\tdefault: string\n\textras: object\n\textrasByProcedure?: Partial<Record<string, object>>\n\tguards: object\n\tmeta: object\n\ttag: string\n\tspan: SpanLike\n\tlogger: FnLogger\n}\n\nexport type ProcedureKey<TDef extends FnDefinition> = keyof TDef['procedures'] &\n\tstring\n\n/** Context the handler of a `procedure: TKey` route receives. */\nexport type FnContext<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>\n> = CurrentContextOf<TDef['procedures'][TKey]>\n\n/** Union of every procedure's handler context: what guards and extras see. */\nexport type AnyFnContext<TDef extends FnDefinition> = {\n\t[K in ProcedureKey<TDef>]: FnContext<TDef, K>\n}[ProcedureKey<TDef>]\n\nexport type GuardParams<TContext, TMeta> = {\n\tcontext: TContext\n\tinput: unknown\n\t/** Route name (operationId). */\n\tname: string\n\t/** Procedures key the route was built from. */\n\tprocedure: string\n\tmeta: Partial<TMeta>\n\tsignal: AbortSignal | undefined\n}\n\n/**\n * A check run before the handler. Its first parameter becomes an option on\n * `fn({...})`; the guard runs only on routes that set it. Throw (usually an\n * `ORPCError`) to refuse the call.\n */\n/* biome-ignore-start lint/suspicious/noConfusingVoidType: union prevents accidental value returns while accepting assertion-style guards */\nexport type Guard<TValue, TParams> = (\n\tvalue: TValue,\n\tparams: TParams\n) => MaybePromise<void | boolean>\n/* biome-ignore-end lint/suspicious/noConfusingVoidType: assertion-style guards */\n\nexport type GuardOptions<TGuards> = {\n\t[K in keyof TGuards]?: TGuards[K] extends (\n\t\tvalue: infer TValue,\n\t\tparams: never\n\t) => unknown\n\t\t? TValue\n\t\t: never\n}\n\n/** Match object spread: scoped extras replace shared keys, preserving unions. */\ntype MergeExtras<TShared, TScoped> = TShared extends unknown\n\t? TScoped extends unknown\n\t\t? Omit<TShared, keyof TScoped> & TScoped\n\t\t: never\n\t: never\n\nexport type HandlerParams<\n\tTDef extends FnDefinition,\n\tTInput,\n\tTKey extends ProcedureKey<TDef>,\n\tTErrors extends ErrorMap = Record<never, never>\n> = DistributiveOmit<\n\tMergeExtras<\n\t\tTDef['extras'],\n\t\tTDef extends { extrasByProcedure: infer E }\n\t\t\t? TKey extends keyof E\n\t\t\t\t? E[TKey]\n\t\t\t\t: object\n\t\t\t: object\n\t>,\n\t| 'input'\n\t| 'context'\n\t| 'call'\n\t| 'signal'\n\t| 'span'\n\t| 'logger'\n\t| 'errors'\n\t| 'lastEventId'\n> & {\n\tinput: TInput\n\tcontext: FnContext<TDef, TKey>\n\t/** Calls another procedure with this context and signal, in a child span. */\n\tcall: BoundCall<FnContext<TDef, TKey>>\n\t/** Cancellation is inherited by nested calls; pass to interruptible I/O. */\n\tsignal: AbortSignal | undefined\n\t/** Active OpenTelemetry span, undefined when `createFn({ otel })` is not set. */\n\tspan: TDef['span'] | undefined\n\tlogger: TDef['logger']\n\tlastEventId: string | undefined\n\terrors: ReturnType<\n\t\ttypeof createORPCErrorConstructorMap<\n\t\t\tMergedErrorMap<ErrorMapOf<TDef['procedures'][TKey]>, TErrors>\n\t\t>\n\t>\n}\n\n/** Route options shared by every `fn()` overload. */\nexport type RouteConfig<TTag extends string = string> = Pick<\n\tRoute,\n\tExclude<(typeof ROUTE_OPTION_KEYS)[number], 'tags'>\n> & {\n\t/** Required. Becomes the OpenAPI operationId and the span name (e.g. 'user.create'). */\n\tname: string\n\ttags?: TTag[]\n}\n\nexport type FnRouteOptions<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>,\n\tTInput = unknown,\n\tTErrors extends ErrorMap = Record<never, never>\n> = RouteConfig<TDef['tag']> &\n\tGuardOptions<TDef['guards']> & {\n\t\tmeta?: TDef['meta']\n\t\tstream?: boolean\n\t\terrors?: TErrors\n\t\tguardResolvers?: {\n\t\t\t[K in keyof TDef['guards']]?: (params: {\n\t\t\t\tinput: TInput\n\t\t\t\tcontext: FnContext<TDef, TKey>\n\t\t\t\tsignal: AbortSignal | undefined\n\t\t\t}) => MaybePromise<GuardOptions<TDef['guards']>[K]>\n\t\t}\n\t} & ProcedureOption<TDef, TKey>\n\n/**\n * Which `createFn({ procedures })` builder a route uses. Optional when\n * `createFn` has a `default`; required on every route when it has none.\n */\nexport type ProcedureOption<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>\n> = [TDef['default']] extends [never]\n\t? { procedure: TKey }\n\t: { procedure?: TKey }\n\nexport type FnProcedure<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>,\n\tTInputSchema extends Schema<unknown, unknown>,\n\tTOutputSchema extends Schema<unknown, unknown>,\n\tTErrors extends ErrorMap = Record<never, never>\n> = DecoratedProcedure<\n\tInitialContextOf<TDef['procedures'][TKey]>,\n\tFnContext<TDef, TKey>,\n\tTInputSchema,\n\tTOutputSchema,\n\tMergedErrorMap<ErrorMapOf<TDef['procedures'][TKey]>, TErrors>,\n\tMetaOf<TDef['procedures'][TKey]> & {\n\t\t'orpc-fn': StoredFnMeta<TDef['meta'], TKey>\n\t}\n>\n\ntype InputOf<T> = [T] extends [AnySchema] ? InferSchemaOutput<T> : unknown\ntype ReturnOf<TOut, TReturn> = [TOut] extends [AnySchema]\n\t? InferSchemaInput<TOut>\n\t: TReturn\n\n/** `fn()`: four overloads for input/output schema × inferred. */\nexport interface Fn<TDef extends FnDefinition> {\n\t// 1. With input + output schema\n\t<\n\t\tTInput extends AnySchema,\n\t\tTOut extends AnySchema,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput: TInput\n\t\t\toutput: TOut\n\t\t\t// The output schema parses what the handler returns: its input type.\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<\n\t\t\t\t\tTDef,\n\t\t\t\t\tInferSchemaOutput<TInput>,\n\t\t\t\t\tNoInfer<TKey>,\n\t\t\t\t\tTErrors\n\t\t\t\t>\n\t\t\t) => MaybePromise<InferSchemaInput<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey, InferSchemaOutput<TInput>, TErrors>\n\t): FnProcedure<TDef, TKey, TInput, TOut, TErrors>\n\n\t// 2. With input, inferred output\n\t<\n\t\tTInput extends AnySchema,\n\t\tTReturn,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput: TInput\n\t\t\toutput?: undefined\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<\n\t\t\t\t\tTDef,\n\t\t\t\t\tInferSchemaOutput<TInput>,\n\t\t\t\t\tNoInfer<TKey>,\n\t\t\t\t\tTErrors\n\t\t\t\t>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey, InferSchemaOutput<TInput>, TErrors>\n\t): FnProcedure<TDef, TKey, TInput, Schema<TReturn, TReturn>, TErrors>\n\n\t// 3. No input, with output schema\n\t<\n\t\tTOut extends AnySchema,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: undefined\n\t\t\toutput: TOut\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, unknown, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<InferSchemaInput<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey, unknown, TErrors>\n\t): FnProcedure<TDef, TKey, Schema<unknown, unknown>, TOut, TErrors>\n\n\t// 4. No input, inferred output\n\t<\n\t\tTReturn,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: undefined\n\t\t\toutput?: undefined\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, unknown, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey, unknown, TErrors>\n\t): FnProcedure<\n\t\tTDef,\n\t\tTKey,\n\t\tSchema<unknown, unknown>,\n\t\tSchema<TReturn, TReturn>,\n\t\tTErrors\n\t>\n\n\t// 5. Never matches valid code first; it only words the type errors, which\n\t// TypeScript reports against the last overload.\n\t<\n\t\tTReturn,\n\t\tTInput extends AnySchema | undefined = undefined,\n\t\tTOut extends AnySchema | undefined = undefined,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: TInput\n\t\t\toutput?: TOut\n\t\t\t// The output schema parses what the handler returns: its input type.\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, InputOf<TInput>, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<ReturnOf<TOut, TReturn>>\n\t\t} & FnRouteOptions<TDef, TKey, InputOf<TInput>, TErrors>\n\t): FnProcedure<\n\t\tTDef,\n\t\tTKey,\n\t\t[TInput] extends [AnySchema] ? TInput : Schema<unknown, unknown>,\n\t\t[TOut] extends [AnySchema] ? TOut : Schema<TReturn, TReturn>,\n\t\tTErrors\n\t>\n}\n\n/** What `fn.completed` reports, and what `onCompleted` receives. */\nexport type FnCompletedEvent<TContext = unknown, TSpan = SpanLike> = {\n\tname: string\n\tprocedure: string\n\tdurationMs: number\n\tsuccess: boolean\n\t/** False when authentication or input validation prevented handler execution. */\n\thandlerStarted: boolean\n\terror: unknown\n\tinput: unknown\n\tcontext: TContext\n\tspan: TSpan | undefined\n\tmeta: Record<string, unknown>\n}\n\n/** Factory hooks retain the builder key/context relationship. */\nexport type ProcedureHookParams<\n\tTProcedures extends Record<string, BuilderLike>,\n\tTExtra = object\n> = {\n\t[K in keyof TProcedures & string]: TExtra & {\n\t\tprocedure: K\n\t\tcontext: CurrentContextOf<TProcedures[K]>\n\t}\n}[keyof TProcedures & string]\n\nexport type CompletedHookEvent<\n\tTProcedures extends Record<string, BuilderLike>,\n\tTSpan\n> = {\n\t[K in keyof TProcedures & string]: Omit<\n\t\tFnCompletedEvent<unknown, TSpan>,\n\t\t'context' | 'procedure' | 'handlerStarted'\n\t> & { procedure: K } & (\n\t\t\t| { handlerStarted: true; context: CurrentContextOf<TProcedures[K]> }\n\t\t\t| { handlerStarted: false; context: InitialContextOf<TProcedures[K]> }\n\t\t)\n}[keyof TProcedures & string]\n\nexport type FiniteScopedExtras<T> = {\n\t[K in keyof T]: string extends keyof T[K]\n\t\t? K\n\t\t: number extends keyof T[K]\n\t\t\t? K\n\t\t\t: Extract<\n\t\t\t\t\t\tkeyof T[K],\n\t\t\t\t\t\t| 'input'\n\t\t\t\t\t\t| 'context'\n\t\t\t\t\t\t| 'call'\n\t\t\t\t\t\t| 'signal'\n\t\t\t\t\t\t| 'span'\n\t\t\t\t\t\t| 'logger'\n\t\t\t\t\t\t| 'errors'\n\t\t\t\t\t\t| 'lastEventId'\n\t\t\t\t\t> extends never\n\t\t\t\t? never\n\t\t\t\t: K\n}[keyof T] extends never\n\t? unknown\n\t: {\n\t\t\textrasByProcedure: 'orpc-fn: scoped extras need finite keys and cannot shadow handler parameters'\n\t\t}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkFA,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM;IACN,QAAQ;IACR,SAAS;IACT,aAAa;IACb,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,iBAAiB;IACjB,MAAM;CACsC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,GAAG,iBAAiB;IACpB,MAAM;IACN,WAAW;IACX,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;IACN,aAAa;IACb,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,gBAAgB;CACP,CAAA","sourcesContent":["import type {\n\tAnySchema,\n\tErrorMap,\n\tInferSchemaInput,\n\tInferSchemaOutput,\n\tMergedErrorMap,\n\tSchema\n} from '@orpc/contract'\nimport type {\n\tAnyProcedure,\n\tDecoratedProcedure,\n\tProcedure,\n\tRoute\n} from '@orpc/server'\nimport type { createORPCErrorConstructorMap } from '@orpc/server'\nimport type { StoredFnMeta } from './meta.js'\nimport type { NativeErrors, NativeMeta } from './compatibility.js'\nimport type { BoundCall } from './bound-call.js'\nimport type { FnLogger } from './logger.js'\nimport type { SpanLike } from './otel.js'\n\nexport type MaybePromise<T> = T | Promise<T>\n\n/**\n * An oRPC builder without input or output schema: `os`, `os.$context<T>()`,\n * `os.use(...)`. A schema set on the builder is rejected by `createFn`; set it\n * on the route instead.\n */\n/* biome-ignore-start lint/suspicious/noExplicitAny: matches every builder's generic methods */\nexport type BuilderLike = {\n\troute(route: any): unknown\n\tmeta(meta: any): unknown\n\tinput(schema: any): unknown\n\toutput(schema: any): unknown\n\thandler(handler: any): Procedure<any, any, any, any, any, any>\n}\n/* biome-ignore-end lint/suspicious/noExplicitAny: matches every builder's generic methods */\n\n/** Input a procedure is called with (before its input schema runs). */\nexport type ProcedureInput<T> =\n\tT extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer _TCurrent,\n\t\tinfer TInputSchema extends AnySchema,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? InferSchemaInput<TInputSchema>\n\t\t: unknown\n\n/** What a procedure resolves to (after its output schema runs). */\nexport type ProcedureOutput<T> =\n\tT extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer _TCurrent,\n\t\tinfer _TIn,\n\t\tinfer TOutputSchema extends AnySchema,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? InferSchemaOutput<TOutputSchema>\n\t\t: unknown\n\n/** Context a procedure must be called with. */\nexport type ProcedureContext<T> =\n\tT extends Procedure<\n\t\tinfer TContext,\n\t\tinfer _TCurrent,\n\t\tinfer _TIn,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? TContext\n\t\t: never\n\n/** `Omit` that keeps each member of a union (handler params narrow by discriminant). */\nexport type DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n\t? Omit<T, K>\n\t: never\n\n/** `fn()` options passed to oRPC's `.route()`; `RouteConfig` is derived from it. */\nexport const ROUTE_OPTION_KEYS = [\n\t'path',\n\t'method',\n\t'summary',\n\t'description',\n\t'deprecated',\n\t'successStatus',\n\t'successDescription',\n\t'inputStructure',\n\t'outputStructure',\n\t'tags'\n] as const satisfies readonly (keyof Route)[]\n\n/**\n * `fn()` option names owned by the route itself. Guard keys must not\n * reuse them: such an option would be read as the route option and the guard\n * would never run.\n */\nexport const RESERVED_OPTION_KEYS = [\n\t...ROUTE_OPTION_KEYS,\n\t'name',\n\t'procedure',\n\t'input',\n\t'output',\n\t'handler',\n\t'live',\n\t'operationId',\n\t'meta',\n\t'stream',\n\t'errors',\n\t'guardResolvers'\n] as const\n\nexport type ReservedOptionKey = (typeof RESERVED_OPTION_KEYS)[number]\n\n/** @internal Builds one route from a selected native procedure builder. */\nexport type BuildProcedure = (options: {\n\tname: string\n\tprocedure: string | undefined\n\troute: Record<string, unknown>\n\tmeta: Record<string, unknown>\n\tinput?: AnySchema | undefined\n\toutput?: AnySchema | undefined\n\tstream?: boolean\n\terrors?: ErrorMap\n\thandler: (options: {\n\t\tinput: unknown\n\t\tcontext: Record<string | symbol, unknown>\n\t\tsignal?: AbortSignal\n\t\tlastEventId?: string\n\t\terrors: ReturnType<typeof createORPCErrorConstructorMap>\n\t}) => unknown\n}) => AnyProcedure\n\n/** Turns every key of `T` found in `K` into a readable type error. */\nexport type RejectKeys<T, K extends PropertyKey, TMessage extends string> = {\n\t[P in Extract<keyof T, K>]: TMessage\n}\n\n/** Params every handler receives; extras may not reuse these names. */\ntype HandlerParamKey =\n\t| 'input'\n\t| 'context'\n\t| 'call'\n\t| 'signal'\n\t| 'span'\n\t| 'logger'\n\t| 'errors'\n\t| 'lastEventId'\n\n/**\n * Handler extras must have known keys: an index signature would claim every\n * handler param. Intersected into `createFn`'s options to reject it.\n */\nexport type FiniteExtras<T> = T extends unknown\n\t? string extends keyof T\n\t\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t\t: number extends keyof T\n\t\t\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t\t\t: Extract<keyof T, HandlerParamKey> extends never\n\t\t\t\t? unknown\n\t\t\t\t: { extras: 'orpc-fn: extras cannot shadow handler parameters' }\n\t: never\n\ntype ProcedureOf<TBuilder> = TBuilder extends {\n\thandler(handler: never): infer TProcedure\n}\n\t? TProcedure\n\t: never\n\n/** Context a route built from this builder is called with. */\nexport type InitialContextOf<TBuilder> = ProcedureContext<ProcedureOf<TBuilder>>\n\n/** Context the handler sees, after the builder's middleware. */\nexport type CurrentContextOf<TBuilder> =\n\tProcedureOf<TBuilder> extends Procedure<\n\t\tinfer _TInitial,\n\t\tinfer TContext,\n\t\tinfer _TIn,\n\t\tinfer _TOut,\n\t\tinfer _TErrors,\n\t\tinfer _TMeta\n\t>\n\t\t? TContext\n\t\t: never\n\nexport type ErrorMapOf<TBuilder> = NativeErrors<ProcedureOf<TBuilder>>\ntype MetaOf<TBuilder> = NativeMeta<ProcedureOf<TBuilder>>\n\n/**\n * Everything `createFn` inferred from its options. Route types read from it;\n * apps rarely spell it out.\n */\nexport type FnDefinition = {\n\tprocedures: Record<string, BuilderLike>\n\tdefault: string\n\textras: object\n\textrasByProcedure?: Partial<Record<string, object>>\n\tguards: object\n\tmeta: object\n\ttag: string\n\tspan: SpanLike\n\tlogger: FnLogger\n}\n\nexport type ProcedureKey<TDef extends FnDefinition> = keyof TDef['procedures'] &\n\tstring\n\n/** Context the handler of a `procedure: TKey` route receives. */\nexport type FnContext<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>\n> = CurrentContextOf<TDef['procedures'][TKey]>\n\n/** Union of every procedure's handler context: what guards and extras see. */\nexport type AnyFnContext<TDef extends FnDefinition> = {\n\t[K in ProcedureKey<TDef>]: FnContext<TDef, K>\n}[ProcedureKey<TDef>]\n\nexport type GuardParams<TContext, TMeta> = {\n\tcontext: TContext\n\tinput: unknown\n\t/** Route name (operationId). */\n\tname: string\n\t/** Procedures key the route was built from. */\n\tprocedure: string\n\tmeta: Partial<TMeta>\n\tsignal: AbortSignal | undefined\n}\n\n/**\n * A check run before the handler. Its first parameter becomes an option on\n * `fn({...})`; the guard runs only on routes that set it. Throw (usually an\n * `ORPCError`) to refuse the call.\n */\n/* biome-ignore-start lint/suspicious/noConfusingVoidType: union prevents accidental value returns while accepting assertion-style guards */\nexport type Guard<TValue, TParams> = (\n\tvalue: TValue,\n\tparams: TParams\n) => MaybePromise<void | boolean>\n/* biome-ignore-end lint/suspicious/noConfusingVoidType: assertion-style guards */\n\nexport type GuardOptions<TGuards> = {\n\t[K in keyof TGuards]?: TGuards[K] extends (\n\t\tvalue: infer TValue,\n\t\tparams: never\n\t) => unknown\n\t\t? TValue\n\t\t: never\n}\n\n/** Match object spread: scoped extras replace shared keys, preserving unions. */\ntype MergeExtras<TShared, TScoped> = TShared extends unknown\n\t? TScoped extends unknown\n\t\t? Omit<TShared, keyof TScoped> & TScoped\n\t\t: never\n\t: never\n\nexport type HandlerParams<\n\tTDef extends FnDefinition,\n\tTInput,\n\tTKey extends ProcedureKey<TDef>,\n\tTErrors extends ErrorMap = Record<never, never>\n> = DistributiveOmit<\n\tMergeExtras<\n\t\tTDef['extras'],\n\t\tTDef extends { extrasByProcedure: infer E }\n\t\t\t? TKey extends keyof E\n\t\t\t\t? E[TKey]\n\t\t\t\t: object\n\t\t\t: object\n\t>,\n\tHandlerParamKey\n> & {\n\tinput: TInput\n\tcontext: FnContext<TDef, TKey>\n\t/** Calls another procedure with this context and signal, in a child span. */\n\tcall: BoundCall<FnContext<TDef, TKey>>\n\t/** Cancellation is inherited by nested calls; pass to interruptible I/O. */\n\tsignal: AbortSignal | undefined\n\t/** Active OpenTelemetry span, undefined when `createFn({ otel })` is not set. */\n\tspan: TDef['span'] | undefined\n\tlogger: TDef['logger']\n\tlastEventId: string | undefined\n\terrors: ReturnType<\n\t\ttypeof createORPCErrorConstructorMap<\n\t\t\tMergedErrorMap<ErrorMapOf<TDef['procedures'][TKey]>, TErrors>\n\t\t>\n\t>\n}\n\n/** Route options shared by every `fn()` overload. */\nexport type RouteConfig<TTag extends string = string> = Pick<\n\tRoute,\n\tExclude<(typeof ROUTE_OPTION_KEYS)[number], 'tags'>\n> & {\n\t/** Required. Becomes the OpenAPI operationId and the span name (e.g. 'user.create'). */\n\tname: string\n\ttags?: TTag[]\n}\n\nexport type FnRouteOptions<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>,\n\tTInput = unknown,\n\tTErrors extends ErrorMap = Record<never, never>\n> = RouteConfig<TDef['tag']> &\n\tGuardOptions<TDef['guards']> & {\n\t\tmeta?: TDef['meta']\n\t\tstream?: boolean\n\t\terrors?: TErrors\n\t\tguardResolvers?: {\n\t\t\t[K in keyof TDef['guards']]?: (params: {\n\t\t\t\tinput: TInput\n\t\t\t\tcontext: FnContext<TDef, TKey>\n\t\t\t\tsignal: AbortSignal | undefined\n\t\t\t}) => MaybePromise<GuardOptions<TDef['guards']>[K]>\n\t\t}\n\t} & ProcedureOption<TDef, TKey>\n\n/**\n * Which `createFn({ procedures })` builder a route uses. Optional when\n * `createFn` has a `default`; required on every route when it has none.\n */\nexport type ProcedureOption<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>\n> = [TDef['default']] extends [never]\n\t? { procedure: TKey }\n\t: { procedure?: TKey }\n\nexport type FnProcedure<\n\tTDef extends FnDefinition,\n\tTKey extends ProcedureKey<TDef>,\n\tTInputSchema extends Schema<unknown, unknown>,\n\tTOutputSchema extends Schema<unknown, unknown>,\n\tTErrors extends ErrorMap = Record<never, never>\n> = DecoratedProcedure<\n\tInitialContextOf<TDef['procedures'][TKey]>,\n\tFnContext<TDef, TKey>,\n\tTInputSchema,\n\tTOutputSchema,\n\tMergedErrorMap<ErrorMapOf<TDef['procedures'][TKey]>, TErrors>,\n\tMetaOf<TDef['procedures'][TKey]> & {\n\t\t'orpc-fn': StoredFnMeta<TDef['meta'], TKey>\n\t}\n>\n\ntype InputOf<T> = [T] extends [AnySchema] ? InferSchemaOutput<T> : unknown\ntype ReturnOf<TOut, TReturn> = [TOut] extends [AnySchema]\n\t? InferSchemaInput<TOut>\n\t: TReturn\n\n/** `fn()`: four overloads for input/output schema × inferred. */\nexport interface Fn<TDef extends FnDefinition> {\n\t// 1. With input + output schema\n\t<\n\t\tTInput extends AnySchema,\n\t\tTOut extends AnySchema,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput: TInput\n\t\t\toutput: TOut\n\t\t\t// The output schema parses what the handler returns: its input type.\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<\n\t\t\t\t\tTDef,\n\t\t\t\t\tInferSchemaOutput<TInput>,\n\t\t\t\t\tNoInfer<TKey>,\n\t\t\t\t\tTErrors\n\t\t\t\t>\n\t\t\t) => MaybePromise<InferSchemaInput<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey, InferSchemaOutput<TInput>, TErrors>\n\t): FnProcedure<TDef, TKey, TInput, TOut, TErrors>\n\n\t// 2. With input, inferred output\n\t<\n\t\tTInput extends AnySchema,\n\t\tTReturn,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput: TInput\n\t\t\toutput?: undefined\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<\n\t\t\t\t\tTDef,\n\t\t\t\t\tInferSchemaOutput<TInput>,\n\t\t\t\t\tNoInfer<TKey>,\n\t\t\t\t\tTErrors\n\t\t\t\t>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey, InferSchemaOutput<TInput>, TErrors>\n\t): FnProcedure<TDef, TKey, TInput, Schema<TReturn, TReturn>, TErrors>\n\n\t// 3. No input, with output schema\n\t<\n\t\tTOut extends AnySchema,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: undefined\n\t\t\toutput: TOut\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, unknown, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<InferSchemaInput<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey, unknown, TErrors>\n\t): FnProcedure<TDef, TKey, Schema<unknown, unknown>, TOut, TErrors>\n\n\t// 4. No input, inferred output\n\t<\n\t\tTReturn,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: undefined\n\t\t\toutput?: undefined\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, unknown, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey, unknown, TErrors>\n\t): FnProcedure<\n\t\tTDef,\n\t\tTKey,\n\t\tSchema<unknown, unknown>,\n\t\tSchema<TReturn, TReturn>,\n\t\tTErrors\n\t>\n\n\t// 5. Never matches valid code first; it only words the type errors, which\n\t// TypeScript reports against the last overload.\n\t<\n\t\tTReturn,\n\t\tTInput extends AnySchema | undefined = undefined,\n\t\tTOut extends AnySchema | undefined = undefined,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default'],\n\t\tTErrors extends ErrorMap = Record<never, never>\n\t>(\n\t\toptions: {\n\t\t\tinput?: TInput\n\t\t\toutput?: TOut\n\t\t\t// The output schema parses what the handler returns: its input type.\n\t\t\thandler: (\n\t\t\t\tparams: HandlerParams<TDef, InputOf<TInput>, NoInfer<TKey>, TErrors>\n\t\t\t) => MaybePromise<ReturnOf<TOut, TReturn>>\n\t\t} & FnRouteOptions<TDef, TKey, InputOf<TInput>, TErrors>\n\t): FnProcedure<\n\t\tTDef,\n\t\tTKey,\n\t\t[TInput] extends [AnySchema] ? TInput : Schema<unknown, unknown>,\n\t\t[TOut] extends [AnySchema] ? TOut : Schema<TReturn, TReturn>,\n\t\tTErrors\n\t>\n}\n\n/** What `fn.completed` reports, and what `onCompleted` receives. */\nexport type FnCompletedEvent<TContext = unknown, TSpan = SpanLike> = {\n\tname: string\n\tprocedure: string\n\tdurationMs: number\n\tsuccess: boolean\n\t/** False when authentication or input validation prevented handler execution. */\n\thandlerStarted: boolean\n\terror: unknown\n\tinput: unknown\n\tcontext: TContext\n\tspan: TSpan | undefined\n\tmeta: Record<string, unknown>\n}\n\n/** Factory hooks retain the builder key/context relationship. */\nexport type ProcedureHookParams<\n\tTProcedures extends Record<string, BuilderLike>,\n\tTExtra = object\n> = {\n\t[K in keyof TProcedures & string]: TExtra & {\n\t\tprocedure: K\n\t\tcontext: CurrentContextOf<TProcedures[K]>\n\t}\n}[keyof TProcedures & string]\n\nexport type CompletedHookEvent<\n\tTProcedures extends Record<string, BuilderLike>,\n\tTSpan\n> = {\n\t[K in keyof TProcedures & string]: Omit<\n\t\tFnCompletedEvent<unknown, TSpan>,\n\t\t'context' | 'procedure' | 'handlerStarted'\n\t> & { procedure: K } & (\n\t\t\t| { handlerStarted: true; context: CurrentContextOf<TProcedures[K]> }\n\t\t\t| { handlerStarted: false; context: InitialContextOf<TProcedures[K]> }\n\t\t)\n}[keyof TProcedures & string]\n\n/**\n * Intersected into each scoped extras function's return type: rejects index\n * signatures and handler-parameter names at the offending property. A\n * top-level conditional over the whole map broke inference when zero-argument\n * and context-reading functions were mixed.\n */\nexport type ScopedExtrasGuard<T> = (string extends keyof T\n\t? { 'orpc-fn: scoped extras need finite keys': never }\n\t: number extends keyof T\n\t\t? { 'orpc-fn: scoped extras need finite keys': never }\n\t\t: unknown) & { [K in HandlerParamKey]?: never }\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orpc-fn",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Define a backend function once: a typed oRPC procedure with tracing, logging, guards, injected handler extras, nested calls and live queries over Redis.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -74,9 +74,16 @@
|
|
|
74
74
|
"./mcp/sdk": {
|
|
75
75
|
"types": "./dist/mcp/sdk.d.ts",
|
|
76
76
|
"import": "./dist/mcp/sdk.js"
|
|
77
|
+
},
|
|
78
|
+
"./mcp/server": {
|
|
79
|
+
"types": "./dist/mcp/server.d.ts",
|
|
80
|
+
"import": "./dist/mcp/server.js"
|
|
77
81
|
}
|
|
78
82
|
},
|
|
79
83
|
"types": "./dist/index.d.ts",
|
|
84
|
+
"bin": {
|
|
85
|
+
"orpc-fn": "./dist/cli.js"
|
|
86
|
+
},
|
|
80
87
|
"files": [
|
|
81
88
|
"dist",
|
|
82
89
|
"LICENSE",
|
|
@@ -113,7 +120,8 @@
|
|
|
113
120
|
"hono": "^4.0.0",
|
|
114
121
|
"ioredis": "^5.0.0",
|
|
115
122
|
"zod": "^4.0.0",
|
|
116
|
-
"@modelcontextprotocol/sdk": "^1.32.0"
|
|
123
|
+
"@modelcontextprotocol/sdk": "^1.32.0",
|
|
124
|
+
"@modelcontextprotocol/server": "^2.0.0"
|
|
117
125
|
},
|
|
118
126
|
"peerDependenciesMeta": {
|
|
119
127
|
"@mastra/core": {
|
|
@@ -139,13 +147,18 @@
|
|
|
139
147
|
},
|
|
140
148
|
"@modelcontextprotocol/sdk": {
|
|
141
149
|
"optional": true
|
|
150
|
+
},
|
|
151
|
+
"@modelcontextprotocol/server": {
|
|
152
|
+
"optional": true
|
|
142
153
|
}
|
|
143
154
|
},
|
|
144
155
|
"devDependencies": {
|
|
145
156
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
146
157
|
"@biomejs/biome": "^2.2.4",
|
|
147
158
|
"@mastra/core": "1.51.0",
|
|
159
|
+
"@modelcontextprotocol/client": "2.3.0",
|
|
148
160
|
"@modelcontextprotocol/sdk": "1.32.0",
|
|
161
|
+
"@modelcontextprotocol/server": "2.3.0",
|
|
149
162
|
"@opentelemetry/api": "^1.9.0",
|
|
150
163
|
"@orpc/client": "1.14.8",
|
|
151
164
|
"@orpc/contract": "1.14.8",
|
|
@@ -159,7 +172,6 @@
|
|
|
159
172
|
"ioredis": "5.8.2",
|
|
160
173
|
"publint": "^0.3.12",
|
|
161
174
|
"typescript": "^7.0.2",
|
|
162
|
-
"typescript-ast": "npm:typescript@5.7.3",
|
|
163
175
|
"zod": "4.4.3"
|
|
164
176
|
},
|
|
165
177
|
"bugs": {
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// biome-ignore-all lint/suspicious/noConsole: a CLI reports on the console
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises'
|
|
4
|
+
import { resolve } from 'node:path'
|
|
5
|
+
import { pathToFileURL } from 'node:url'
|
|
6
|
+
import { parseArgs } from 'node:util'
|
|
7
|
+
import type { AnyRouter } from '@orpc/server'
|
|
8
|
+
import { createStreamManifestAsync, renderStreamManifest } from './router.js'
|
|
9
|
+
|
|
10
|
+
const usage = `Usage: orpc-fn stream-manifest <module>[#export] --out <file.ts|file.json> [--name streamPaths] [--check]
|
|
11
|
+
|
|
12
|
+
Imports the router (export "default" unless #export is given) and writes the
|
|
13
|
+
paths of its streaming routes for createRpcLink({ streamPaths }). The file is
|
|
14
|
+
only written when its content changes. --check writes nothing and exits 1 when
|
|
15
|
+
the file is missing or stale. Importing the router runs its module code; run
|
|
16
|
+
TypeScript routers with a runtime that loads .ts (bun, tsx, node >= 22.18).`
|
|
17
|
+
|
|
18
|
+
async function run(argv: readonly string[]): Promise<number> {
|
|
19
|
+
const { positionals, values } = parseArgs({
|
|
20
|
+
args: [...argv],
|
|
21
|
+
allowPositionals: true,
|
|
22
|
+
options: {
|
|
23
|
+
out: { type: 'string' },
|
|
24
|
+
name: { type: 'string' },
|
|
25
|
+
check: { type: 'boolean' },
|
|
26
|
+
help: { type: 'boolean', short: 'h' }
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
const [command, target] = positionals
|
|
30
|
+
if (values.help || command !== 'stream-manifest' || !target || !values.out) {
|
|
31
|
+
console.error(usage)
|
|
32
|
+
return values.help ? 0 : 2
|
|
33
|
+
}
|
|
34
|
+
const [modulePath = '', exportName = 'default'] = target.split('#')
|
|
35
|
+
const loaded: Record<string, unknown> = await import(
|
|
36
|
+
pathToFileURL(resolve(modulePath)).href
|
|
37
|
+
)
|
|
38
|
+
const router = loaded[exportName]
|
|
39
|
+
if (!router || typeof router !== 'object') {
|
|
40
|
+
console.error(`orpc-fn: ${modulePath} has no router export "${exportName}"`)
|
|
41
|
+
return 2
|
|
42
|
+
}
|
|
43
|
+
const out = resolve(values.out)
|
|
44
|
+
const source = renderStreamManifest(
|
|
45
|
+
await createStreamManifestAsync(router as AnyRouter),
|
|
46
|
+
{ format: out.endsWith('.json') ? 'json' : 'ts', name: values.name }
|
|
47
|
+
)
|
|
48
|
+
const current = await readFile(out, 'utf8').catch(() => undefined)
|
|
49
|
+
if (current === source) return 0
|
|
50
|
+
if (values.check) {
|
|
51
|
+
console.error(
|
|
52
|
+
`orpc-fn: ${values.out} is stale; rerun without --check to update it`
|
|
53
|
+
)
|
|
54
|
+
return 1
|
|
55
|
+
}
|
|
56
|
+
await writeFile(out, source)
|
|
57
|
+
console.log(`orpc-fn: wrote ${values.out}`)
|
|
58
|
+
return 0
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Exit explicitly: the imported router may hold open database or broker handles.
|
|
62
|
+
run(process.argv.slice(2)).then(
|
|
63
|
+
(code) => process.exit(code),
|
|
64
|
+
(error) => {
|
|
65
|
+
console.error(error)
|
|
66
|
+
process.exit(1)
|
|
67
|
+
}
|
|
68
|
+
)
|
package/src/create-fn.ts
CHANGED
|
@@ -25,6 +25,7 @@ import { readFnMeta } from './meta.js'
|
|
|
25
25
|
import {
|
|
26
26
|
type AttributeValue,
|
|
27
27
|
createTracing,
|
|
28
|
+
errorAttributes,
|
|
28
29
|
errorMessageOf,
|
|
29
30
|
type OtelApiLike,
|
|
30
31
|
type SpanLike,
|
|
@@ -38,7 +39,7 @@ import {
|
|
|
38
39
|
type CurrentContextOf,
|
|
39
40
|
type BuilderLike,
|
|
40
41
|
type FiniteExtras,
|
|
41
|
-
type
|
|
42
|
+
type ScopedExtrasGuard,
|
|
42
43
|
type Fn,
|
|
43
44
|
type FnCompletedEvent,
|
|
44
45
|
type FnDefinition,
|
|
@@ -115,7 +116,7 @@ export type CreateFnOptions<
|
|
|
115
116
|
signal: AbortSignal | undefined
|
|
116
117
|
name: string
|
|
117
118
|
procedure: K
|
|
118
|
-
}) => MaybePromise<TScoped[K]
|
|
119
|
+
}) => MaybePromise<TScoped[K] & ScopedExtrasGuard<NoInfer<TScoped[K]>>>
|
|
119
120
|
}
|
|
120
121
|
/**
|
|
121
122
|
* Checks run before the handler; each key becomes a typed `fn()` option.
|
|
@@ -240,8 +241,7 @@ export function createFn<
|
|
|
240
241
|
TLogger,
|
|
241
242
|
TScoped
|
|
242
243
|
> &
|
|
243
|
-
FiniteExtras<NoInfer<TExtras>>
|
|
244
|
-
FiniteScopedExtras<NoInfer<TScoped>>
|
|
244
|
+
FiniteExtras<NoInfer<TExtras>>
|
|
245
245
|
): FnFactory<
|
|
246
246
|
Definition<
|
|
247
247
|
TProcedures,
|
|
@@ -524,12 +524,7 @@ export function createFn<
|
|
|
524
524
|
procedure: event.procedure,
|
|
525
525
|
duration_ms: event.durationMs,
|
|
526
526
|
status: success ? 'success' : 'failed',
|
|
527
|
-
...(error === undefined
|
|
528
|
-
? {}
|
|
529
|
-
: {
|
|
530
|
-
error_type: error instanceof Error ? error.name : typeof error,
|
|
531
|
-
error_message: errorMessageOf(error)
|
|
532
|
-
})
|
|
527
|
+
...(error === undefined ? {} : errorAttributes(error))
|
|
533
528
|
})
|
|
534
529
|
}
|
|
535
530
|
|