@trpc/client 11.4.1 → 11.4.2-canary.1

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.
Files changed (82) hide show
  1. package/dist/TRPCClientError-CjKyS10w.mjs +47 -0
  2. package/dist/{TRPCClientError-COkhCKf3.mjs.map → TRPCClientError-CjKyS10w.mjs.map} +1 -1
  3. package/dist/{TRPCClientError-CGgRtttT.cjs → TRPCClientError-Dey88Uiy.cjs} +15 -24
  4. package/dist/{httpBatchLink-DIfnmmcu.mjs → httpBatchLink-BfUVex5U.mjs} +33 -24
  5. package/dist/{httpBatchLink-DIfnmmcu.mjs.map → httpBatchLink-BfUVex5U.mjs.map} +1 -1
  6. package/dist/{httpBatchLink-CIC9PZ_Z.cjs → httpBatchLink-JKXaA6dG.cjs} +32 -23
  7. package/dist/{httpBatchLink.d-BN2Iw_cK.d.mts → httpBatchLink.d-CAaMQOtX.d.mts} +3 -3
  8. package/dist/{httpBatchLink.d-BN2Iw_cK.d.mts.map → httpBatchLink.d-CAaMQOtX.d.mts.map} +1 -1
  9. package/dist/{httpLink-BbVj_TgM.cjs → httpLink-CbZZVG--.cjs} +10 -11
  10. package/dist/{httpLink-9bpwQ15c.mjs → httpLink-Dptv1zSJ.mjs} +11 -12
  11. package/dist/{httpLink-9bpwQ15c.mjs.map → httpLink-Dptv1zSJ.mjs.map} +1 -1
  12. package/dist/{httpLink.d-CTSOARfE.d.mts → httpLink.d-B0nHKy2W.d.mts} +3 -3
  13. package/dist/{httpLink.d-CTSOARfE.d.mts.map → httpLink.d-B0nHKy2W.d.mts.map} +1 -1
  14. package/dist/{httpUtils-3pbQzhUL.mjs → httpUtils-ZiawzpnD.mjs} +12 -13
  15. package/dist/{httpUtils-3pbQzhUL.mjs.map → httpUtils-ZiawzpnD.mjs.map} +1 -1
  16. package/dist/{httpUtils-Buf6jCgh.cjs → httpUtils-rn2lxsJO.cjs} +12 -12
  17. package/dist/{httpUtils.d-C8wPxU79.d.mts → httpUtils.d-cQRQZrfo.d.mts} +3 -3
  18. package/dist/{httpUtils.d-C8wPxU79.d.mts.map → httpUtils.d-cQRQZrfo.d.mts.map} +1 -1
  19. package/dist/index.cjs +268 -104
  20. package/dist/index.d.mts +9 -9
  21. package/dist/index.mjs +269 -131
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/links/httpBatchLink.cjs +5 -4
  24. package/dist/links/httpBatchLink.d.mts +5 -5
  25. package/dist/links/httpBatchLink.mjs +5 -4
  26. package/dist/links/httpLink.cjs +5 -4
  27. package/dist/links/httpLink.d.mts +5 -5
  28. package/dist/links/httpLink.mjs +5 -4
  29. package/dist/links/loggerLink.cjs +2 -1
  30. package/dist/links/loggerLink.d.mts +3 -3
  31. package/dist/links/loggerLink.mjs +2 -1
  32. package/dist/links/splitLink.d.mts +3 -3
  33. package/dist/links/splitLink.mjs +1 -1
  34. package/dist/links/wsLink/wsLink.cjs +4 -3
  35. package/dist/links/wsLink/wsLink.d.mts +4 -4
  36. package/dist/links/wsLink/wsLink.mjs +4 -3
  37. package/dist/{loggerLink-CsDfg5Bb.cjs → loggerLink-CuYvRzyH.cjs} +14 -21
  38. package/dist/{loggerLink-PGBSQFcR.mjs → loggerLink-ineCN1PO.mjs} +15 -22
  39. package/dist/{loggerLink-PGBSQFcR.mjs.map → loggerLink-ineCN1PO.mjs.map} +1 -1
  40. package/dist/{loggerLink.d-CZjK1CXm.d.mts → loggerLink.d-g_uYSbus.d.mts} +2 -2
  41. package/dist/{loggerLink.d-CZjK1CXm.d.mts.map → loggerLink.d-g_uYSbus.d.mts.map} +1 -1
  42. package/dist/objectSpread2-Bsvh_OqM.cjs +100 -0
  43. package/dist/objectSpread2-BvkFp-_Y.mjs +114 -0
  44. package/dist/objectSpread2-BvkFp-_Y.mjs.map +1 -0
  45. package/dist/{splitLink-BVblHq4n.mjs → splitLink-B7Cuf2c_.mjs} +1 -1
  46. package/dist/{splitLink-BVblHq4n.mjs.map → splitLink-B7Cuf2c_.mjs.map} +1 -1
  47. package/dist/{splitLink.d-BAqgq0NG.d.mts → splitLink.d-od8YIcex.d.mts} +2 -2
  48. package/dist/{splitLink.d-BAqgq0NG.d.mts.map → splitLink.d-od8YIcex.d.mts.map} +1 -1
  49. package/dist/{subscriptions.d-U92STdZl.d.mts → subscriptions.d-Dlr1nWGD.d.mts} +1 -1
  50. package/dist/{subscriptions.d-U92STdZl.d.mts.map → subscriptions.d-Dlr1nWGD.d.mts.map} +1 -1
  51. package/dist/{types.d-DXbqQLCC.d.mts → types.d-POgEdUB1.d.mts} +2 -2
  52. package/dist/{types.d-DXbqQLCC.d.mts.map → types.d-POgEdUB1.d.mts.map} +1 -1
  53. package/dist/{unstable-internals-DU4WecoG.mjs → unstable-internals-Bg7n9BBj.mjs} +1 -1
  54. package/dist/{unstable-internals-DU4WecoG.mjs.map → unstable-internals-Bg7n9BBj.mjs.map} +1 -1
  55. package/dist/unstable-internals.cjs +1 -1
  56. package/dist/{unstable-internals.d-DyLd-B0J.d.mts → unstable-internals.d-BOmV7EK1.d.mts} +1 -1
  57. package/dist/{unstable-internals.d-DyLd-B0J.d.mts.map → unstable-internals.d-BOmV7EK1.d.mts.map} +1 -1
  58. package/dist/unstable-internals.d.mts +2 -2
  59. package/dist/unstable-internals.mjs +1 -1
  60. package/dist/{wsLink-DhJ50EC5.cjs → wsLink-BcTLPVgc.cjs} +93 -106
  61. package/dist/{wsLink-DbSHOzlB.mjs → wsLink-H5IjZfJW.mjs} +94 -107
  62. package/dist/wsLink-H5IjZfJW.mjs.map +1 -0
  63. package/dist/{wsLink.d-BqO7ltN_.d.mts → wsLink.d-BZxAJRBO.d.mts} +4 -4
  64. package/dist/{wsLink.d-BqO7ltN_.d.mts.map → wsLink.d-BZxAJRBO.d.mts.map} +1 -1
  65. package/package.json +4 -4
  66. package/dist/TRPCClientError-COkhCKf3.mjs +0 -56
  67. package/dist/wsLink-DbSHOzlB.mjs.map +0 -1
  68. package/links/httpBatchLink/index.d.ts +0 -1
  69. package/links/httpBatchLink/index.js +0 -1
  70. package/links/httpLink/index.d.ts +0 -1
  71. package/links/httpLink/index.js +0 -1
  72. package/links/loggerLink/index.d.ts +0 -1
  73. package/links/loggerLink/index.js +0 -1
  74. package/links/splitLink/index.d.ts +0 -1
  75. package/links/splitLink/index.js +0 -1
  76. package/links/wsLink/index.d.ts +0 -1
  77. package/links/wsLink/index.js +0 -1
  78. package/links/wsLink/wsLink/index.d.ts +0 -1
  79. package/links/wsLink/wsLink/index.js +0 -1
  80. package/unstable-internals/index.d.ts +0 -1
  81. package/unstable-internals/index.js +0 -1
  82. /package/dist/{unstable-internals-CYBH4jbF.cjs → unstable-internals-M84gUQCV.cjs} +0 -0
@@ -0,0 +1,47 @@
1
+ import { __toESM, require_defineProperty, require_objectSpread2 } from "./objectSpread2-BvkFp-_Y.mjs";
2
+ import { isObject } from "@trpc/server/unstable-core-do-not-import";
3
+
4
+ //#region src/TRPCClientError.ts
5
+ var import_defineProperty = __toESM(require_defineProperty(), 1);
6
+ var import_objectSpread2 = __toESM(require_objectSpread2(), 1);
7
+ function isTRPCClientError(cause) {
8
+ return cause instanceof TRPCClientError;
9
+ }
10
+ function isTRPCErrorResponse(obj) {
11
+ return isObject(obj) && isObject(obj["error"]) && typeof obj["error"]["code"] === "number" && typeof obj["error"]["message"] === "string";
12
+ }
13
+ function getMessageFromUnknownError(err, fallback) {
14
+ if (typeof err === "string") return err;
15
+ if (isObject(err) && typeof err["message"] === "string") return err["message"];
16
+ return fallback;
17
+ }
18
+ var TRPCClientError = class TRPCClientError extends Error {
19
+ constructor(message, opts) {
20
+ var _opts$result, _opts$result2;
21
+ const cause = opts === null || opts === void 0 ? void 0 : opts.cause;
22
+ super(message, { cause });
23
+ (0, import_defineProperty.default)(this, "cause", void 0);
24
+ (0, import_defineProperty.default)(this, "shape", void 0);
25
+ (0, import_defineProperty.default)(this, "data", void 0);
26
+ (0, import_defineProperty.default)(this, "meta", void 0);
27
+ this.meta = opts === null || opts === void 0 ? void 0 : opts.meta;
28
+ this.cause = cause;
29
+ this.shape = opts === null || opts === void 0 || (_opts$result = opts.result) === null || _opts$result === void 0 ? void 0 : _opts$result.error;
30
+ this.data = opts === null || opts === void 0 || (_opts$result2 = opts.result) === null || _opts$result2 === void 0 ? void 0 : _opts$result2.error.data;
31
+ this.name = "TRPCClientError";
32
+ Object.setPrototypeOf(this, TRPCClientError.prototype);
33
+ }
34
+ static from(_cause, opts = {}) {
35
+ const cause = _cause;
36
+ if (isTRPCClientError(cause)) {
37
+ if (opts.meta) cause.meta = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, cause.meta), opts.meta);
38
+ return cause;
39
+ }
40
+ if (isTRPCErrorResponse(cause)) return new TRPCClientError(cause.error.message, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { result: cause }));
41
+ return new TRPCClientError(getMessageFromUnknownError(cause, "Unknown error"), (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { cause }));
42
+ }
43
+ };
44
+
45
+ //#endregion
46
+ export { TRPCClientError, isTRPCClientError };
47
+ //# sourceMappingURL=TRPCClientError-CjKyS10w.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TRPCClientError-COkhCKf3.mjs","names":["cause: unknown","obj: unknown","err: unknown","fallback: string","message: string","opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n }","_cause: Error | TRPCErrorResponse<any> | object","opts: { meta?: Record<string, unknown> }"],"sources":["../src/TRPCClientError.ts"],"sourcesContent":["import type {\n inferClientTypes,\n InferrableClientTypes,\n Maybe,\n TRPCErrorResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n isObject,\n type DefaultErrorShape,\n} from '@trpc/server/unstable-core-do-not-import';\n\ntype inferErrorShape<TInferrable extends InferrableClientTypes> =\n inferClientTypes<TInferrable>['errorShape'];\nexport interface TRPCClientErrorBase<TShape extends DefaultErrorShape> {\n readonly message: string;\n readonly shape: Maybe<TShape>;\n readonly data: Maybe<TShape['data']>;\n}\nexport type TRPCClientErrorLike<TInferrable extends InferrableClientTypes> =\n TRPCClientErrorBase<inferErrorShape<TInferrable>>;\n\nexport function isTRPCClientError<TInferrable extends InferrableClientTypes>(\n cause: unknown,\n): cause is TRPCClientError<TInferrable> {\n return cause instanceof TRPCClientError;\n}\n\nfunction isTRPCErrorResponse(obj: unknown): obj is TRPCErrorResponse<any> {\n return (\n isObject(obj) &&\n isObject(obj['error']) &&\n typeof obj['error']['code'] === 'number' &&\n typeof obj['error']['message'] === 'string'\n );\n}\n\nfunction getMessageFromUnknownError(err: unknown, fallback: string): string {\n if (typeof err === 'string') {\n return err;\n }\n if (isObject(err) && typeof err['message'] === 'string') {\n return err['message'];\n }\n return fallback;\n}\n\nexport class TRPCClientError<TRouterOrProcedure extends InferrableClientTypes>\n extends Error\n implements TRPCClientErrorBase<inferErrorShape<TRouterOrProcedure>>\n{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause;\n public readonly shape: Maybe<inferErrorShape<TRouterOrProcedure>>;\n public readonly data: Maybe<inferErrorShape<TRouterOrProcedure>['data']>;\n\n /**\n * Additional meta data about the error\n * In the case of HTTP-errors, we'll have `response` and potentially `responseJSON` here\n */\n public meta;\n\n constructor(\n message: string,\n opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n },\n ) {\n const cause = opts?.cause;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause });\n\n this.meta = opts?.meta;\n\n this.cause = cause;\n this.shape = opts?.result?.error;\n this.data = opts?.result?.error.data;\n this.name = 'TRPCClientError';\n\n Object.setPrototypeOf(this, TRPCClientError.prototype);\n }\n\n public static from<TRouterOrProcedure extends InferrableClientTypes>(\n _cause: Error | TRPCErrorResponse<any> | object,\n opts: { meta?: Record<string, unknown> } = {},\n ): TRPCClientError<TRouterOrProcedure> {\n const cause = _cause as unknown;\n\n if (isTRPCClientError(cause)) {\n if (opts.meta) {\n // Decorate with meta error data\n cause.meta = {\n ...cause.meta,\n ...opts.meta,\n };\n }\n return cause;\n }\n if (isTRPCErrorResponse(cause)) {\n return new TRPCClientError(cause.error.message, {\n ...opts,\n result: cause,\n });\n }\n return new TRPCClientError(\n getMessageFromUnknownError(cause, 'Unknown error'),\n {\n ...opts,\n cause: cause as any,\n },\n );\n }\n}\n"],"mappings":";;;AAqBA,SAAgB,kBACdA,OACuC;AACvC,QAAO,iBAAiB;AACzB;AAED,SAAS,oBAAoBC,KAA6C;AACxE,QACE,SAAS,IAAI,IACb,SAAS,IAAI,SAAS,WACf,IAAI,SAAS,YAAY,mBACzB,IAAI,SAAS,eAAe;AAEtC;AAED,SAAS,2BAA2BC,KAAcC,UAA0B;AAC1E,YAAW,QAAQ,SACjB,QAAO;AAET,KAAI,SAAS,IAAI,WAAW,IAAI,eAAe,SAC7C,QAAO,IAAI;AAEb,QAAO;AACR;AAED,IAAa,kBAAb,MAAa,wBACH,MAEV;CAGE,AAAyB;CACzB,AAAgB;CAChB,AAAgB;;;;;CAMhB,AAAO;CAEP,YACEC,SACAC,MAKA;EACA,MAAM,QAAQ,MAAM;AAIpB,QAAM,SAAS,EAAE,MAAO,EAAC;AAEzB,OAAK,OAAO,MAAM;AAElB,OAAK,QAAQ;AACb,OAAK,QAAQ,MAAM,QAAQ;AAC3B,OAAK,OAAO,MAAM,QAAQ,MAAM;AAChC,OAAK,OAAO;AAEZ,SAAO,eAAe,MAAM,gBAAgB,UAAU;CACvD;CAED,OAAc,KACZC,QACAC,OAA2C,CAAE,GACR;EACrC,MAAM,QAAQ;AAEd,MAAI,kBAAkB,MAAM,EAAE;AAC5B,OAAI,KAAK,KAEP,OAAM,OAAO;IACX,GAAG,MAAM;IACT,GAAG,KAAK;GACT;AAEH,UAAO;EACR;AACD,MAAI,oBAAoB,MAAM,CAC5B,QAAO,IAAI,gBAAgB,MAAM,MAAM,SAAS;GAC9C,GAAG;GACH,QAAQ;EACT;AAEH,SAAO,IAAI,gBACT,2BAA2B,OAAO,gBAAgB,EAClD;GACE,GAAG;GACI;EACR;CAEJ;AACF"}
1
+ {"version":3,"file":"TRPCClientError-CjKyS10w.mjs","names":["cause: unknown","obj: unknown","err: unknown","fallback: string","message: string","opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n }","_cause: Error | TRPCErrorResponse<any> | object","opts: { meta?: Record<string, unknown> }"],"sources":["../src/TRPCClientError.ts"],"sourcesContent":["import type {\n inferClientTypes,\n InferrableClientTypes,\n Maybe,\n TRPCErrorResponse,\n} from '@trpc/server/unstable-core-do-not-import';\nimport {\n isObject,\n type DefaultErrorShape,\n} from '@trpc/server/unstable-core-do-not-import';\n\ntype inferErrorShape<TInferrable extends InferrableClientTypes> =\n inferClientTypes<TInferrable>['errorShape'];\nexport interface TRPCClientErrorBase<TShape extends DefaultErrorShape> {\n readonly message: string;\n readonly shape: Maybe<TShape>;\n readonly data: Maybe<TShape['data']>;\n}\nexport type TRPCClientErrorLike<TInferrable extends InferrableClientTypes> =\n TRPCClientErrorBase<inferErrorShape<TInferrable>>;\n\nexport function isTRPCClientError<TInferrable extends InferrableClientTypes>(\n cause: unknown,\n): cause is TRPCClientError<TInferrable> {\n return cause instanceof TRPCClientError;\n}\n\nfunction isTRPCErrorResponse(obj: unknown): obj is TRPCErrorResponse<any> {\n return (\n isObject(obj) &&\n isObject(obj['error']) &&\n typeof obj['error']['code'] === 'number' &&\n typeof obj['error']['message'] === 'string'\n );\n}\n\nfunction getMessageFromUnknownError(err: unknown, fallback: string): string {\n if (typeof err === 'string') {\n return err;\n }\n if (isObject(err) && typeof err['message'] === 'string') {\n return err['message'];\n }\n return fallback;\n}\n\nexport class TRPCClientError<TRouterOrProcedure extends InferrableClientTypes>\n extends Error\n implements TRPCClientErrorBase<inferErrorShape<TRouterOrProcedure>>\n{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore override doesn't work in all environments due to \"This member cannot have an 'override' modifier because it is not declared in the base class 'Error'\"\n public override readonly cause;\n public readonly shape: Maybe<inferErrorShape<TRouterOrProcedure>>;\n public readonly data: Maybe<inferErrorShape<TRouterOrProcedure>['data']>;\n\n /**\n * Additional meta data about the error\n * In the case of HTTP-errors, we'll have `response` and potentially `responseJSON` here\n */\n public meta;\n\n constructor(\n message: string,\n opts?: {\n result?: Maybe<TRPCErrorResponse<inferErrorShape<TRouterOrProcedure>>>;\n cause?: Error;\n meta?: Record<string, unknown>;\n },\n ) {\n const cause = opts?.cause;\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore https://github.com/tc39/proposal-error-cause\n super(message, { cause });\n\n this.meta = opts?.meta;\n\n this.cause = cause;\n this.shape = opts?.result?.error;\n this.data = opts?.result?.error.data;\n this.name = 'TRPCClientError';\n\n Object.setPrototypeOf(this, TRPCClientError.prototype);\n }\n\n public static from<TRouterOrProcedure extends InferrableClientTypes>(\n _cause: Error | TRPCErrorResponse<any> | object,\n opts: { meta?: Record<string, unknown> } = {},\n ): TRPCClientError<TRouterOrProcedure> {\n const cause = _cause as unknown;\n\n if (isTRPCClientError(cause)) {\n if (opts.meta) {\n // Decorate with meta error data\n cause.meta = {\n ...cause.meta,\n ...opts.meta,\n };\n }\n return cause;\n }\n if (isTRPCErrorResponse(cause)) {\n return new TRPCClientError(cause.error.message, {\n ...opts,\n result: cause,\n });\n }\n return new TRPCClientError(\n getMessageFromUnknownError(cause, 'Unknown error'),\n {\n ...opts,\n cause: cause as any,\n },\n );\n }\n}\n"],"mappings":";;;;;;AAqBA,SAAgB,kBACdA,OACuC;AACvC,QAAO,iBAAiB;AACzB;AAED,SAAS,oBAAoBC,KAA6C;AACxE,QACE,SAAS,IAAI,IACb,SAAS,IAAI,SAAS,WACf,IAAI,SAAS,YAAY,mBACzB,IAAI,SAAS,eAAe;AAEtC;AAED,SAAS,2BAA2BC,KAAcC,UAA0B;AAC1E,YAAW,QAAQ,SACjB,QAAO;AAET,KAAI,SAAS,IAAI,WAAW,IAAI,eAAe,SAC7C,QAAO,IAAI;AAEb,QAAO;AACR;AAED,IAAa,kBAAb,MAAa,wBACH,MAEV;CAaE,YACEC,SACAC,MAKA;;EACA,MAAM,oDAAQ,KAAM;AAIpB,QAAM,SAAS,EAAE,MAAO,EAAC;qCA2C1B,MAjEwB;qCAiEvB,MAhEc;qCAgEb,MA/Da;qCA+DZ,MAzDG;AAgBL,OAAK,mDAAO,KAAM;AAElB,OAAK,QAAQ;AACb,OAAK,4DAAQ,KAAM,oEAAQ;AAC3B,OAAK,4DAAO,KAAM,sEAAQ,MAAM;AAChC,OAAK,OAAO;AAEZ,SAAO,eAAe,MAAM,gBAAgB,UAAU;CACvD;CAED,OAAc,KACZC,QACAC,OAA2C,CAAE,GACR;EACrC,MAAM,QAAQ;AAEd,MAAI,kBAAkB,MAAM,EAAE;AAC5B,OAAI,KAAK,KAEP,OAAM,+EACD,MAAM,OACN,KAAK;AAGZ,UAAO;EACR;AACD,MAAI,oBAAoB,MAAM,CAC5B,QAAO,IAAI,gBAAgB,MAAM,MAAM,iFAClC,aACH,QAAQ;AAGZ,SAAO,IAAI,gBACT,2BAA2B,OAAO,gBAAgB,0EAE7C,aACI;CAGZ;AACF"}
@@ -1,7 +1,10 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
+ const require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');
2
3
  const __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require("@trpc/server/unstable-core-do-not-import"));
3
4
 
4
5
  //#region src/TRPCClientError.ts
6
+ var import_defineProperty = require_chunk.__toESM(require_objectSpread2$1.require_defineProperty(), 1);
7
+ var import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);
5
8
  function isTRPCClientError(cause) {
6
9
  return cause instanceof TRPCClientError;
7
10
  }
@@ -14,41 +17,29 @@ function getMessageFromUnknownError(err, fallback) {
14
17
  return fallback;
15
18
  }
16
19
  var TRPCClientError = class TRPCClientError extends Error {
17
- cause;
18
- shape;
19
- data;
20
- /**
21
- * Additional meta data about the error
22
- * In the case of HTTP-errors, we'll have `response` and potentially `responseJSON` here
23
- */
24
- meta;
25
20
  constructor(message, opts) {
26
- const cause = opts?.cause;
21
+ var _opts$result, _opts$result2;
22
+ const cause = opts === null || opts === void 0 ? void 0 : opts.cause;
27
23
  super(message, { cause });
28
- this.meta = opts?.meta;
24
+ (0, import_defineProperty.default)(this, "cause", void 0);
25
+ (0, import_defineProperty.default)(this, "shape", void 0);
26
+ (0, import_defineProperty.default)(this, "data", void 0);
27
+ (0, import_defineProperty.default)(this, "meta", void 0);
28
+ this.meta = opts === null || opts === void 0 ? void 0 : opts.meta;
29
29
  this.cause = cause;
30
- this.shape = opts?.result?.error;
31
- this.data = opts?.result?.error.data;
30
+ this.shape = opts === null || opts === void 0 || (_opts$result = opts.result) === null || _opts$result === void 0 ? void 0 : _opts$result.error;
31
+ this.data = opts === null || opts === void 0 || (_opts$result2 = opts.result) === null || _opts$result2 === void 0 ? void 0 : _opts$result2.error.data;
32
32
  this.name = "TRPCClientError";
33
33
  Object.setPrototypeOf(this, TRPCClientError.prototype);
34
34
  }
35
35
  static from(_cause, opts = {}) {
36
36
  const cause = _cause;
37
37
  if (isTRPCClientError(cause)) {
38
- if (opts.meta) cause.meta = {
39
- ...cause.meta,
40
- ...opts.meta
41
- };
38
+ if (opts.meta) cause.meta = (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, cause.meta), opts.meta);
42
39
  return cause;
43
40
  }
44
- if (isTRPCErrorResponse(cause)) return new TRPCClientError(cause.error.message, {
45
- ...opts,
46
- result: cause
47
- });
48
- return new TRPCClientError(getMessageFromUnknownError(cause, "Unknown error"), {
49
- ...opts,
50
- cause
51
- });
41
+ if (isTRPCErrorResponse(cause)) return new TRPCClientError(cause.error.message, (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { result: cause }));
42
+ return new TRPCClientError(getMessageFromUnknownError(cause, "Unknown error"), (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, { cause }));
52
43
  }
53
44
  };
54
45
 
@@ -1,5 +1,6 @@
1
- import { TRPCClientError } from "./TRPCClientError-COkhCKf3.mjs";
2
- import { getUrl, jsonHttpRequester, resolveHTTPLinkOptions } from "./httpUtils-3pbQzhUL.mjs";
1
+ import { __toESM, require_objectSpread2 } from "./objectSpread2-BvkFp-_Y.mjs";
2
+ import { TRPCClientError } from "./TRPCClientError-CjKyS10w.mjs";
3
+ import { getUrl, jsonHttpRequester, resolveHTTPLinkOptions } from "./httpUtils-ZiawzpnD.mjs";
3
4
  import { observable } from "@trpc/server/observable";
4
5
  import { transformResult } from "@trpc/server/unstable-core-do-not-import";
5
6
 
@@ -34,7 +35,8 @@ function dataLoader(batchLoader) {
34
35
  if (!item) break;
35
36
  const lastGroup = groupedItems[groupedItems.length - 1];
36
37
  if (item.aborted) {
37
- item.reject?.(new Error("Aborted"));
38
+ var _item$reject;
39
+ (_item$reject = item.reject) === null || _item$reject === void 0 || _item$reject.call(item, new Error("Aborted"));
38
40
  index++;
39
41
  continue;
40
42
  }
@@ -45,7 +47,8 @@ function dataLoader(batchLoader) {
45
47
  continue;
46
48
  }
47
49
  if (lastGroup.length === 0) {
48
- item.reject?.(new Error("Input is too big for a single dispatch"));
50
+ var _item$reject2;
51
+ (_item$reject2 = item.reject) === null || _item$reject2 === void 0 || _item$reject2.call(item, new Error("Input is too big for a single dispatch"));
49
52
  index++;
50
53
  continue;
51
54
  }
@@ -65,28 +68,33 @@ function dataLoader(batchLoader) {
65
68
  await Promise.all(result.map(async (valueOrPromise, index) => {
66
69
  const item = batch.items[index];
67
70
  try {
71
+ var _item$resolve;
68
72
  const value = await Promise.resolve(valueOrPromise);
69
- item.resolve?.(value);
73
+ (_item$resolve = item.resolve) === null || _item$resolve === void 0 || _item$resolve.call(item, value);
70
74
  } catch (cause) {
71
- item.reject?.(cause);
75
+ var _item$reject3;
76
+ (_item$reject3 = item.reject) === null || _item$reject3 === void 0 || _item$reject3.call(item, cause);
72
77
  }
73
78
  item.batch = null;
74
79
  item.reject = null;
75
80
  item.resolve = null;
76
81
  }));
77
82
  for (const item of batch.items) {
78
- item.reject?.(new Error("Missing result"));
83
+ var _item$reject4;
84
+ (_item$reject4 = item.reject) === null || _item$reject4 === void 0 || _item$reject4.call(item, new Error("Missing result"));
79
85
  item.batch = null;
80
86
  }
81
87
  }).catch((cause) => {
82
88
  for (const item of batch.items) {
83
- item.reject?.(cause);
89
+ var _item$reject5;
90
+ (_item$reject5 = item.reject) === null || _item$reject5 === void 0 || _item$reject5.call(item, cause);
84
91
  item.batch = null;
85
92
  }
86
93
  });
87
94
  }
88
95
  }
89
96
  function load(key) {
97
+ var _dispatchTimer;
90
98
  const item = {
91
99
  aborted: false,
92
100
  key,
@@ -95,12 +103,13 @@ function dataLoader(batchLoader) {
95
103
  reject: throwFatalError
96
104
  };
97
105
  const promise = new Promise((resolve, reject) => {
106
+ var _pendingItems;
98
107
  item.reject = reject;
99
108
  item.resolve = resolve;
100
- pendingItems ??= [];
109
+ (_pendingItems = pendingItems) !== null && _pendingItems !== void 0 || (pendingItems = []);
101
110
  pendingItems.push(item);
102
111
  });
103
- dispatchTimer ??= setTimeout(dispatch);
112
+ (_dispatchTimer = dispatchTimer) !== null && _dispatchTimer !== void 0 || (dispatchTimer = setTimeout(dispatch));
104
113
  return promise;
105
114
  }
106
115
  return { load };
@@ -120,8 +129,8 @@ function allAbortSignals(...signals) {
120
129
  const onAbort = () => {
121
130
  if (++abortedCount === count) ac.abort();
122
131
  };
123
- for (const signal of signals) if (signal?.aborted) onAbort();
124
- else signal?.addEventListener("abort", onAbort, { once: true });
132
+ for (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) onAbort();
133
+ else signal === null || signal === void 0 || signal.addEventListener("abort", onAbort, { once: true });
125
134
  return ac.signal;
126
135
  }
127
136
  /**
@@ -132,8 +141,8 @@ function allAbortSignals(...signals) {
132
141
  */
133
142
  function raceAbortSignals(...signals) {
134
143
  const ac = new AbortController();
135
- for (const signal of signals) if (signal?.aborted) ac.abort();
136
- else signal?.addEventListener("abort", () => ac.abort(), { once: true });
144
+ for (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) ac.abort();
145
+ else signal === null || signal === void 0 || signal.addEventListener("abort", () => ac.abort(), { once: true });
137
146
  return ac.signal;
138
147
  }
139
148
  function abortSignalToPromise(signal) {
@@ -150,13 +159,15 @@ function abortSignalToPromise(signal) {
150
159
 
151
160
  //#endregion
152
161
  //#region src/links/httpBatchLink.ts
162
+ var import_objectSpread2 = __toESM(require_objectSpread2(), 1);
153
163
  /**
154
164
  * @see https://trpc.io/docs/client/links/httpBatchLink
155
165
  */
156
166
  function httpBatchLink(opts) {
167
+ var _opts$maxURLLength, _opts$maxItems;
157
168
  const resolvedOpts = resolveHTTPLinkOptions(opts);
158
- const maxURLLength = opts.maxURLLength ?? Infinity;
159
- const maxItems = opts.maxItems ?? Infinity;
169
+ const maxURLLength = (_opts$maxURLLength = opts.maxURLLength) !== null && _opts$maxURLLength !== void 0 ? _opts$maxURLLength : Infinity;
170
+ const maxItems = (_opts$maxItems = opts.maxItems) !== null && _opts$maxItems !== void 0 ? _opts$maxItems : Infinity;
160
171
  return () => {
161
172
  const batchLoader = (type) => {
162
173
  return {
@@ -165,21 +176,19 @@ function httpBatchLink(opts) {
165
176
  if (batchOps.length > maxItems) return false;
166
177
  const path = batchOps.map((op) => op.path).join(",");
167
178
  const inputs = batchOps.map((op) => op.input);
168
- const url = getUrl({
169
- ...resolvedOpts,
179
+ const url = getUrl((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {
170
180
  type,
171
181
  path,
172
182
  inputs,
173
183
  signal: null
174
- });
184
+ }));
175
185
  return url.length <= maxURLLength;
176
186
  },
177
187
  async fetch(batchOps) {
178
188
  const path = batchOps.map((op) => op.path).join(",");
179
189
  const inputs = batchOps.map((op) => op.input);
180
190
  const signal = allAbortSignals(...batchOps.map((op) => op.signal));
181
- const res = await jsonHttpRequester({
182
- ...resolvedOpts,
191
+ const res = await jsonHttpRequester((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {
183
192
  path,
184
193
  inputs,
185
194
  type,
@@ -189,7 +198,7 @@ function httpBatchLink(opts) {
189
198
  return opts.headers;
190
199
  },
191
200
  signal
192
- });
201
+ }));
193
202
  const resJSON = Array.isArray(res.json) ? res.json : batchOps.map(() => res.json);
194
203
  const result = resJSON.map((item) => ({
195
204
  meta: res.meta,
@@ -225,7 +234,7 @@ function httpBatchLink(opts) {
225
234
  });
226
235
  observer.complete();
227
236
  }).catch((err) => {
228
- observer.error(TRPCClientError.from(err, { meta: _res?.meta }));
237
+ observer.error(TRPCClientError.from(err, { meta: _res === null || _res === void 0 ? void 0 : _res.meta }));
229
238
  });
230
239
  return () => {};
231
240
  });
@@ -235,4 +244,4 @@ function httpBatchLink(opts) {
235
244
 
236
245
  //#endregion
237
246
  export { abortSignalToPromise, allAbortSignals, dataLoader, httpBatchLink, raceAbortSignals };
238
- //# sourceMappingURL=httpBatchLink-DIfnmmcu.mjs.map
247
+ //# sourceMappingURL=httpBatchLink-BfUVex5U.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpBatchLink-DIfnmmcu.mjs","names":["batchLoader: BatchLoader<TKey, TValue>","pendingItems: BatchItem<TKey, TValue>[] | null","dispatchTimer: ReturnType<typeof setTimeout> | null","items: BatchItem<TKey, TValue>[]","groupedItems: BatchItem<TKey, TValue>[][]","batch: Batch<TKey, TValue>","key: TKey","item: BatchItem<TKey, TValue>","signal: AbortSignal","opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>","type: ProcedureType"],"sources":["../src/internals/dataLoader.ts","../src/internals/signals.ts","../src/links/httpBatchLink.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\ntype BatchItem<TKey, TValue> = {\n aborted: boolean;\n key: TKey;\n resolve: ((value: TValue) => void) | null;\n reject: ((error: Error) => void) | null;\n batch: Batch<TKey, TValue> | null;\n};\ntype Batch<TKey, TValue> = {\n items: BatchItem<TKey, TValue>[];\n};\nexport type BatchLoader<TKey, TValue> = {\n validate: (keys: TKey[]) => boolean;\n fetch: (keys: TKey[]) => Promise<TValue[] | Promise<TValue>[]>;\n};\n\n/**\n * A function that should never be called unless we messed something up.\n */\nconst throwFatalError = () => {\n throw new Error(\n 'Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new',\n );\n};\n\n/**\n * Dataloader that's very inspired by https://github.com/graphql/dataloader\n * Less configuration, no caching, and allows you to cancel requests\n * When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled\n */\nexport function dataLoader<TKey, TValue>(\n batchLoader: BatchLoader<TKey, TValue>,\n) {\n let pendingItems: BatchItem<TKey, TValue>[] | null = null;\n let dispatchTimer: ReturnType<typeof setTimeout> | null = null;\n\n const destroyTimerAndPendingItems = () => {\n clearTimeout(dispatchTimer as any);\n dispatchTimer = null;\n pendingItems = null;\n };\n\n /**\n * Iterate through the items and split them into groups based on the `batchLoader`'s validate function\n */\n function groupItems(items: BatchItem<TKey, TValue>[]) {\n const groupedItems: BatchItem<TKey, TValue>[][] = [[]];\n let index = 0;\n while (true) {\n const item = items[index];\n if (!item) {\n // we're done\n break;\n }\n const lastGroup = groupedItems[groupedItems.length - 1]!;\n\n if (item.aborted) {\n // Item was aborted before it was dispatched\n item.reject?.(new Error('Aborted'));\n index++;\n continue;\n }\n\n const isValid = batchLoader.validate(\n lastGroup.concat(item).map((it) => it.key),\n );\n\n if (isValid) {\n lastGroup.push(item);\n index++;\n continue;\n }\n\n if (lastGroup.length === 0) {\n item.reject?.(new Error('Input is too big for a single dispatch'));\n index++;\n continue;\n }\n // Create new group, next iteration will try to add the item to that\n groupedItems.push([]);\n }\n return groupedItems;\n }\n\n function dispatch() {\n const groupedItems = groupItems(pendingItems!);\n destroyTimerAndPendingItems();\n\n // Create batches for each group of items\n for (const items of groupedItems) {\n if (!items.length) {\n continue;\n }\n const batch: Batch<TKey, TValue> = {\n items,\n };\n for (const item of items) {\n item.batch = batch;\n }\n const promise = batchLoader.fetch(batch.items.map((_item) => _item.key));\n\n promise\n .then(async (result) => {\n await Promise.all(\n result.map(async (valueOrPromise, index) => {\n const item = batch.items[index]!;\n try {\n const value = await Promise.resolve(valueOrPromise);\n\n item.resolve?.(value);\n } catch (cause) {\n item.reject?.(cause as Error);\n }\n\n item.batch = null;\n item.reject = null;\n item.resolve = null;\n }),\n );\n\n for (const item of batch.items) {\n item.reject?.(new Error('Missing result'));\n item.batch = null;\n }\n })\n .catch((cause) => {\n for (const item of batch.items) {\n item.reject?.(cause);\n item.batch = null;\n }\n });\n }\n }\n function load(key: TKey): Promise<TValue> {\n const item: BatchItem<TKey, TValue> = {\n aborted: false,\n key,\n batch: null,\n resolve: throwFatalError,\n reject: throwFatalError,\n };\n\n const promise = new Promise<TValue>((resolve, reject) => {\n item.reject = reject;\n item.resolve = resolve;\n\n pendingItems ??= [];\n pendingItems.push(item);\n });\n\n dispatchTimer ??= setTimeout(dispatch);\n\n return promise;\n }\n\n return {\n load,\n };\n}\n","import type { Maybe } from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * Like `Promise.all()` but for abort signals\n * - When all signals have been aborted, the merged signal will be aborted\n * - If one signal is `null`, no signal will be aborted\n */\nexport function allAbortSignals(...signals: Maybe<AbortSignal>[]): AbortSignal {\n const ac = new AbortController();\n\n const count = signals.length;\n\n let abortedCount = 0;\n\n const onAbort = () => {\n if (++abortedCount === count) {\n ac.abort();\n }\n };\n\n for (const signal of signals) {\n if (signal?.aborted) {\n onAbort();\n } else {\n signal?.addEventListener('abort', onAbort, {\n once: true,\n });\n }\n }\n\n return ac.signal;\n}\n\n/**\n * Like `Promise.race` but for abort signals\n *\n * Basically, a ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function raceAbortSignals(\n ...signals: Maybe<AbortSignal>[]\n): AbortSignal {\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal?.aborted) {\n ac.abort();\n } else {\n signal?.addEventListener('abort', () => ac.abort(), { once: true });\n }\n }\n\n return ac.signal;\n}\n\nexport function abortSignalToPromise(signal: AbortSignal): Promise<never> {\n return new Promise((_, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n signal.addEventListener(\n 'abort',\n () => {\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n getUrl,\n jsonHttpRequester,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchLink\n */\nexport function httpBatchLink<TRouter extends AnyRouter>(\n opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n const signal = allAbortSignals(...batchOps.map((op) => op.signal));\n\n const res = await jsonHttpRequester({\n ...resolvedOpts,\n path,\n inputs,\n type,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n signal,\n });\n const resJSON = Array.isArray(res.json)\n ? res.json\n : batchOps.map(() => res.json);\n const result = resJSON.map((item) => ({\n meta: res.meta,\n json: item,\n }));\n return result;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n const transformed = transformResult(\n res.json,\n resolvedOpts.transformer.output,\n );\n\n if (!transformed.ok) {\n observer.error(\n TRPCClientError.from(transformed.error, {\n meta: res.meta,\n }),\n );\n return;\n }\n observer.next({\n context: res.meta,\n result: transformed.result,\n });\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"httpBatchLink-BfUVex5U.mjs","names":["batchLoader: BatchLoader<TKey, TValue>","pendingItems: BatchItem<TKey, TValue>[] | null","dispatchTimer: ReturnType<typeof setTimeout> | null","items: BatchItem<TKey, TValue>[]","groupedItems: BatchItem<TKey, TValue>[][]","batch: Batch<TKey, TValue>","key: TKey","item: BatchItem<TKey, TValue>","signal: AbortSignal","opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>","type: ProcedureType"],"sources":["../src/internals/dataLoader.ts","../src/internals/signals.ts","../src/links/httpBatchLink.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n\ntype BatchItem<TKey, TValue> = {\n aborted: boolean;\n key: TKey;\n resolve: ((value: TValue) => void) | null;\n reject: ((error: Error) => void) | null;\n batch: Batch<TKey, TValue> | null;\n};\ntype Batch<TKey, TValue> = {\n items: BatchItem<TKey, TValue>[];\n};\nexport type BatchLoader<TKey, TValue> = {\n validate: (keys: TKey[]) => boolean;\n fetch: (keys: TKey[]) => Promise<TValue[] | Promise<TValue>[]>;\n};\n\n/**\n * A function that should never be called unless we messed something up.\n */\nconst throwFatalError = () => {\n throw new Error(\n 'Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new',\n );\n};\n\n/**\n * Dataloader that's very inspired by https://github.com/graphql/dataloader\n * Less configuration, no caching, and allows you to cancel requests\n * When cancelling a single fetch the whole batch will be cancelled only when _all_ items are cancelled\n */\nexport function dataLoader<TKey, TValue>(\n batchLoader: BatchLoader<TKey, TValue>,\n) {\n let pendingItems: BatchItem<TKey, TValue>[] | null = null;\n let dispatchTimer: ReturnType<typeof setTimeout> | null = null;\n\n const destroyTimerAndPendingItems = () => {\n clearTimeout(dispatchTimer as any);\n dispatchTimer = null;\n pendingItems = null;\n };\n\n /**\n * Iterate through the items and split them into groups based on the `batchLoader`'s validate function\n */\n function groupItems(items: BatchItem<TKey, TValue>[]) {\n const groupedItems: BatchItem<TKey, TValue>[][] = [[]];\n let index = 0;\n while (true) {\n const item = items[index];\n if (!item) {\n // we're done\n break;\n }\n const lastGroup = groupedItems[groupedItems.length - 1]!;\n\n if (item.aborted) {\n // Item was aborted before it was dispatched\n item.reject?.(new Error('Aborted'));\n index++;\n continue;\n }\n\n const isValid = batchLoader.validate(\n lastGroup.concat(item).map((it) => it.key),\n );\n\n if (isValid) {\n lastGroup.push(item);\n index++;\n continue;\n }\n\n if (lastGroup.length === 0) {\n item.reject?.(new Error('Input is too big for a single dispatch'));\n index++;\n continue;\n }\n // Create new group, next iteration will try to add the item to that\n groupedItems.push([]);\n }\n return groupedItems;\n }\n\n function dispatch() {\n const groupedItems = groupItems(pendingItems!);\n destroyTimerAndPendingItems();\n\n // Create batches for each group of items\n for (const items of groupedItems) {\n if (!items.length) {\n continue;\n }\n const batch: Batch<TKey, TValue> = {\n items,\n };\n for (const item of items) {\n item.batch = batch;\n }\n const promise = batchLoader.fetch(batch.items.map((_item) => _item.key));\n\n promise\n .then(async (result) => {\n await Promise.all(\n result.map(async (valueOrPromise, index) => {\n const item = batch.items[index]!;\n try {\n const value = await Promise.resolve(valueOrPromise);\n\n item.resolve?.(value);\n } catch (cause) {\n item.reject?.(cause as Error);\n }\n\n item.batch = null;\n item.reject = null;\n item.resolve = null;\n }),\n );\n\n for (const item of batch.items) {\n item.reject?.(new Error('Missing result'));\n item.batch = null;\n }\n })\n .catch((cause) => {\n for (const item of batch.items) {\n item.reject?.(cause);\n item.batch = null;\n }\n });\n }\n }\n function load(key: TKey): Promise<TValue> {\n const item: BatchItem<TKey, TValue> = {\n aborted: false,\n key,\n batch: null,\n resolve: throwFatalError,\n reject: throwFatalError,\n };\n\n const promise = new Promise<TValue>((resolve, reject) => {\n item.reject = reject;\n item.resolve = resolve;\n\n pendingItems ??= [];\n pendingItems.push(item);\n });\n\n dispatchTimer ??= setTimeout(dispatch);\n\n return promise;\n }\n\n return {\n load,\n };\n}\n","import type { Maybe } from '@trpc/server/unstable-core-do-not-import';\n\n/**\n * Like `Promise.all()` but for abort signals\n * - When all signals have been aborted, the merged signal will be aborted\n * - If one signal is `null`, no signal will be aborted\n */\nexport function allAbortSignals(...signals: Maybe<AbortSignal>[]): AbortSignal {\n const ac = new AbortController();\n\n const count = signals.length;\n\n let abortedCount = 0;\n\n const onAbort = () => {\n if (++abortedCount === count) {\n ac.abort();\n }\n };\n\n for (const signal of signals) {\n if (signal?.aborted) {\n onAbort();\n } else {\n signal?.addEventListener('abort', onAbort, {\n once: true,\n });\n }\n }\n\n return ac.signal;\n}\n\n/**\n * Like `Promise.race` but for abort signals\n *\n * Basically, a ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function raceAbortSignals(\n ...signals: Maybe<AbortSignal>[]\n): AbortSignal {\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal?.aborted) {\n ac.abort();\n } else {\n signal?.addEventListener('abort', () => ac.abort(), { once: true });\n }\n }\n\n return ac.signal;\n}\n\nexport function abortSignalToPromise(signal: AbortSignal): Promise<never> {\n return new Promise((_, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n signal.addEventListener(\n 'abort',\n () => {\n reject(signal.reason);\n },\n { once: true },\n );\n });\n}\n","import type { AnyRouter, ProcedureType } from '@trpc/server';\nimport { observable } from '@trpc/server/observable';\nimport { transformResult } from '@trpc/server/unstable-core-do-not-import';\nimport type { BatchLoader } from '../internals/dataLoader';\nimport { dataLoader } from '../internals/dataLoader';\nimport { allAbortSignals } from '../internals/signals';\nimport type { NonEmptyArray } from '../internals/types';\nimport { TRPCClientError } from '../TRPCClientError';\nimport type { HTTPBatchLinkOptions } from './HTTPBatchLinkOptions';\nimport type { HTTPResult } from './internals/httpUtils';\nimport {\n getUrl,\n jsonHttpRequester,\n resolveHTTPLinkOptions,\n} from './internals/httpUtils';\nimport type { Operation, TRPCLink } from './types';\n\n/**\n * @see https://trpc.io/docs/client/links/httpBatchLink\n */\nexport function httpBatchLink<TRouter extends AnyRouter>(\n opts: HTTPBatchLinkOptions<TRouter['_def']['_config']['$types']>,\n): TRPCLink<TRouter> {\n const resolvedOpts = resolveHTTPLinkOptions(opts);\n const maxURLLength = opts.maxURLLength ?? Infinity;\n const maxItems = opts.maxItems ?? Infinity;\n\n return () => {\n const batchLoader = (\n type: ProcedureType,\n ): BatchLoader<Operation, HTTPResult> => {\n return {\n validate(batchOps) {\n if (maxURLLength === Infinity && maxItems === Infinity) {\n // escape hatch for quick calcs\n return true;\n }\n if (batchOps.length > maxItems) {\n return false;\n }\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n\n const url = getUrl({\n ...resolvedOpts,\n type,\n path,\n inputs,\n signal: null,\n });\n\n return url.length <= maxURLLength;\n },\n async fetch(batchOps) {\n const path = batchOps.map((op) => op.path).join(',');\n const inputs = batchOps.map((op) => op.input);\n const signal = allAbortSignals(...batchOps.map((op) => op.signal));\n\n const res = await jsonHttpRequester({\n ...resolvedOpts,\n path,\n inputs,\n type,\n headers() {\n if (!opts.headers) {\n return {};\n }\n if (typeof opts.headers === 'function') {\n return opts.headers({\n opList: batchOps as NonEmptyArray<Operation>,\n });\n }\n return opts.headers;\n },\n signal,\n });\n const resJSON = Array.isArray(res.json)\n ? res.json\n : batchOps.map(() => res.json);\n const result = resJSON.map((item) => ({\n meta: res.meta,\n json: item,\n }));\n return result;\n },\n };\n };\n\n const query = dataLoader(batchLoader('query'));\n const mutation = dataLoader(batchLoader('mutation'));\n\n const loaders = { query, mutation };\n return ({ op }) => {\n return observable((observer) => {\n /* istanbul ignore if -- @preserve */\n if (op.type === 'subscription') {\n throw new Error(\n 'Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`',\n );\n }\n const loader = loaders[op.type];\n const promise = loader.load(op);\n\n let _res = undefined as HTTPResult | undefined;\n promise\n .then((res) => {\n _res = res;\n const transformed = transformResult(\n res.json,\n resolvedOpts.transformer.output,\n );\n\n if (!transformed.ok) {\n observer.error(\n TRPCClientError.from(transformed.error, {\n meta: res.meta,\n }),\n );\n return;\n }\n observer.next({\n context: res.meta,\n result: transformed.result,\n });\n observer.complete();\n })\n .catch((err) => {\n observer.error(\n TRPCClientError.from(err, {\n meta: _res?.meta,\n }),\n );\n });\n\n return () => {\n // noop\n };\n });\n };\n };\n}\n"],"mappings":";;;;;;;;;;AAoBA,MAAM,kBAAkB,MAAM;AAC5B,OAAM,IAAI,MACR;AAEH;;;;;;AAOD,SAAgB,WACdA,aACA;CACA,IAAIC,eAAiD;CACrD,IAAIC,gBAAsD;CAE1D,MAAM,8BAA8B,MAAM;AACxC,eAAa,cAAqB;AAClC,kBAAgB;AAChB,iBAAe;CAChB;;;;CAKD,SAAS,WAAWC,OAAkC;EACpD,MAAMC,eAA4C,CAAC,CAAE,CAAC;EACtD,IAAI,QAAQ;AACZ,SAAO,MAAM;GACX,MAAM,OAAO,MAAM;AACnB,QAAK,KAEH;GAEF,MAAM,YAAY,aAAa,aAAa,SAAS;AAErD,OAAI,KAAK,SAAS;;AAEhB,yBAAK,+CAAL,wBAAc,IAAI,MAAM,WAAW;AACnC;AACA;GACD;GAED,MAAM,UAAU,YAAY,SAC1B,UAAU,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAC3C;AAED,OAAI,SAAS;AACX,cAAU,KAAK,KAAK;AACpB;AACA;GACD;AAED,OAAI,UAAU,WAAW,GAAG;;AAC1B,0BAAK,gDAAL,yBAAc,IAAI,MAAM,0CAA0C;AAClE;AACA;GACD;AAED,gBAAa,KAAK,CAAE,EAAC;EACtB;AACD,SAAO;CACR;CAED,SAAS,WAAW;EAClB,MAAM,eAAe,WAAW,aAAc;AAC9C,+BAA6B;AAG7B,OAAK,MAAM,SAAS,cAAc;AAChC,QAAK,MAAM,OACT;GAEF,MAAMC,QAA6B,EACjC,MACD;AACD,QAAK,MAAM,QAAQ,MACjB,MAAK,QAAQ;GAEf,MAAM,UAAU,YAAY,MAAM,MAAM,MAAM,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC;AAExE,WACG,KAAK,OAAO,WAAW;AACtB,UAAM,QAAQ,IACZ,OAAO,IAAI,OAAO,gBAAgB,UAAU;KAC1C,MAAM,OAAO,MAAM,MAAM;AACzB,SAAI;;MACF,MAAM,QAAQ,MAAM,QAAQ,QAAQ,eAAe;AAEnD,4BAAK,iDAAL,yBAAe,MAAM;KACtB,SAAQ,OAAO;;AACd,4BAAK,gDAAL,yBAAc,MAAe;KAC9B;AAED,UAAK,QAAQ;AACb,UAAK,SAAS;AACd,UAAK,UAAU;IAChB,EAAC,CACH;AAED,SAAK,MAAM,QAAQ,MAAM,OAAO;;AAC9B,2BAAK,gDAAL,yBAAc,IAAI,MAAM,kBAAkB;AAC1C,UAAK,QAAQ;IACd;GACF,EAAC,CACD,MAAM,CAAC,UAAU;AAChB,SAAK,MAAM,QAAQ,MAAM,OAAO;;AAC9B,2BAAK,gDAAL,yBAAc,MAAM;AACpB,UAAK,QAAQ;IACd;GACF,EAAC;EACL;CACF;CACD,SAAS,KAAKC,KAA4B;;EACxC,MAAMC,OAAgC;GACpC,SAAS;GACT;GACA,OAAO;GACP,SAAS;GACT,QAAQ;EACT;EAED,MAAM,UAAU,IAAI,QAAgB,CAAC,SAAS,WAAW;;AACvD,QAAK,SAAS;AACd,QAAK,UAAU;AAEf,0FAAiB,CAAE;AACnB,gBAAa,KAAK,KAAK;EACxB;AAED,6FAAkB,WAAW,SAAS;AAEtC,SAAO;CACR;AAED,QAAO,EACL,KACD;AACF;;;;;;;;;ACxJD,SAAgB,gBAAgB,GAAG,SAA4C;CAC7E,MAAM,KAAK,IAAI;CAEf,MAAM,QAAQ,QAAQ;CAEtB,IAAI,eAAe;CAEnB,MAAM,UAAU,MAAM;AACpB,MAAI,EAAE,iBAAiB,MACrB,IAAG,OAAO;CAEb;AAED,MAAK,MAAM,UAAU,QACnB,qDAAI,OAAQ,QACV,UAAS;KAET,gDAAQ,iBAAiB,SAAS,SAAS,EACzC,MAAM,KACP,EAAC;AAIN,QAAO,GAAG;AACX;;;;;;;AAQD,SAAgB,iBACd,GAAG,SACU;CACb,MAAM,KAAK,IAAI;AAEf,MAAK,MAAM,UAAU,QACnB,qDAAI,OAAQ,QACV,IAAG,OAAO;KAEV,gDAAQ,iBAAiB,SAAS,MAAM,GAAG,OAAO,EAAE,EAAE,MAAM,KAAM,EAAC;AAIvE,QAAO,GAAG;AACX;AAED,SAAgB,qBAAqBC,QAAqC;AACxE,QAAO,IAAI,QAAQ,CAAC,GAAG,WAAW;AAChC,MAAI,OAAO,SAAS;AAClB,UAAO,OAAO,OAAO;AACrB;EACD;AACD,SAAO,iBACL,SACA,MAAM;AACJ,UAAO,OAAO,OAAO;EACtB,GACD,EAAE,MAAM,KAAM,EACf;CACF;AACF;;;;;;;;ACjDD,SAAgB,cACdC,MACmB;;CACnB,MAAM,eAAe,uBAAuB,KAAK;CACjD,MAAM,qCAAe,KAAK,+EAAgB;CAC1C,MAAM,6BAAW,KAAK,mEAAY;AAElC,QAAO,MAAM;EACX,MAAM,cAAc,CAClBC,SACuC;AACvC,UAAO;IACL,SAAS,UAAU;AACjB,SAAI,iBAAiB,YAAY,aAAa,SAE5C,QAAO;AAET,SAAI,SAAS,SAAS,SACpB,QAAO;KAET,MAAM,OAAO,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI;KACpD,MAAM,SAAS,SAAS,IAAI,CAAC,OAAO,GAAG,MAAM;KAE7C,MAAM,MAAM,+EACP;MACH;MACA;MACA;MACA,QAAQ;QACR;AAEF,YAAO,IAAI,UAAU;IACtB;IACD,MAAM,MAAM,UAAU;KACpB,MAAM,OAAO,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI;KACpD,MAAM,SAAS,SAAS,IAAI,CAAC,OAAO,GAAG,MAAM;KAC7C,MAAM,SAAS,gBAAgB,GAAG,SAAS,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAElE,MAAM,MAAM,MAAM,0FACb;MACH;MACA;MACA;MACA,UAAU;AACR,YAAK,KAAK,QACR,QAAO,CAAE;AAEX,kBAAW,KAAK,YAAY,WAC1B,QAAO,KAAK,QAAQ,EAClB,QAAQ,SACT,EAAC;AAEJ,cAAO,KAAK;MACb;MACD;QACA;KACF,MAAM,UAAU,MAAM,QAAQ,IAAI,KAAK,GACnC,IAAI,OACJ,SAAS,IAAI,MAAM,IAAI,KAAK;KAChC,MAAM,SAAS,QAAQ,IAAI,CAAC,UAAU;MACpC,MAAM,IAAI;MACV,MAAM;KACP,GAAE;AACH,YAAO;IACR;GACF;EACF;EAED,MAAM,QAAQ,WAAW,YAAY,QAAQ,CAAC;EAC9C,MAAM,WAAW,WAAW,YAAY,WAAW,CAAC;EAEpD,MAAM,UAAU;GAAE;GAAO;EAAU;AACnC,SAAO,CAAC,EAAE,IAAI,KAAK;AACjB,UAAO,WAAW,CAAC,aAAa;;AAE9B,QAAI,GAAG,SAAS,eACd,OAAM,IAAI,MACR;IAGJ,MAAM,SAAS,QAAQ,GAAG;IAC1B,MAAM,UAAU,OAAO,KAAK,GAAG;IAE/B,IAAI;AACJ,YACG,KAAK,CAAC,QAAQ;AACb,YAAO;KACP,MAAM,cAAc,gBAClB,IAAI,MACJ,aAAa,YAAY,OAC1B;AAED,UAAK,YAAY,IAAI;AACnB,eAAS,MACP,gBAAgB,KAAK,YAAY,OAAO,EACtC,MAAM,IAAI,KACX,EAAC,CACH;AACD;KACD;AACD,cAAS,KAAK;MACZ,SAAS,IAAI;MACb,QAAQ,YAAY;KACrB,EAAC;AACF,cAAS,UAAU;IACpB,EAAC,CACD,MAAM,CAAC,QAAQ;AACd,cAAS,MACP,gBAAgB,KAAK,KAAK,EACxB,kDAAM,KAAM,KACb,EAAC,CACH;IACF,EAAC;AAEJ,WAAO,MAAM,CAEZ;GACF,EAAC;EACH;CACF;AACF"}
@@ -1,6 +1,7 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_TRPCClientError = require('./TRPCClientError-CGgRtttT.cjs');
3
- const require_httpUtils = require('./httpUtils-Buf6jCgh.cjs');
2
+ const require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');
3
+ const require_TRPCClientError = require('./TRPCClientError-Dey88Uiy.cjs');
4
+ const require_httpUtils = require('./httpUtils-rn2lxsJO.cjs');
4
5
  const __trpc_server_observable = require_chunk.__toESM(require("@trpc/server/observable"));
5
6
  const __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require("@trpc/server/unstable-core-do-not-import"));
6
7
 
@@ -35,7 +36,8 @@ function dataLoader(batchLoader) {
35
36
  if (!item) break;
36
37
  const lastGroup = groupedItems[groupedItems.length - 1];
37
38
  if (item.aborted) {
38
- item.reject?.(new Error("Aborted"));
39
+ var _item$reject;
40
+ (_item$reject = item.reject) === null || _item$reject === void 0 || _item$reject.call(item, new Error("Aborted"));
39
41
  index++;
40
42
  continue;
41
43
  }
@@ -46,7 +48,8 @@ function dataLoader(batchLoader) {
46
48
  continue;
47
49
  }
48
50
  if (lastGroup.length === 0) {
49
- item.reject?.(new Error("Input is too big for a single dispatch"));
51
+ var _item$reject2;
52
+ (_item$reject2 = item.reject) === null || _item$reject2 === void 0 || _item$reject2.call(item, new Error("Input is too big for a single dispatch"));
50
53
  index++;
51
54
  continue;
52
55
  }
@@ -66,28 +69,33 @@ function dataLoader(batchLoader) {
66
69
  await Promise.all(result.map(async (valueOrPromise, index) => {
67
70
  const item = batch.items[index];
68
71
  try {
72
+ var _item$resolve;
69
73
  const value = await Promise.resolve(valueOrPromise);
70
- item.resolve?.(value);
74
+ (_item$resolve = item.resolve) === null || _item$resolve === void 0 || _item$resolve.call(item, value);
71
75
  } catch (cause) {
72
- item.reject?.(cause);
76
+ var _item$reject3;
77
+ (_item$reject3 = item.reject) === null || _item$reject3 === void 0 || _item$reject3.call(item, cause);
73
78
  }
74
79
  item.batch = null;
75
80
  item.reject = null;
76
81
  item.resolve = null;
77
82
  }));
78
83
  for (const item of batch.items) {
79
- item.reject?.(new Error("Missing result"));
84
+ var _item$reject4;
85
+ (_item$reject4 = item.reject) === null || _item$reject4 === void 0 || _item$reject4.call(item, new Error("Missing result"));
80
86
  item.batch = null;
81
87
  }
82
88
  }).catch((cause) => {
83
89
  for (const item of batch.items) {
84
- item.reject?.(cause);
90
+ var _item$reject5;
91
+ (_item$reject5 = item.reject) === null || _item$reject5 === void 0 || _item$reject5.call(item, cause);
85
92
  item.batch = null;
86
93
  }
87
94
  });
88
95
  }
89
96
  }
90
97
  function load(key) {
98
+ var _dispatchTimer;
91
99
  const item = {
92
100
  aborted: false,
93
101
  key,
@@ -96,12 +104,13 @@ function dataLoader(batchLoader) {
96
104
  reject: throwFatalError
97
105
  };
98
106
  const promise = new Promise((resolve, reject) => {
107
+ var _pendingItems;
99
108
  item.reject = reject;
100
109
  item.resolve = resolve;
101
- pendingItems ??= [];
110
+ (_pendingItems = pendingItems) !== null && _pendingItems !== void 0 || (pendingItems = []);
102
111
  pendingItems.push(item);
103
112
  });
104
- dispatchTimer ??= setTimeout(dispatch);
113
+ (_dispatchTimer = dispatchTimer) !== null && _dispatchTimer !== void 0 || (dispatchTimer = setTimeout(dispatch));
105
114
  return promise;
106
115
  }
107
116
  return { load };
@@ -121,8 +130,8 @@ function allAbortSignals(...signals) {
121
130
  const onAbort = () => {
122
131
  if (++abortedCount === count) ac.abort();
123
132
  };
124
- for (const signal of signals) if (signal?.aborted) onAbort();
125
- else signal?.addEventListener("abort", onAbort, { once: true });
133
+ for (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) onAbort();
134
+ else signal === null || signal === void 0 || signal.addEventListener("abort", onAbort, { once: true });
126
135
  return ac.signal;
127
136
  }
128
137
  /**
@@ -133,8 +142,8 @@ function allAbortSignals(...signals) {
133
142
  */
134
143
  function raceAbortSignals(...signals) {
135
144
  const ac = new AbortController();
136
- for (const signal of signals) if (signal?.aborted) ac.abort();
137
- else signal?.addEventListener("abort", () => ac.abort(), { once: true });
145
+ for (const signal of signals) if (signal === null || signal === void 0 ? void 0 : signal.aborted) ac.abort();
146
+ else signal === null || signal === void 0 || signal.addEventListener("abort", () => ac.abort(), { once: true });
138
147
  return ac.signal;
139
148
  }
140
149
  function abortSignalToPromise(signal) {
@@ -151,13 +160,15 @@ function abortSignalToPromise(signal) {
151
160
 
152
161
  //#endregion
153
162
  //#region src/links/httpBatchLink.ts
163
+ var import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);
154
164
  /**
155
165
  * @see https://trpc.io/docs/client/links/httpBatchLink
156
166
  */
157
167
  function httpBatchLink(opts) {
168
+ var _opts$maxURLLength, _opts$maxItems;
158
169
  const resolvedOpts = require_httpUtils.resolveHTTPLinkOptions(opts);
159
- const maxURLLength = opts.maxURLLength ?? Infinity;
160
- const maxItems = opts.maxItems ?? Infinity;
170
+ const maxURLLength = (_opts$maxURLLength = opts.maxURLLength) !== null && _opts$maxURLLength !== void 0 ? _opts$maxURLLength : Infinity;
171
+ const maxItems = (_opts$maxItems = opts.maxItems) !== null && _opts$maxItems !== void 0 ? _opts$maxItems : Infinity;
161
172
  return () => {
162
173
  const batchLoader = (type) => {
163
174
  return {
@@ -166,21 +177,19 @@ function httpBatchLink(opts) {
166
177
  if (batchOps.length > maxItems) return false;
167
178
  const path = batchOps.map((op) => op.path).join(",");
168
179
  const inputs = batchOps.map((op) => op.input);
169
- const url = require_httpUtils.getUrl({
170
- ...resolvedOpts,
180
+ const url = require_httpUtils.getUrl((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {
171
181
  type,
172
182
  path,
173
183
  inputs,
174
184
  signal: null
175
- });
185
+ }));
176
186
  return url.length <= maxURLLength;
177
187
  },
178
188
  async fetch(batchOps) {
179
189
  const path = batchOps.map((op) => op.path).join(",");
180
190
  const inputs = batchOps.map((op) => op.input);
181
191
  const signal = allAbortSignals(...batchOps.map((op) => op.signal));
182
- const res = await require_httpUtils.jsonHttpRequester({
183
- ...resolvedOpts,
192
+ const res = await require_httpUtils.jsonHttpRequester((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {
184
193
  path,
185
194
  inputs,
186
195
  type,
@@ -190,7 +199,7 @@ function httpBatchLink(opts) {
190
199
  return opts.headers;
191
200
  },
192
201
  signal
193
- });
202
+ }));
194
203
  const resJSON = Array.isArray(res.json) ? res.json : batchOps.map(() => res.json);
195
204
  const result = resJSON.map((item) => ({
196
205
  meta: res.meta,
@@ -226,7 +235,7 @@ function httpBatchLink(opts) {
226
235
  });
227
236
  observer.complete();
228
237
  }).catch((err) => {
229
- observer.error(require_TRPCClientError.TRPCClientError.from(err, { meta: _res?.meta }));
238
+ observer.error(require_TRPCClientError.TRPCClientError.from(err, { meta: _res === null || _res === void 0 ? void 0 : _res.meta }));
230
239
  });
231
240
  return () => {};
232
241
  });
@@ -1,5 +1,5 @@
1
- import { HTTPHeaders, NonEmptyArray, Operation, TRPCLink } from "./types.d-DXbqQLCC.mjs";
2
- import { HTTPLinkBaseOptions } from "./httpUtils.d-C8wPxU79.mjs";
1
+ import { HTTPHeaders, NonEmptyArray, Operation, TRPCLink } from "./types.d-POgEdUB1.mjs";
2
+ import { HTTPLinkBaseOptions } from "./httpUtils.d-cQRQZrfo.mjs";
3
3
  import { AnyClientTypes } from "@trpc/server/unstable-core-do-not-import";
4
4
  import { AnyRouter as AnyRouter$1 } from "@trpc/server";
5
5
 
@@ -30,4 +30,4 @@ declare function httpBatchLink<TRouter extends AnyRouter$1>(opts: HTTPBatchLinkO
30
30
 
31
31
  //#endregion
32
32
  export { HTTPBatchLinkOptions, httpBatchLink };
33
- //# sourceMappingURL=httpBatchLink.d-BN2Iw_cK.d.mts.map
33
+ //# sourceMappingURL=httpBatchLink.d-CAaMQOtX.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"httpBatchLink.d-BN2Iw_cK.d.mts","names":[],"sources":["../src/links/HTTPBatchLinkOptions.ts","../src/links/httpBatchLink.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,mCAAmC,kBAC7C,oBAAoB;;EADV;;;;EACe,OAAzB,CAAA,EAOM,WAPN,GAAA,CAAA,CAAA,IAAA,EAAA;IAOM,MAAA,EAEU,aAFV,CAEwB,SAFxB,CAAA;EAAW,CAAA,EAEa,GAClB,WADkB,GACJ,OADI,CACI,WADJ,CAAA,CAAA;EAAS;;;;EACN,QAAA,CAAA,EAAA,MAAA;;;;;;;;AAXvB,iBCeI,aDfgB,CAAA,gBCec,WDfd,CAAA,CAAA,IAAA,ECgBxB,oBDhBwB,CCgBH,ODhBG,CAAA,MAAA,CAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,ECiB7B,QDjB6B,CCiBpB,ODjBoB,CAAA"}
1
+ {"version":3,"file":"httpBatchLink.d-CAaMQOtX.d.mts","names":[],"sources":["../src/links/HTTPBatchLinkOptions.ts","../src/links/httpBatchLink.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,mCAAmC,kBAC7C,oBAAoB;;EADV;;;;EACe,OAAzB,CAAA,EAOM,WAPN,GAAA,CAAA,CAAA,IAAA,EAAA;IAOM,MAAA,EAEU,aAFV,CAEwB,SAFxB,CAAA;EAAW,CAAA,EAEa,GAClB,WADkB,GACJ,OADI,CACI,WADJ,CAAA,CAAA;EAAS;;;;EACN,QAAA,CAAA,EAAA,MAAA;;;;;;;;AAXvB,iBCeI,aDfgB,CAAA,gBCec,WDfd,CAAA,CAAA,IAAA,ECgBxB,oBDhBwB,CCgBH,ODhBG,CAAA,MAAA,CAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,ECiB7B,QDjB6B,CCiBpB,ODjBoB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_TRPCClientError = require('./TRPCClientError-CGgRtttT.cjs');
3
- const require_httpUtils = require('./httpUtils-Buf6jCgh.cjs');
2
+ const require_objectSpread2$1 = require('./objectSpread2-Bsvh_OqM.cjs');
3
+ const require_TRPCClientError = require('./TRPCClientError-Dey88Uiy.cjs');
4
+ const require_httpUtils = require('./httpUtils-rn2lxsJO.cjs');
4
5
  const __trpc_server_observable = require_chunk.__toESM(require("@trpc/server/observable"));
5
6
  const __trpc_server_unstable_core_do_not_import = require_chunk.__toESM(require("@trpc/server/unstable-core-do-not-import"));
6
7
 
@@ -17,26 +18,25 @@ function isNonJsonSerializable(input) {
17
18
 
18
19
  //#endregion
19
20
  //#region src/links/httpLink.ts
21
+ var import_objectSpread2 = require_chunk.__toESM(require_objectSpread2$1.require_objectSpread2(), 1);
20
22
  const universalRequester = (opts) => {
21
23
  if ("input" in opts) {
22
24
  const { input } = opts;
23
25
  if (isFormData(input)) {
24
26
  if (opts.type !== "mutation" && opts.methodOverride !== "POST") throw new Error("FormData is only supported for mutations");
25
- return require_httpUtils.httpRequest({
26
- ...opts,
27
+ return require_httpUtils.httpRequest((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {
27
28
  contentTypeHeader: void 0,
28
29
  getUrl: require_httpUtils.getUrl,
29
30
  getBody: () => input
30
- });
31
+ }));
31
32
  }
32
33
  if (isOctetType(input)) {
33
34
  if (opts.type !== "mutation" && opts.methodOverride !== "POST") throw new Error("Octet type input is only supported for mutations");
34
- return require_httpUtils.httpRequest({
35
- ...opts,
35
+ return require_httpUtils.httpRequest((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, opts), {}, {
36
36
  contentTypeHeader: "application/octet-stream",
37
37
  getUrl: require_httpUtils.getUrl,
38
38
  getBody: () => input
39
- });
39
+ }));
40
40
  }
41
41
  }
42
42
  return require_httpUtils.jsonHttpRequester(opts);
@@ -52,8 +52,7 @@ function httpLink(opts) {
52
52
  const { path, input, type } = op;
53
53
  /* istanbul ignore if -- @preserve */
54
54
  if (type === "subscription") throw new Error("Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`");
55
- const request = universalRequester({
56
- ...resolvedOpts,
55
+ const request = universalRequester((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolvedOpts), {}, {
57
56
  type,
58
57
  path,
59
58
  input,
@@ -63,7 +62,7 @@ function httpLink(opts) {
63
62
  if (typeof opts.headers === "function") return opts.headers({ op });
64
63
  return opts.headers;
65
64
  }
66
- });
65
+ }));
67
66
  let meta = void 0;
68
67
  request.then((res) => {
69
68
  meta = res.meta;