orpc-fn 0.1.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/LICENSE +21 -0
- package/README.md +250 -0
- package/dist/bound-call.d.ts +23 -0
- package/dist/bound-call.d.ts.map +1 -0
- package/dist/bound-call.js +23 -0
- package/dist/bound-call.js.map +1 -0
- package/dist/client.d.ts +44 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +49 -0
- package/dist/client.js.map +1 -0
- package/dist/create-fn.d.ts +97 -0
- package/dist/create-fn.d.ts.map +1 -0
- package/dist/create-fn.js +224 -0
- package/dist/create-fn.js.map +1 -0
- package/dist/expected-client-error.d.ts +11 -0
- package/dist/expected-client-error.d.ts.map +1 -0
- package/dist/expected-client-error.js +21 -0
- package/dist/expected-client-error.js.map +1 -0
- package/dist/expo.d.ts +66 -0
- package/dist/expo.d.ts.map +1 -0
- package/dist/expo.js +74 -0
- package/dist/expo.js.map +1 -0
- package/dist/hono.d.ts +81 -0
- package/dist/hono.d.ts.map +1 -0
- package/dist/hono.js +138 -0
- package/dist/hono.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +47 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +44 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/live/codec.d.ts +9 -0
- package/dist/live/codec.d.ts.map +1 -0
- package/dist/live/codec.js +27 -0
- package/dist/live/codec.js.map +1 -0
- package/dist/live/fn-live.d.ts +155 -0
- package/dist/live/fn-live.d.ts.map +1 -0
- package/dist/live/fn-live.js +210 -0
- package/dist/live/fn-live.js.map +1 -0
- package/dist/live/index.d.ts +4 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +5 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/ioredis.d.ts +29 -0
- package/dist/live/ioredis.d.ts.map +1 -0
- package/dist/live/ioredis.js +49 -0
- package/dist/live/ioredis.js.map +1 -0
- package/dist/live/memory.d.ts +10 -0
- package/dist/live/memory.d.ts.map +1 -0
- package/dist/live/memory.js +45 -0
- package/dist/live/memory.js.map +1 -0
- package/dist/live/pub-sub.d.ts +211 -0
- package/dist/live/pub-sub.d.ts.map +1 -0
- package/dist/live/pub-sub.js +529 -0
- package/dist/live/pub-sub.js.map +1 -0
- package/dist/live/redis-bun.d.ts +26 -0
- package/dist/live/redis-bun.d.ts.map +1 -0
- package/dist/live/redis-bun.js +59 -0
- package/dist/live/redis-bun.js.map +1 -0
- package/dist/live/redis.d.ts +45 -0
- package/dist/live/redis.d.ts.map +1 -0
- package/dist/live/redis.js +214 -0
- package/dist/live/redis.js.map +1 -0
- package/dist/live/transport.d.ts +35 -0
- package/dist/live/transport.d.ts.map +1 -0
- package/dist/live/transport.js +2 -0
- package/dist/live/transport.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +15 -0
- package/dist/logger.js.map +1 -0
- package/dist/mastra.d.ts +44 -0
- package/dist/mastra.d.ts.map +1 -0
- package/dist/mastra.js +78 -0
- package/dist/mastra.js.map +1 -0
- package/dist/mcp.d.ts +39 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +38 -0
- package/dist/mcp.js.map +1 -0
- package/dist/meta.d.ts +35 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +30 -0
- package/dist/meta.js.map +1 -0
- package/dist/otel.d.ts +66 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +63 -0
- package/dist/otel.js.map +1 -0
- package/dist/router.d.ts +13 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +14 -0
- package/dist/router.js.map +1 -0
- package/dist/stream.d.ts +13 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +44 -0
- package/dist/stream.js.map +1 -0
- package/dist/types.d.ts +196 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/package.json +157 -0
- package/src/bound-call.ts +50 -0
- package/src/client.ts +82 -0
- package/src/create-fn.ts +461 -0
- package/src/expected-client-error.ts +23 -0
- package/src/expo.ts +127 -0
- package/src/hono.ts +247 -0
- package/src/index.ts +45 -0
- package/src/json-schema.ts +82 -0
- package/src/live/codec.ts +31 -0
- package/src/live/fn-live.ts +470 -0
- package/src/live/index.ts +31 -0
- package/src/live/ioredis.ts +74 -0
- package/src/live/memory.ts +50 -0
- package/src/live/pub-sub.ts +828 -0
- package/src/live/redis-bun.ts +76 -0
- package/src/live/redis.ts +255 -0
- package/src/live/transport.ts +41 -0
- package/src/logger.ts +28 -0
- package/src/mastra.ts +140 -0
- package/src/mcp.ts +73 -0
- package/src/meta.ts +72 -0
- package/src/otel.ts +151 -0
- package/src/router.ts +15 -0
- package/src/stream.ts +54 -0
- package/src/types.ts +389 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,IAAI,EACJ,MAAM,EACN,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EACX,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,KAAK,EACL,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C;;;;GAIG;AAEH,MAAM,MAAM,WAAW,GAAG;IACzB,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAA;IAC1B,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAA;IACxB,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAA;IAC3B,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAA;IAC5B,OAAO,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAC9D,CAAA;AAGD,uEAAuE;AACvE,MAAM,MAAM,cAAc,CAAC,CAAC,IAC3B,CAAC,SAAS,SAAS,CAClB,MAAM,SAAS,EACf,MAAM,SAAS,EACf,MAAM,YAAY,SAAS,SAAS,EACpC,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,MAAM,CACZ,GACE,gBAAgB,CAAC,YAAY,CAAC,GAC9B,OAAO,CAAA;AAEX,mEAAmE;AACnE,MAAM,MAAM,eAAe,CAAC,CAAC,IAC5B,CAAC,SAAS,SAAS,CAClB,MAAM,SAAS,EACf,MAAM,SAAS,EACf,MAAM,IAAI,EACV,MAAM,aAAa,SAAS,SAAS,EACrC,MAAM,QAAQ,EACd,MAAM,MAAM,CACZ,GACE,iBAAiB,CAAC,aAAa,CAAC,GAChC,OAAO,CAAA;AAEX,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC7B,CAAC,SAAS,SAAS,CAClB,MAAM,QAAQ,EACd,MAAM,SAAS,EACf,MAAM,IAAI,EACV,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,MAAM,CACZ,GACE,QAAQ,GACR,KAAK,CAAA;AAET,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GACvE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,KAAK,CAAA;AAER,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,yJAWe,CAAA;AAE7C;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,mOASvB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE,iGAAiG;AACjG,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,CAAC,OAAO,EAAE;QAClB,KAAK,EAAE,OAAO,CAAA;QACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChC,MAAM,CAAC,EAAE,WAAW,CAAA;KACpB,KAAK,OAAO,CAAA;CACb,KAAK,YAAY,CAAA;AAElB,sEAAsE;AACtE,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,EAAE,QAAQ,SAAS,MAAM,IAAI;KAC1E,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ;CACpC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,SAAS,MAAM,CAAC,GACjD;IAAE,MAAM,EAAE,yDAAyD,CAAA;CAAE,GACrE,MAAM,SAAS,MAAM,CAAC,GACrB;IAAE,MAAM,EAAE,yDAAyD,CAAA;CAAE,GACrE,OAAO,CAAA;AAEX,KAAK,WAAW,CAAC,QAAQ,IAAI,QAAQ,SAAS;IAC7C,OAAO,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,UAAU,CAAA;CACzC,GACE,UAAU,GACV,KAAK,CAAA;AAER,8DAA8D;AAC9D,MAAM,MAAM,gBAAgB,CAAC,QAAQ,IAAI,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEhF,gEAAgE;AAChE,MAAM,MAAM,gBAAgB,CAAC,QAAQ,IACpC,WAAW,CAAC,QAAQ,CAAC,SAAS,SAAS,CACtC,MAAM,SAAS,EACf,MAAM,QAAQ,EACd,MAAM,IAAI,EACV,MAAM,KAAK,EACX,MAAM,QAAQ,EACd,MAAM,MAAM,CACZ,GACE,QAAQ,GACR,KAAK,CAAA;AAET,KAAK,UAAU,CAAC,QAAQ,IACvB,WAAW,CAAC,QAAQ,CAAC,SAAS;IAC7B,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,QAAQ,CAAA;KAAE,CAAA;CAC/C,GACE,CAAC,GACD,QAAQ,CAAA;AACZ,KAAK,MAAM,CAAC,QAAQ,IACnB,WAAW,CAAC,QAAQ,CAAC,SAAS;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,CAAA;KAAE,CAAA;CAAE,GACtE,CAAC,GACD,IAAI,CAAA;AAER;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,YAAY,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,GAC7E,MAAM,CAAA;AAEP,iEAAiE;AACjE,MAAM,MAAM,SAAS,CACpB,IAAI,SAAS,YAAY,EACzB,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,IAC5B,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAE9C,8EAA8E;AAC9E,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,YAAY,IAAI;KACpD,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;CAC7C,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AAErB,MAAM,MAAM,WAAW,CAAC,QAAQ,EAAE,KAAK,IAAI;IAC1C,OAAO,EAAE,QAAQ,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;IACd,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACpB,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;CAC/B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;AAEhF,MAAM,MAAM,YAAY,CAAC,OAAO,IAAI;KAClC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CACzC,KAAK,EAAE,MAAM,MAAM,EACnB,MAAM,EAAE,KAAK,KACT,OAAO,GACT,MAAM,GACN,KAAK;CACR,CAAA;AAED,MAAM,MAAM,aAAa,CACxB,IAAI,SAAS,YAAY,EACzB,MAAM,EACN,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,IAC5B,gBAAgB,CACnB,IAAI,CAAC,QAAQ,CAAC,EACd,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAC3D,GAAG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC9B,6EAA6E;IAC7E,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IACtC,4EAA4E;IAC5E,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;IAC/B,iFAAiF;IACjF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAC9B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;CACtB,CAAA;AAED,qDAAqD;AACrD,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAC3D,KAAK,EACL,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CACnD,GAAG;IACH,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA;CACb,CAAA;AAED,MAAM,MAAM,cAAc,CACzB,IAAI,SAAS,YAAY,EACzB,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,IAC5B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAC3B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAC5B,IAAI,CAAC,MAAM,CAAC,GACZ,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE5B;;;GAGG;AACH,MAAM,MAAM,eAAe,CAC1B,IAAI,SAAS,YAAY,EACzB,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,IAC5B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAClC;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,GACnB;IAAE,SAAS,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AAEvB,MAAM,MAAM,WAAW,CACtB,IAAI,SAAS,YAAY,EACzB,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,EAC/B,YAAY,SAAS,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7C,aAAa,SAAS,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAC3C,kBAAkB,CACrB,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAC1C,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,EACrB,YAAY,EACZ,aAAa,EACb,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EACpC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA;AAED,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;AAC/D,KAAK,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GACpD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GACb,OAAO,CAAA;AAEV,iEAAiE;AACjE,MAAM,WAAW,EAAE,CAAC,IAAI,SAAS,YAAY;IAE5C,CACC,MAAM,SAAS,OAAO,EACtB,IAAI,SAAS,OAAO,EACpB,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAEjD,OAAO,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,IAAI,CAAA;QAEZ,OAAO,EAAE,CACR,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KACxD,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;KAChC,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAC5B,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAGxC,CACC,MAAM,SAAS,OAAO,EACtB,OAAO,EACP,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAEjD,OAAO,EAAE;QACR,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,SAAS,CAAA;QAClB,OAAO,EAAE,CACR,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KACxD,YAAY,CAAC,OAAO,CAAC,CAAA;KAC1B,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAC5B,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAG5D,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EACvE,OAAO,EAAE;QACR,KAAK,CAAC,EAAE,SAAS,CAAA;QACjB,MAAM,EAAE,IAAI,CAAA;QACZ,OAAO,EAAE,CACR,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAC/C,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;KAChC,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAC5B,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;IAG1D,CAAC,OAAO,EAAE,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAC1D,OAAO,EAAE;QACR,KAAK,CAAC,EAAE,SAAS,CAAA;QACjB,MAAM,CAAC,EAAE,SAAS,CAAA;QAClB,OAAO,EAAE,CACR,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAC/C,YAAY,CAAC,OAAO,CAAC,CAAA;KAC1B,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAC5B,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAI9E,CACC,OAAO,EACP,MAAM,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC9C,IAAI,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EAC5C,IAAI,SAAS,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAEjD,OAAO,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,IAAI,CAAA;QAEb,OAAO,EAAE,CACR,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KACvD,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;KAC1C,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,GAC5B,WAAW,CACb,IAAI,EACJ,IAAI,EACJ;QAAC,MAAM;KAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9D;QAAC,IAAI;KAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAC1D,CAAA;CACD;AAED,oEAAoE;AACpE,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK,GAAG,QAAQ,IAAI;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,QAAQ,CAAA;IACjB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAA;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** `fn()` options passed to oRPC's `.route()`; `RouteConfig` is derived from it. */
|
|
2
|
+
export const ROUTE_OPTION_KEYS = [
|
|
3
|
+
'path',
|
|
4
|
+
'method',
|
|
5
|
+
'summary',
|
|
6
|
+
'description',
|
|
7
|
+
'deprecated',
|
|
8
|
+
'successStatus',
|
|
9
|
+
'successDescription',
|
|
10
|
+
'inputStructure',
|
|
11
|
+
'outputStructure',
|
|
12
|
+
'tags'
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* `fn()` option names owned by the route itself. Guard and meta keys must not
|
|
16
|
+
* reuse them: such an option would be read as the route option and the guard
|
|
17
|
+
* would never run.
|
|
18
|
+
*/
|
|
19
|
+
export const RESERVED_OPTION_KEYS = [
|
|
20
|
+
...ROUTE_OPTION_KEYS,
|
|
21
|
+
'name',
|
|
22
|
+
'procedure',
|
|
23
|
+
'input',
|
|
24
|
+
'output',
|
|
25
|
+
'handler',
|
|
26
|
+
'live',
|
|
27
|
+
'operationId'
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgFA,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;CACJ,CAAA","sourcesContent":["import type {\n\tAnySchema,\n\tErrorMap,\n\tInferSchemaInput,\n\tInferSchemaOutput,\n\tMeta,\n\tSchema\n} from '@orpc/contract'\nimport type {\n\tAnyProcedure,\n\tDecoratedProcedure,\n\tProcedure,\n\tRoute\n} from '@orpc/server'\nimport type { ZodType, z } from 'zod'\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 and meta 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] as const\n\nexport type ReservedOptionKey = (typeof RESERVED_OPTION_KEYS)[number]\n\n/** @internal Builds one route from a `procedures` builder; shared by `fn` and `createPubSub`. */\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\thandler: (options: {\n\t\tinput: unknown\n\t\tcontext: Record<string, unknown>\n\t\tsignal?: AbortSignal\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> = string extends keyof T\n\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t: number extends keyof T\n\t\t? { extras: 'orpc-fn: extras need known keys, not an index signature' }\n\t\t: unknown\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\ntype ErrorMapOf<TBuilder> =\n\tProcedureOf<TBuilder> extends {\n\t\t'~orpc': { errorMap: infer T extends ErrorMap }\n\t}\n\t\t? T\n\t\t: ErrorMap\ntype MetaOf<TBuilder> =\n\tProcedureOf<TBuilder> extends { '~orpc': { meta: infer T extends Meta } }\n\t\t? T\n\t\t: Meta\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\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 */\nexport type Guard<TValue, TParams> = (value: TValue, params: TParams) => unknown\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\nexport type HandlerParams<\n\tTDef extends FnDefinition,\n\tTInput,\n\tTKey extends ProcedureKey<TDef>\n> = DistributiveOmit<\n\tTDef['extras'],\n\t'input' | 'context' | 'call' | 'signal' | 'span' | 'logger'\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}\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> = RouteConfig<TDef['tag']> &\n\tGuardOptions<TDef['guards']> &\n\tTDef['meta'] &\n\tProcedureOption<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> = DecoratedProcedure<\n\tInitialContextOf<TDef['procedures'][TKey]>,\n\tFnContext<TDef, TKey>,\n\tTInputSchema,\n\tTOutputSchema,\n\tErrorMapOf<TDef['procedures'][TKey]>,\n\tMetaOf<TDef['procedures'][TKey]>\n>\n\ntype InputOf<T> = [T] extends [ZodType] ? z.output<T> : unknown\ntype ReturnOf<TOut, TReturn> = [TOut] extends [ZodType]\n\t? z.input<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 ZodType,\n\t\tTOut extends ZodType,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default']\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, z.output<TInput>, NoInfer<TKey>>\n\t\t\t) => MaybePromise<z.input<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey>\n\t): FnProcedure<TDef, TKey, TInput, TOut>\n\n\t// 2. With input, inferred output\n\t<\n\t\tTInput extends ZodType,\n\t\tTReturn,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default']\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<TDef, z.output<TInput>, NoInfer<TKey>>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey>\n\t): FnProcedure<TDef, TKey, TInput, Schema<TReturn, TReturn>>\n\n\t// 3. No input, with output schema\n\t<TOut extends ZodType, TKey extends ProcedureKey<TDef> = TDef['default']>(\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>>\n\t\t\t) => MaybePromise<z.input<TOut>>\n\t\t} & FnRouteOptions<TDef, TKey>\n\t): FnProcedure<TDef, TKey, Schema<unknown, unknown>, TOut>\n\n\t// 4. No input, inferred output\n\t<TReturn, TKey extends ProcedureKey<TDef> = TDef['default']>(\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>>\n\t\t\t) => MaybePromise<TReturn>\n\t\t} & FnRouteOptions<TDef, TKey>\n\t): FnProcedure<TDef, TKey, Schema<unknown, unknown>, Schema<TReturn, TReturn>>\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 ZodType | undefined = undefined,\n\t\tTOut extends ZodType | undefined = undefined,\n\t\tTKey extends ProcedureKey<TDef> = TDef['default']\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>>\n\t\t\t) => MaybePromise<ReturnOf<TOut, TReturn>>\n\t\t} & FnRouteOptions<TDef, TKey>\n\t): FnProcedure<\n\t\tTDef,\n\t\tTKey,\n\t\t[TInput] extends [ZodType] ? TInput : Schema<unknown, unknown>,\n\t\t[TOut] extends [ZodType] ? TOut : Schema<TReturn, TReturn>\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\terror: unknown\n\tinput: unknown\n\tcontext: TContext\n\tspan: TSpan | undefined\n\tmeta: Record<string, unknown>\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "orpc-fn",
|
|
3
|
+
"version": "0.1.0",
|
|
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
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Hans Kristoffer Hansen",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/HansKristoffer/orpc-fn.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/HansKristoffer/orpc-fn#readme",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"orpc",
|
|
16
|
+
"rpc",
|
|
17
|
+
"zod",
|
|
18
|
+
"opentelemetry",
|
|
19
|
+
"pubsub",
|
|
20
|
+
"redis",
|
|
21
|
+
"live-query",
|
|
22
|
+
"mastra",
|
|
23
|
+
"mcp",
|
|
24
|
+
"hono",
|
|
25
|
+
"typescript",
|
|
26
|
+
"tanstack-query",
|
|
27
|
+
"expo",
|
|
28
|
+
"react-native"
|
|
29
|
+
],
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=20"
|
|
32
|
+
},
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./live": {
|
|
39
|
+
"types": "./dist/live/index.d.ts",
|
|
40
|
+
"import": "./dist/live/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./live/memory": {
|
|
43
|
+
"types": "./dist/live/memory.d.ts",
|
|
44
|
+
"import": "./dist/live/memory.js"
|
|
45
|
+
},
|
|
46
|
+
"./live/redis-bun": {
|
|
47
|
+
"types": "./dist/live/redis-bun.d.ts",
|
|
48
|
+
"import": "./dist/live/redis-bun.js"
|
|
49
|
+
},
|
|
50
|
+
"./live/ioredis": {
|
|
51
|
+
"types": "./dist/live/ioredis.d.ts",
|
|
52
|
+
"import": "./dist/live/ioredis.js"
|
|
53
|
+
},
|
|
54
|
+
"./mastra": {
|
|
55
|
+
"types": "./dist/mastra.d.ts",
|
|
56
|
+
"import": "./dist/mastra.js"
|
|
57
|
+
},
|
|
58
|
+
"./mcp": {
|
|
59
|
+
"types": "./dist/mcp.d.ts",
|
|
60
|
+
"import": "./dist/mcp.js"
|
|
61
|
+
},
|
|
62
|
+
"./hono": {
|
|
63
|
+
"types": "./dist/hono.d.ts",
|
|
64
|
+
"import": "./dist/hono.js"
|
|
65
|
+
},
|
|
66
|
+
"./client": {
|
|
67
|
+
"types": "./dist/client.d.ts",
|
|
68
|
+
"import": "./dist/client.js"
|
|
69
|
+
},
|
|
70
|
+
"./expo": {
|
|
71
|
+
"types": "./dist/expo.d.ts",
|
|
72
|
+
"import": "./dist/expo.js"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"types": "./dist/index.d.ts",
|
|
76
|
+
"files": [
|
|
77
|
+
"dist",
|
|
78
|
+
"LICENSE",
|
|
79
|
+
"README.md",
|
|
80
|
+
"src/**/*.ts",
|
|
81
|
+
"!src/**/*.test.ts"
|
|
82
|
+
],
|
|
83
|
+
"publishConfig": {
|
|
84
|
+
"access": "public"
|
|
85
|
+
},
|
|
86
|
+
"scripts": {
|
|
87
|
+
"build": "bun scripts/build.ts",
|
|
88
|
+
"prepublishOnly": "bun run build",
|
|
89
|
+
"test": "bun test",
|
|
90
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p tests/consumers/tsconfig.json",
|
|
91
|
+
"lint": "bun run typecheck && biome check",
|
|
92
|
+
"lint:write": "bun run typecheck && biome check --write",
|
|
93
|
+
"attw": "attw --pack . --profile esm-only",
|
|
94
|
+
"publint": "publint",
|
|
95
|
+
"test:consumers": "bun scripts/check-consumers.ts",
|
|
96
|
+
"verify:package": "node scripts/verify-package.mjs"
|
|
97
|
+
},
|
|
98
|
+
"peerDependencies": {
|
|
99
|
+
"@mastra/core": "^1.51.0",
|
|
100
|
+
"@opentelemetry/api": "^1.9.0",
|
|
101
|
+
"@orpc/client": "^1.14.0",
|
|
102
|
+
"@orpc/contract": "^1.14.0",
|
|
103
|
+
"@orpc/json-schema": "^1.14.0",
|
|
104
|
+
"@orpc/openapi": "^1.14.0",
|
|
105
|
+
"@orpc/server": "^1.14.0",
|
|
106
|
+
"@orpc/zod": "^1.14.0",
|
|
107
|
+
"hono": "^4.0.0",
|
|
108
|
+
"ioredis": "^5.0.0",
|
|
109
|
+
"zod": "^4.0.0"
|
|
110
|
+
},
|
|
111
|
+
"peerDependenciesMeta": {
|
|
112
|
+
"@mastra/core": {
|
|
113
|
+
"optional": true
|
|
114
|
+
},
|
|
115
|
+
"@opentelemetry/api": {
|
|
116
|
+
"optional": true
|
|
117
|
+
},
|
|
118
|
+
"@orpc/json-schema": {
|
|
119
|
+
"optional": true
|
|
120
|
+
},
|
|
121
|
+
"@orpc/openapi": {
|
|
122
|
+
"optional": true
|
|
123
|
+
},
|
|
124
|
+
"@orpc/zod": {
|
|
125
|
+
"optional": true
|
|
126
|
+
},
|
|
127
|
+
"hono": {
|
|
128
|
+
"optional": true
|
|
129
|
+
},
|
|
130
|
+
"ioredis": {
|
|
131
|
+
"optional": true
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
"devDependencies": {
|
|
135
|
+
"@arethetypeswrong/cli": "^0.18.2",
|
|
136
|
+
"@biomejs/biome": "^2.2.4",
|
|
137
|
+
"@mastra/core": "1.51.0",
|
|
138
|
+
"@opentelemetry/api": "^1.9.0",
|
|
139
|
+
"@orpc/client": "1.14.8",
|
|
140
|
+
"@orpc/contract": "1.14.8",
|
|
141
|
+
"@orpc/json-schema": "1.14.8",
|
|
142
|
+
"@orpc/openapi": "1.14.8",
|
|
143
|
+
"@orpc/server": "1.14.8",
|
|
144
|
+
"@orpc/zod": "1.14.8",
|
|
145
|
+
"@types/bun": "^1.2.0",
|
|
146
|
+
"@types/node": "^22.0.0",
|
|
147
|
+
"hono": "^4.12.31",
|
|
148
|
+
"ioredis": "5.8.2",
|
|
149
|
+
"publint": "^0.3.12",
|
|
150
|
+
"typescript": "^7.0.2",
|
|
151
|
+
"zod": "4.4.3"
|
|
152
|
+
},
|
|
153
|
+
"bugs": {
|
|
154
|
+
"url": "https://github.com/HansKristoffer/orpc-fn/issues"
|
|
155
|
+
},
|
|
156
|
+
"packageManager": "bun@1.4.2"
|
|
157
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type AnyProcedure, call } from '@orpc/server'
|
|
2
|
+
import { readFnMeta } from './meta.js'
|
|
3
|
+
import { createTracing, type Tracing } from './otel.js'
|
|
4
|
+
import type {
|
|
5
|
+
ProcedureContext,
|
|
6
|
+
ProcedureInput,
|
|
7
|
+
ProcedureOutput
|
|
8
|
+
} from './types.js'
|
|
9
|
+
|
|
10
|
+
/** Rejects a procedure whose context the caller's context does not satisfy. */
|
|
11
|
+
type ContextCheck<TContext, T> = [TContext] extends [ProcedureContext<T>]
|
|
12
|
+
? unknown
|
|
13
|
+
: {
|
|
14
|
+
'orpc-fn: the calling context does not satisfy this procedure': ProcedureContext<T>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Calls another procedure with the caller's context and signal. `TContext` is
|
|
19
|
+
* the caller's context; the callee must accept it.
|
|
20
|
+
*/
|
|
21
|
+
// biome-ignore lint/suspicious/noExplicitAny: an unbound call accepts any procedure
|
|
22
|
+
export type BoundCall<TContext = any> = <T extends AnyProcedure>(
|
|
23
|
+
procedure: T & ContextCheck<TContext, T>,
|
|
24
|
+
input: ProcedureInput<T>
|
|
25
|
+
) => Promise<ProcedureOutput<T>>
|
|
26
|
+
|
|
27
|
+
const noTracing = createTracing(undefined)
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Creates a bound call: nested calls keep the caller's context and abort
|
|
31
|
+
* signal and run inside a `call: <name>` child span, so the trace shows the
|
|
32
|
+
* whole call tree. oRPC's `call` runs the callee's own middleware and guards.
|
|
33
|
+
*
|
|
34
|
+
* Handlers get one as `call`. Outside a handler (seeders, tests) use
|
|
35
|
+
* `createCall` from `createFn`, which traces with the instance's OpenTelemetry.
|
|
36
|
+
*/
|
|
37
|
+
export function createBoundCall<TContext>(
|
|
38
|
+
context: TContext,
|
|
39
|
+
signal?: AbortSignal,
|
|
40
|
+
tracing: Tracing = noTracing
|
|
41
|
+
): BoundCall<TContext> {
|
|
42
|
+
return ((procedure: AnyProcedure, input: unknown) => {
|
|
43
|
+
const name = readFnMeta(procedure).name ?? 'unknown_procedure'
|
|
44
|
+
return tracing.inSpan(`call: ${name}`, 'INTERNAL', async (span) => {
|
|
45
|
+
signal?.throwIfAborted()
|
|
46
|
+
span?.setAttribute('rpc.method', name)
|
|
47
|
+
return call(procedure, input, signal ? { context, signal } : { context })
|
|
48
|
+
})
|
|
49
|
+
}) as BoundCall<TContext>
|
|
50
|
+
}
|
package/src/client.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type ClientContext, ORPCError, type ORPCErrorCode } from '@orpc/client'
|
|
2
|
+
import { RPCLink, type RPCLinkOptions } from '@orpc/client/fetch'
|
|
3
|
+
import { BatchLinkPlugin } from '@orpc/client/plugins'
|
|
4
|
+
|
|
5
|
+
type BatchOptions<T extends ClientContext> = ConstructorParameters<
|
|
6
|
+
typeof BatchLinkPlugin<T>
|
|
7
|
+
>[0]
|
|
8
|
+
|
|
9
|
+
export type CreateRpcLinkOptions<T extends ClientContext> =
|
|
10
|
+
RPCLinkOptions<T> & {
|
|
11
|
+
/**
|
|
12
|
+
* Collapse parallel calls into one HTTP request, matching `mountOrpc`'s
|
|
13
|
+
* server-side batching. Default: true (25 calls). Pass false to turn off.
|
|
14
|
+
*
|
|
15
|
+
* A batch is one HTTP request, so it carries one client context. By
|
|
16
|
+
* default only calls without a client context are batched; pass
|
|
17
|
+
* `groups` to batch calls that share a context (e.g. a token).
|
|
18
|
+
*/
|
|
19
|
+
batch?:
|
|
20
|
+
| boolean
|
|
21
|
+
| {
|
|
22
|
+
maxSize?: number
|
|
23
|
+
/** Calls that must not be batched. Default: {@link isSubscriptionPath}. */
|
|
24
|
+
exclude?: (path: readonly string[]) => boolean
|
|
25
|
+
groups?: BatchOptions<T>['groups']
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Streaming responses cannot be batched, and the request does not say a
|
|
31
|
+
* response will stream - so streaming routes are recognised by name. The
|
|
32
|
+
* default treats any path segment containing `subscribe` as one (the
|
|
33
|
+
* convention `fnLive` routers use: `{ list, subscribe }`).
|
|
34
|
+
*/
|
|
35
|
+
export const isSubscriptionPath = (path: readonly string[]) =>
|
|
36
|
+
path.some((segment) => segment.toLowerCase().includes('subscribe'))
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* `RPCLink` with request batching: a page-load burst becomes one request
|
|
40
|
+
* instead of many queued on the server's event loop.
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* const client: RouterClient<typeof router> = createORPCClient(createRpcLink({ url }))
|
|
44
|
+
* export const orpc = createTanstackQueryUtils(client)
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export function createRpcLink<T extends ClientContext = ClientContext>(
|
|
48
|
+
options: CreateRpcLinkOptions<T>
|
|
49
|
+
): RPCLink<T> {
|
|
50
|
+
const { batch = true, plugins = [], ...rest } = options
|
|
51
|
+
if (batch === false) return new RPCLink<T>({ ...rest, plugins })
|
|
52
|
+
const {
|
|
53
|
+
maxSize = 25,
|
|
54
|
+
exclude = isSubscriptionPath,
|
|
55
|
+
groups
|
|
56
|
+
} = batch === true ? {} : batch
|
|
57
|
+
return new RPCLink<T>({
|
|
58
|
+
...rest,
|
|
59
|
+
plugins: [
|
|
60
|
+
new BatchLinkPlugin<T>({
|
|
61
|
+
maxSize,
|
|
62
|
+
groups: groups ?? [
|
|
63
|
+
// Only context-free calls reach this group (see `exclude` below),
|
|
64
|
+
// so the batch's empty context is exactly theirs.
|
|
65
|
+
{ condition: () => true, context: {} as T }
|
|
66
|
+
],
|
|
67
|
+
exclude: ({ path, context }) =>
|
|
68
|
+
exclude(path) ||
|
|
69
|
+
(groups === undefined && Object.keys(context).length > 0)
|
|
70
|
+
}),
|
|
71
|
+
...plugins
|
|
72
|
+
]
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Typed check for a route error on the client. The RPC link rebuilds thrown
|
|
78
|
+
* route errors as `ORPCError`, so `instanceof` plus `code` is the contract.
|
|
79
|
+
*/
|
|
80
|
+
export function hasOrpcErrorCode(error: unknown, code: ORPCErrorCode): boolean {
|
|
81
|
+
return error instanceof ORPCError && error.code === code
|
|
82
|
+
}
|