@trpc/server 11.18.1-canary.9 → 11.19.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.
Files changed (182) hide show
  1. package/dist/adapters/aws-lambda/index.cjs +16 -26
  2. package/dist/adapters/aws-lambda/index.d.cts +6 -16
  3. package/dist/adapters/aws-lambda/index.d.cts.map +1 -1
  4. package/dist/adapters/aws-lambda/index.d.mts +6 -16
  5. package/dist/adapters/aws-lambda/index.d.mts.map +1 -1
  6. package/dist/adapters/aws-lambda/index.mjs +13 -23
  7. package/dist/adapters/aws-lambda/index.mjs.map +1 -1
  8. package/dist/adapters/express.cjs +7 -16
  9. package/dist/adapters/express.d.cts +4 -11
  10. package/dist/adapters/express.d.cts.map +1 -1
  11. package/dist/adapters/express.d.mts +4 -11
  12. package/dist/adapters/express.d.mts.map +1 -1
  13. package/dist/adapters/express.mjs +6 -15
  14. package/dist/adapters/express.mjs.map +1 -1
  15. package/dist/adapters/fastify/index.cjs +11 -24
  16. package/dist/adapters/fastify/index.d.cts +7 -14
  17. package/dist/adapters/fastify/index.d.cts.map +1 -1
  18. package/dist/adapters/fastify/index.d.mts +7 -14
  19. package/dist/adapters/fastify/index.d.mts.map +1 -1
  20. package/dist/adapters/fastify/index.mjs +10 -23
  21. package/dist/adapters/fastify/index.mjs.map +1 -1
  22. package/dist/adapters/fetch/index.cjs +7 -12
  23. package/dist/adapters/fetch/index.d.cts +7 -15
  24. package/dist/adapters/fetch/index.d.cts.map +1 -1
  25. package/dist/adapters/fetch/index.d.mts +7 -15
  26. package/dist/adapters/fetch/index.d.mts.map +1 -1
  27. package/dist/adapters/fetch/index.mjs +6 -11
  28. package/dist/adapters/fetch/index.mjs.map +1 -1
  29. package/dist/adapters/next-app-dir.cjs +13 -3145
  30. package/dist/adapters/next-app-dir.d.cts +3 -12
  31. package/dist/adapters/next-app-dir.d.cts.map +1 -1
  32. package/dist/adapters/next-app-dir.d.mts +3 -12
  33. package/dist/adapters/next-app-dir.d.mts.map +1 -1
  34. package/dist/adapters/next-app-dir.mjs +31 -3165
  35. package/dist/adapters/next-app-dir.mjs.map +1 -1
  36. package/dist/adapters/next.cjs +8 -16
  37. package/dist/adapters/next.d.cts +5 -15
  38. package/dist/adapters/next.d.cts.map +1 -1
  39. package/dist/adapters/next.d.mts +5 -15
  40. package/dist/adapters/next.d.mts.map +1 -1
  41. package/dist/adapters/next.mjs +7 -15
  42. package/dist/adapters/next.mjs.map +1 -1
  43. package/dist/adapters/node-http/index.cjs +3 -12
  44. package/dist/adapters/node-http/index.d.cts +1 -4
  45. package/dist/adapters/node-http/index.d.mts +1 -4
  46. package/dist/adapters/node-http/index.mjs +2 -12
  47. package/dist/adapters/standalone.cjs +21 -21
  48. package/dist/adapters/standalone.d.cts +9 -14
  49. package/dist/adapters/standalone.d.cts.map +1 -1
  50. package/dist/adapters/standalone.d.mts +9 -14
  51. package/dist/adapters/standalone.d.mts.map +1 -1
  52. package/dist/adapters/standalone.mjs +17 -19
  53. package/dist/adapters/standalone.mjs.map +1 -1
  54. package/dist/adapters/ws.cjs +3 -15
  55. package/dist/adapters/ws.d.cts +12 -17
  56. package/dist/adapters/ws.d.cts.map +1 -1
  57. package/dist/adapters/ws.d.mts +12 -17
  58. package/dist/adapters/ws.d.mts.map +1 -1
  59. package/dist/adapters/ws.mjs +2 -15
  60. package/dist/{codes-BfZsPdy-.cjs → codes-C6ZIq69A.cjs} +78 -74
  61. package/dist/{codes-DagpWZLc.mjs → codes-D5Ya6_Bi.mjs} +10 -4
  62. package/dist/codes-D5Ya6_Bi.mjs.map +1 -0
  63. package/dist/{contentTypeParsers-iAFF_pJG.cjs → contentTypeParsers-DUzXRHT1.cjs} +6 -8
  64. package/dist/{contentTypeParsers-SN4WL9ze.mjs → contentTypeParsers-KFMy_fwz.mjs} +3 -3
  65. package/dist/contentTypeParsers-KFMy_fwz.mjs.map +1 -0
  66. package/dist/getErrorShape-B0JBUs-i.mjs +209 -0
  67. package/dist/getErrorShape-B0JBUs-i.mjs.map +1 -0
  68. package/dist/getErrorShape-DeIapApr.cjs +272 -0
  69. package/dist/http.cjs +5 -9
  70. package/dist/http.d.cts +2 -3
  71. package/dist/http.d.mts +2 -3
  72. package/dist/http.mjs +4 -9
  73. package/dist/{index.d-DhhodpGb.d.mts → index-BHatz_Pu.d.cts} +3 -8
  74. package/dist/index-BHatz_Pu.d.cts.map +1 -0
  75. package/dist/{index.d-BiUz7kM_.d.cts → index-BMimGNYb.d.cts} +2 -5
  76. package/dist/index-BMimGNYb.d.cts.map +1 -0
  77. package/dist/{index.d-D4qZxQJh.d.mts → index-BMimGNYb.d.mts} +2 -5
  78. package/dist/index-BMimGNYb.d.mts.map +1 -0
  79. package/dist/{index.d-fBAdSX6g.d.cts → index-_jAhoJQ7.d.mts} +3 -8
  80. package/dist/index-_jAhoJQ7.d.mts.map +1 -0
  81. package/dist/index.cjs +5 -6
  82. package/dist/index.d.cts +10 -4
  83. package/dist/index.d.cts.map +1 -0
  84. package/dist/index.d.mts +10 -4
  85. package/dist/index.d.mts.map +1 -0
  86. package/dist/index.mjs +4 -6
  87. package/dist/{initTRPC-BRf4imah.mjs → initTRPC-B259os3T.mjs} +85 -83
  88. package/dist/initTRPC-B259os3T.mjs.map +1 -0
  89. package/dist/{initTRPC-_cqIfGlH.cjs → initTRPC-B7UdX-c3.cjs} +133 -132
  90. package/dist/{node-http-n0vBVXjb.mjs → node-http-BUlb5EdB.mjs} +29 -26
  91. package/dist/node-http-BUlb5EdB.mjs.map +1 -0
  92. package/dist/{node-http-CSXWJkwC.cjs → node-http-CikCqjt6.cjs} +48 -46
  93. package/dist/observable/index.cjs +4 -4
  94. package/dist/observable/index.d.cts +2 -2
  95. package/dist/observable/index.d.mts +2 -2
  96. package/dist/observable/index.mjs +3 -4
  97. package/dist/{observable-B1Nk6r1H.cjs → observable-CIyO2eSm.cjs} +28 -32
  98. package/dist/{observable-CUiPknO-.mjs → observable-CSprJVOf.mjs} +6 -10
  99. package/dist/observable-CSprJVOf.mjs.map +1 -0
  100. package/dist/{observable-BVzLuBs6.cjs → observable-D8mqXlHG.cjs} +34 -39
  101. package/dist/{observable-UMO3vUa_.mjs → observable-DwUFSuKv.mjs} +10 -12
  102. package/dist/observable-DwUFSuKv.mjs.map +1 -0
  103. package/dist/{parseTRPCMessage-D1ZZaDox.cjs → parseTRPCMessage-BxAIUx49.cjs} +13 -17
  104. package/dist/{parseTRPCMessage-CPM1-44n.mjs → parseTRPCMessage-MJWDg1vX.mjs} +5 -8
  105. package/dist/parseTRPCMessage-MJWDg1vX.mjs.map +1 -0
  106. package/dist/{resolveResponse-Djb7nJqb.cjs → resolveResponse-DLpzHrPG.cjs} +505 -583
  107. package/dist/{resolveResponse-C7cFScHo.mjs → resolveResponse-JtMyT9TQ.mjs} +412 -489
  108. package/dist/resolveResponse-JtMyT9TQ.mjs.map +1 -0
  109. package/dist/rolldown-runtime-VH7oDXx4.cjs +28 -0
  110. package/dist/rpc.cjs +4 -4
  111. package/dist/rpc.d.cts +2 -3
  112. package/dist/rpc.d.mts +2 -3
  113. package/dist/rpc.mjs +3 -4
  114. package/dist/shared.cjs +3 -4
  115. package/dist/shared.d.cts +2 -4
  116. package/dist/shared.d.mts +2 -4
  117. package/dist/shared.mjs +2 -4
  118. package/dist/{tracked-DFxm8M2u.cjs → tracked-BQJb0ANk.cjs} +125 -142
  119. package/dist/{tracked-DWInO6EQ.mjs → tracked-D4jU_Hb3.mjs} +42 -58
  120. package/dist/tracked-D4jU_Hb3.mjs.map +1 -0
  121. package/dist/{unstable-core-do-not-import.d-BdVSvUCr.d.mts → unstable-core-do-not-import-B9ZnrQAU.d.cts} +37 -69
  122. package/dist/unstable-core-do-not-import-B9ZnrQAU.d.cts.map +1 -0
  123. package/dist/{unstable-core-do-not-import.d-Dh9CT5RO.d.cts → unstable-core-do-not-import-BK_OKrtM.d.mts} +37 -69
  124. package/dist/unstable-core-do-not-import-BK_OKrtM.d.mts.map +1 -0
  125. package/dist/unstable-core-do-not-import.cjs +33 -12
  126. package/dist/unstable-core-do-not-import.d.cts +2 -3
  127. package/dist/unstable-core-do-not-import.d.mts +2 -3
  128. package/dist/unstable-core-do-not-import.mjs +32 -10
  129. package/dist/unstable-core-do-not-import.mjs.map +1 -0
  130. package/dist/{ws-DCe9kEo_.cjs → ws-BMSSVFiW.cjs} +59 -65
  131. package/dist/{ws-Bme8aJNK.mjs → ws-C7ZOJJeA.mjs} +41 -46
  132. package/dist/ws-C7ZOJJeA.mjs.map +1 -0
  133. package/package.json +13 -13
  134. package/src/adapters/aws-lambda/getPlanner.ts +1 -2
  135. package/src/adapters/aws-lambda/index.ts +1 -2
  136. package/src/adapters/ws.ts +3 -2
  137. package/src/adapters/wsEncoder.ts +1 -1
  138. package/src/observable/behaviorSubject.ts +4 -2
  139. package/src/observable/types.ts +4 -2
  140. package/src/unstable-core-do-not-import/clientish/inferrable.ts +1 -4
  141. package/src/unstable-core-do-not-import/http/contentType.ts +1 -1
  142. package/src/unstable-core-do-not-import/http/resolveResponse.ts +4 -9
  143. package/src/unstable-core-do-not-import/http/types.ts +8 -4
  144. package/src/unstable-core-do-not-import/initTRPC.ts +10 -10
  145. package/src/unstable-core-do-not-import/middleware.ts +3 -2
  146. package/src/unstable-core-do-not-import/procedure.ts +11 -11
  147. package/src/unstable-core-do-not-import/router.ts +4 -5
  148. package/src/unstable-core-do-not-import/rpc/envelopes.ts +33 -34
  149. package/src/unstable-core-do-not-import/stream/jsonl.ts +1 -2
  150. package/src/unstable-core-do-not-import/stream/sse.ts +18 -12
  151. package/src/unstable-core-do-not-import/stream/utils/mergeAsyncIterables.ts +5 -2
  152. package/src/unstable-core-do-not-import/stream/utils/withPing.ts +1 -3
  153. package/src/unstable-core-do-not-import/transformer.ts +1 -4
  154. package/src/unstable-core-do-not-import/types.ts +9 -10
  155. package/dist/codes-DagpWZLc.mjs.map +0 -1
  156. package/dist/contentTypeParsers-SN4WL9ze.mjs.map +0 -1
  157. package/dist/getErrorShape-BPSzUA7W.mjs +0 -269
  158. package/dist/getErrorShape-BPSzUA7W.mjs.map +0 -1
  159. package/dist/getErrorShape-Ed1OwssN.cjs +0 -345
  160. package/dist/http-CWyjOa1l.mjs +0 -0
  161. package/dist/http-DXy3XyhL.cjs +0 -0
  162. package/dist/index.d-BiUz7kM_.d.cts.map +0 -1
  163. package/dist/index.d-CvZXeEyR.d.cts +0 -11
  164. package/dist/index.d-CvZXeEyR.d.cts.map +0 -1
  165. package/dist/index.d-D4qZxQJh.d.mts.map +0 -1
  166. package/dist/index.d-DhhodpGb.d.mts.map +0 -1
  167. package/dist/index.d-fBAdSX6g.d.cts.map +0 -1
  168. package/dist/index.d-vq_QHko2.d.mts +0 -11
  169. package/dist/index.d-vq_QHko2.d.mts.map +0 -1
  170. package/dist/initTRPC-BRf4imah.mjs.map +0 -1
  171. package/dist/node-http-n0vBVXjb.mjs.map +0 -1
  172. package/dist/observable-CUiPknO-.mjs.map +0 -1
  173. package/dist/observable-UMO3vUa_.mjs.map +0 -1
  174. package/dist/parseTRPCMessage-CPM1-44n.mjs.map +0 -1
  175. package/dist/resolveResponse-C7cFScHo.mjs.map +0 -1
  176. package/dist/tracked-DWInO6EQ.mjs.map +0 -1
  177. package/dist/unstable-core-do-not-import-9NNw8uQM.mjs +0 -31
  178. package/dist/unstable-core-do-not-import-9NNw8uQM.mjs.map +0 -1
  179. package/dist/unstable-core-do-not-import-fsjhEhgh.cjs +0 -35
  180. package/dist/unstable-core-do-not-import.d-BdVSvUCr.d.mts.map +0 -1
  181. package/dist/unstable-core-do-not-import.d-Dh9CT5RO.d.cts.map +0 -1
  182. package/dist/ws-Bme8aJNK.mjs.map +0 -1
@@ -406,6 +406,7 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
406
406
  });
407
407
  clientSubscriptions.delete(id);
408
408
  }).catch((cause) => {
409
+ clientSubscriptions.delete(id);
409
410
  const error = getTRPCErrorFromUnknown(cause);
410
411
  opts.onError?.({ error, path, type, ctx, req, input });
411
412
  respond({
@@ -585,13 +586,13 @@ export function handleKeepAlive(
585
586
  const scheduleTimeout = () => {
586
587
  timeout = setTimeout(() => {
587
588
  client.terminate();
588
- }, pongWaitMs) as any;
589
+ }, pongWaitMs);
589
590
  };
590
591
  ping = setTimeout(() => {
591
592
  client.send('PING');
592
593
 
593
594
  scheduleTimeout();
594
- }, pingMs) as any;
595
+ }, pingMs);
595
596
  };
596
597
 
597
598
  const onMessage = () => {
@@ -12,7 +12,7 @@
12
12
  */
13
13
  export interface Encoder {
14
14
  /** Encode data for transmission over the wire */
15
- encode(data: unknown): string | Uint8Array;
15
+ encode(data: unknown): string | Uint8Array<ArrayBuffer>;
16
16
  /** Decode data received from the wire */
17
17
  decode(data: string | ArrayBuffer | Uint8Array): unknown;
18
18
  }
@@ -7,8 +7,10 @@ export interface BehaviorSubject<TValue> extends Observable<TValue, never> {
7
7
  get: () => TValue;
8
8
  }
9
9
 
10
- export interface ReadonlyBehaviorSubject<TValue>
11
- extends Omit<BehaviorSubject<TValue>, 'next'> {}
10
+ export interface ReadonlyBehaviorSubject<TValue> extends Omit<
11
+ BehaviorSubject<TValue>,
12
+ 'next'
13
+ > {}
12
14
 
13
15
  /**
14
16
  * @internal
@@ -5,8 +5,10 @@ export type UnsubscribeFn = () => void;
5
5
  interface Subscribable<TValue, TError> {
6
6
  subscribe(observer: Partial<Observer<TValue, TError>>): Unsubscribable;
7
7
  }
8
- export interface Observable<TValue, TError>
9
- extends Subscribable<TValue, TError> {
8
+ export interface Observable<TValue, TError> extends Subscribable<
9
+ TValue,
10
+ TError
11
+ > {
10
12
  pipe(): Observable<TValue, TError>;
11
13
  pipe<TValue1, TError1>(
12
14
  op1: OperatorFunction<TValue, TError, TValue1, TError1>,
@@ -29,10 +29,7 @@ type RootConfigLike = {
29
29
  * Anything that can be inferred to the root config types needed for a TRPC client
30
30
  */
31
31
  export type InferrableClientTypes =
32
- | RouterLike
33
- | InitLike
34
- | RootConfigLike
35
- | AnyClientTypes;
32
+ RouterLike | InitLike | RootConfigLike | AnyClientTypes;
36
33
 
37
34
  type PickTypes<T extends AnyClientTypes> = {
38
35
  transformer: T['transformer'];
@@ -12,7 +12,7 @@ export function getAcceptHeader(headers: Headers): TRPCAcceptHeader | null {
12
12
  .get('accept')
13
13
  ?.split(',')
14
14
  .some((t) => t.trim() === 'application/jsonl')
15
- ? ('application/jsonl' as TRPCAcceptHeader)
15
+ ? 'application/jsonl'
16
16
  : null)
17
17
  );
18
18
  }
@@ -35,13 +35,7 @@ function errorToAsyncIterable(err: TRPCError): AsyncIterable<never> {
35
35
  });
36
36
  }
37
37
  type HTTPMethods =
38
- | 'GET'
39
- | 'POST'
40
- | 'HEAD'
41
- | 'OPTIONS'
42
- | 'PUT'
43
- | 'DELETE'
44
- | 'PATCH';
38
+ 'GET' | 'POST' | 'HEAD' | 'OPTIONS' | 'PUT' | 'DELETE' | 'PATCH';
45
39
 
46
40
  function combinedAbortController(signal: AbortSignal) {
47
41
  const controller = new AbortController();
@@ -67,8 +61,9 @@ const TYPE_ACCEPTED_METHOD_MAP_WITH_METHOD_OVERRIDE: Record<
67
61
  subscription: ['GET', 'POST'],
68
62
  };
69
63
 
70
- interface ResolveHTTPRequestOptions<TRouter extends AnyRouter>
71
- extends HTTPBaseHandlerOptions<TRouter, Request> {
64
+ interface ResolveHTTPRequestOptions<
65
+ TRouter extends AnyRouter,
66
+ > extends HTTPBaseHandlerOptions<TRouter, Request> {
72
67
  createContext: ResolveHTTPRequestOptionsContextFn<TRouter>;
73
68
  req: Request;
74
69
  path: string;
@@ -45,8 +45,10 @@ export type ResponseMetaFn<TRouter extends AnyRouter> = (opts: {
45
45
  /**
46
46
  * Base interface for anything using HTTP
47
47
  */
48
- export interface HTTPBaseHandlerOptions<TRouter extends AnyRouter, TRequest>
49
- extends BaseHandlerOptions<TRouter, TRequest> {
48
+ export interface HTTPBaseHandlerOptions<
49
+ TRouter extends AnyRouter,
50
+ TRequest,
51
+ > extends BaseHandlerOptions<TRouter, TRequest> {
50
52
  /**
51
53
  * Add handler to be called before response is sent to the user
52
54
  * Useful for setting cache headers
@@ -121,8 +123,10 @@ export interface TRPCRequestInfo {
121
123
  export type ResolveHTTPRequestOptionsContextFn<TRouter extends AnyRouter> =
122
124
  (opts: { info: TRPCRequestInfo }) => Promise<inferRouterContext<TRouter>>;
123
125
 
124
- interface HTTPErrorHandlerOptions<TRouter extends AnyRouter, TRequest>
125
- extends ErrorHandlerOptions<inferRouterContext<TRouter>> {
126
+ interface HTTPErrorHandlerOptions<
127
+ TRouter extends AnyRouter,
128
+ TRequest,
129
+ > extends ErrorHandlerOptions<inferRouterContext<TRouter>> {
126
130
  req: TRequest;
127
131
  }
128
132
  /**
@@ -32,16 +32,16 @@ export interface RuntimeConfigOptions<
32
32
  TContext extends object,
33
33
  TMeta extends object,
34
34
  > extends Partial<
35
- Omit<
36
- RootConfig<{
37
- ctx: TContext;
38
- meta: TMeta;
39
- errorShape: any;
40
- transformer: any;
41
- }>,
42
- '$types' | 'transformer'
43
- >
44
- > {
35
+ Omit<
36
+ RootConfig<{
37
+ ctx: TContext;
38
+ meta: TMeta;
39
+ errorShape: any;
40
+ transformer: any;
41
+ }>,
42
+ '$types' | 'transformer'
43
+ >
44
+ > {
45
45
  /**
46
46
  * Use a data transformer
47
47
  * @see https://trpc.io/docs/v11/data-transformers
@@ -24,8 +24,9 @@ interface MiddlewareOKResult<_TContextOverride> extends MiddlewareResultBase {
24
24
  // this could be extended with `input`/`rawInput` later
25
25
  }
26
26
 
27
- interface MiddlewareErrorResult<_TContextOverride>
28
- extends MiddlewareResultBase {
27
+ interface MiddlewareErrorResult<
28
+ _TContextOverride,
29
+ > extends MiddlewareResultBase {
29
30
  ok: false;
30
31
  error: TRPCError;
31
32
  }
@@ -52,14 +52,17 @@ export interface Procedure<
52
52
  (opts: ProcedureCallOptions<unknown>): Promise<TDef['output']>;
53
53
  }
54
54
 
55
- export interface QueryProcedure<TDef extends BuiltProcedureDef>
56
- extends Procedure<'query', TDef> {}
55
+ export interface QueryProcedure<
56
+ TDef extends BuiltProcedureDef,
57
+ > extends Procedure<'query', TDef> {}
57
58
 
58
- export interface MutationProcedure<TDef extends BuiltProcedureDef>
59
- extends Procedure<'mutation', TDef> {}
59
+ export interface MutationProcedure<
60
+ TDef extends BuiltProcedureDef,
61
+ > extends Procedure<'mutation', TDef> {}
60
62
 
61
- export interface SubscriptionProcedure<TDef extends BuiltProcedureDef>
62
- extends Procedure<'subscription', TDef> {}
63
+ export interface SubscriptionProcedure<
64
+ TDef extends BuiltProcedureDef,
65
+ > extends Procedure<'subscription', TDef> {}
63
66
 
64
67
  /**
65
68
  * @deprecated
@@ -73,13 +76,10 @@ export interface LegacyObservableSubscriptionProcedure<
73
76
  export type AnyQueryProcedure = QueryProcedure<any>;
74
77
  export type AnyMutationProcedure = MutationProcedure<any>;
75
78
  export type AnySubscriptionProcedure =
76
- | SubscriptionProcedure<any>
77
- | LegacyObservableSubscriptionProcedure<any>;
79
+ SubscriptionProcedure<any> | LegacyObservableSubscriptionProcedure<any>;
78
80
 
79
81
  export type AnyProcedure =
80
- | AnyQueryProcedure
81
- | AnyMutationProcedure
82
- | AnySubscriptionProcedure;
82
+ AnyQueryProcedure | AnyMutationProcedure | AnySubscriptionProcedure;
83
83
 
84
84
  export type inferProcedureInput<TProcedure extends AnyProcedure> =
85
85
  undefined extends inferProcedureParams<TProcedure>['$types']['input']
@@ -223,10 +223,7 @@ const reservedWords = [
223
223
  /** @internal */
224
224
  export type CreateRouterOptions = {
225
225
  [key: string]:
226
- | AnyProcedure
227
- | AnyRouter
228
- | CreateRouterOptions
229
- | Lazy<AnyRouter>;
226
+ AnyProcedure | AnyRouter | CreateRouterOptions | Lazy<AnyRouter>;
230
227
  };
231
228
 
232
229
  /** @internal */
@@ -378,7 +375,9 @@ export async function getProcedureAtPath(
378
375
  let procedure = _def.procedures[path];
379
376
 
380
377
  while (!procedure) {
381
- const key = Object.keys(_def.lazy).find((key) => path.startsWith(key));
378
+ const key = Object.keys(_def.lazy).find(
379
+ (key) => path === key || path.startsWith(key + '.'),
380
+ );
382
381
  // console.log(`found lazy: ${key ?? 'NOPE'} (fullPath: ${fullPath})`);
383
382
 
384
383
  if (!key) {
@@ -26,13 +26,16 @@ export namespace JSONRPC2 {
26
26
  jsonrpc?: '2.0';
27
27
  }
28
28
 
29
- export interface BaseRequest<TMethod extends string = string>
30
- extends BaseEnvelope {
29
+ export interface BaseRequest<
30
+ TMethod extends string = string,
31
+ > extends BaseEnvelope {
31
32
  method: TMethod;
32
33
  }
33
34
 
34
- export interface Request<TMethod extends string = string, TParams = unknown>
35
- extends BaseRequest<TMethod> {
35
+ export interface Request<
36
+ TMethod extends string = string,
37
+ TParams = unknown,
38
+ > extends BaseRequest<TMethod> {
36
39
  params: TParams;
37
40
  }
38
41
 
@@ -40,26 +43,26 @@ export namespace JSONRPC2 {
40
43
  result: TResult;
41
44
  }
42
45
 
43
- export interface ErrorResponse<TError extends TRPCErrorShape = TRPCErrorShape>
44
- extends BaseEnvelope {
46
+ export interface ErrorResponse<
47
+ TError extends TRPCErrorShape = TRPCErrorShape,
48
+ > extends BaseEnvelope {
45
49
  error: TError;
46
50
  }
47
51
  }
48
52
 
49
53
  /////////////////////////// HTTP envelopes ///////////////////////
50
54
 
51
- export interface TRPCRequest
52
- extends JSONRPC2.Request<
53
- ProcedureType,
54
- {
55
- path: string;
56
- input: unknown;
57
- /**
58
- * The last event id that the client received
59
- */
60
- lastEventId?: string;
61
- }
62
- > {}
55
+ export interface TRPCRequest extends JSONRPC2.Request<
56
+ ProcedureType,
57
+ {
58
+ path: string;
59
+ input: unknown;
60
+ /**
61
+ * The last event id that the client received
62
+ */
63
+ lastEventId?: string;
64
+ }
65
+ > {}
63
66
 
64
67
  export interface TRPCResult<TData = unknown> {
65
68
  data: TData;
@@ -70,8 +73,9 @@ export interface TRPCResult<TData = unknown> {
70
73
  id?: string;
71
74
  }
72
75
 
73
- export interface TRPCSuccessResponse<TData>
74
- extends JSONRPC2.ResultResponse<TRPCResult<TData>> {}
76
+ export interface TRPCSuccessResponse<TData> extends JSONRPC2.ResultResponse<
77
+ TRPCResult<TData>
78
+ > {}
75
79
 
76
80
  export interface TRPCErrorResponse<
77
81
  TError extends TRPCErrorShape = TRPCErrorShape,
@@ -91,8 +95,7 @@ export type TRPCRequestMessage = TRPCRequest & {
91
95
  /**
92
96
  * The client asked the server to unsubscribe
93
97
  */
94
- export interface TRPCSubscriptionStopNotification
95
- extends JSONRPC2.BaseRequest<'subscription.stop'> {
98
+ export interface TRPCSubscriptionStopNotification extends JSONRPC2.BaseRequest<'subscription.stop'> {
96
99
  id: null;
97
100
  }
98
101
 
@@ -108,26 +111,23 @@ export type TRPCClientOutgoingMessage =
108
111
  | TRPCRequestMessage
109
112
  | (JSONRPC2.BaseRequest<'subscription.stop'> & { id: JSONRPC2.RequestId });
110
113
 
111
- export interface TRPCResultMessage<TData>
112
- extends JSONRPC2.ResultResponse<
113
- | { type: 'started'; data?: never }
114
- | { type: 'stopped'; data?: never }
115
- | TRPCResult<TData>
116
- > {}
114
+ export interface TRPCResultMessage<TData> extends JSONRPC2.ResultResponse<
115
+ | { type: 'started'; data?: never }
116
+ | { type: 'stopped'; data?: never }
117
+ | TRPCResult<TData>
118
+ > {}
117
119
 
118
120
  export type TRPCResponseMessage<
119
121
  TData = unknown,
120
122
  TError extends TRPCErrorShape = TRPCErrorShape,
121
123
  > = { id: JSONRPC2.RequestId } & (
122
- | TRPCErrorResponse<TError>
123
- | TRPCResultMessage<TData>
124
+ TRPCErrorResponse<TError> | TRPCResultMessage<TData>
124
125
  );
125
126
 
126
127
  /**
127
128
  * The server asked the client to reconnect - useful when restarting/redeploying service
128
129
  */
129
- export interface TRPCReconnectNotification
130
- extends JSONRPC2.BaseRequest<'reconnect'> {
130
+ export interface TRPCReconnectNotification extends JSONRPC2.BaseRequest<'reconnect'> {
131
131
  id: JSONRPC2.RequestId;
132
132
  }
133
133
 
@@ -147,7 +147,6 @@ export type TRPCClientIncomingMessage<
147
147
  /**
148
148
  * The client sends connection params - always sent as the first message
149
149
  */
150
- export interface TRPCConnectionParamsMessage
151
- extends JSONRPC2.BaseRequest<'connectionParams'> {
150
+ export interface TRPCConnectionParamsMessage extends JSONRPC2.BaseRequest<'connectionParams'> {
152
151
  data: TRPCRequestInfo['connectionParams'];
153
152
  }
@@ -57,8 +57,7 @@ type ChunkDefinitionKey =
57
57
 
58
58
  type ChunkIndex = number & { __chunkIndex: true };
59
59
  type ChunkValueType =
60
- | CHUNK_VALUE_TYPE_PROMISE
61
- | CHUNK_VALUE_TYPE_ASYNC_ITERABLE;
60
+ CHUNK_VALUE_TYPE_PROMISE | CHUNK_VALUE_TYPE_ASYNC_ITERABLE;
62
61
  type ChunkDefinition = [
63
62
  key: ChunkDefinitionKey,
64
63
  type: ChunkValueType,
@@ -202,35 +202,41 @@ interface ConsumerStreamResultBase<TConfig extends ConsumerConfig> {
202
202
  eventSource: InstanceType<TConfig['EventSource']> | null;
203
203
  }
204
204
 
205
- interface ConsumerStreamResultData<TConfig extends ConsumerConfig>
206
- extends ConsumerStreamResultBase<TConfig> {
205
+ interface ConsumerStreamResultData<
206
+ TConfig extends ConsumerConfig,
207
+ > extends ConsumerStreamResultBase<TConfig> {
207
208
  type: 'data';
208
209
  data: inferTrackedOutput<TConfig['data']>;
209
210
  }
210
211
 
211
- interface ConsumerStreamResultError<TConfig extends ConsumerConfig>
212
- extends ConsumerStreamResultBase<TConfig> {
212
+ interface ConsumerStreamResultError<
213
+ TConfig extends ConsumerConfig,
214
+ > extends ConsumerStreamResultBase<TConfig> {
213
215
  type: 'serialized-error';
214
216
  error: TConfig['error'];
215
217
  }
216
218
 
217
- interface ConsumerStreamResultConnecting<TConfig extends ConsumerConfig>
218
- extends ConsumerStreamResultBase<TConfig> {
219
+ interface ConsumerStreamResultConnecting<
220
+ TConfig extends ConsumerConfig,
221
+ > extends ConsumerStreamResultBase<TConfig> {
219
222
  type: 'connecting';
220
223
  event: EventSourceLike.EventOf<TConfig['EventSource']> | null;
221
224
  }
222
- interface ConsumerStreamResultTimeout<TConfig extends ConsumerConfig>
223
- extends ConsumerStreamResultBase<TConfig> {
225
+ interface ConsumerStreamResultTimeout<
226
+ TConfig extends ConsumerConfig,
227
+ > extends ConsumerStreamResultBase<TConfig> {
224
228
  type: 'timeout';
225
229
  ms: number;
226
230
  }
227
- interface ConsumerStreamResultPing<TConfig extends ConsumerConfig>
228
- extends ConsumerStreamResultBase<TConfig> {
231
+ interface ConsumerStreamResultPing<
232
+ TConfig extends ConsumerConfig,
233
+ > extends ConsumerStreamResultBase<TConfig> {
229
234
  type: 'ping';
230
235
  }
231
236
 
232
- interface ConsumerStreamResultConnected<TConfig extends ConsumerConfig>
233
- extends ConsumerStreamResultBase<TConfig> {
237
+ interface ConsumerStreamResultConnected<
238
+ TConfig extends ConsumerConfig,
239
+ > extends ConsumerStreamResultBase<TConfig> {
234
240
  type: 'connected';
235
241
  options: SSEClientOptions;
236
242
  }
@@ -55,8 +55,11 @@ type ManagedIterator<TYield, TReturn> = ReturnType<
55
55
  typeof createManagedIterator<TYield, TReturn>
56
56
  >;
57
57
 
58
- interface MergedAsyncIterables<TYield>
59
- extends AsyncIterable<TYield, void, unknown> {
58
+ interface MergedAsyncIterables<TYield> extends AsyncIterable<
59
+ TYield,
60
+ void,
61
+ unknown
62
+ > {
60
63
  add(iterable: AsyncIterable<TYield>): void;
61
64
  }
62
65
 
@@ -16,9 +16,7 @@ export async function* withPing<TValue>(
16
16
 
17
17
  // declaration outside the loop for garbage collection reasons
18
18
  let result:
19
- | null
20
- | IteratorResult<TValue>
21
- | typeof disposablePromiseTimerResult;
19
+ null | IteratorResult<TValue> | typeof disposablePromiseTimerResult;
22
20
 
23
21
  let nextPromise = iterator.next();
24
22
 
@@ -112,10 +112,7 @@ function transformTRPCResponseItem<
112
112
  **/
113
113
  export function transformTRPCResponse<
114
114
  TResponse extends
115
- | TRPCResponse
116
- | TRPCResponse[]
117
- | TRPCResponseMessage
118
- | TRPCResponseMessage[],
115
+ TRPCResponse | TRPCResponse[] | TRPCResponseMessage | TRPCResponseMessage[],
119
116
  >(config: RootConfig<AnyRootTypes>, itemOrItems: TResponse) {
120
117
  return Array.isArray(itemOrItems)
121
118
  ? itemOrItems.map((item) => transformTRPCResponseItem(config, item))
@@ -35,8 +35,7 @@ export type FilterKeys<TObj extends object, TFilter> = {
35
35
  * @internal
36
36
  */
37
37
  export type Result<TType, TErr = unknown> =
38
- | { ok: true; value: TType }
39
- | { ok: false; error: TErr };
38
+ { ok: true; value: TType } | { ok: false; error: TErr };
40
39
 
41
40
  /**
42
41
  * @internal
@@ -80,11 +79,9 @@ export type DistributiveOmit<TObj, TKey extends keyof any> = TObj extends any
80
79
  * @internal
81
80
  */
82
81
  export type WithoutIndexSignature<TObj> = {
83
- [K in keyof TObj as string extends K
84
- ? never
85
- : number extends K
86
- ? never
87
- : K]: TObj[K];
82
+ [
83
+ K in keyof TObj as string extends K ? never : number extends K ? never : K
84
+ ]: TObj[K];
88
85
  };
89
86
 
90
87
  /**
@@ -96,9 +93,11 @@ export type WithoutIndexSignature<TObj> = {
96
93
  export type Overwrite<TType, TWith> = TWith extends any
97
94
  ? TType extends object
98
95
  ? {
99
- [K in // Exclude index signature from keys
100
- | keyof WithoutIndexSignature<TType>
101
- | keyof WithoutIndexSignature<TWith>]: K extends keyof TWith
96
+ [
97
+ K in // Exclude index signature from keys
98
+ | keyof WithoutIndexSignature<TType>
99
+ | keyof WithoutIndexSignature<TWith>
100
+ ]: K extends keyof TWith
102
101
  ? TWith[K]
103
102
  : K extends keyof TType
104
103
  ? TType[K]
@@ -1 +0,0 @@
1
- {"version":3,"file":"codes-DagpWZLc.mjs","names":["obj1: TType","newObj: TType","value: unknown","fn: unknown","fn: () => TValue","it: T","condition: boolean","signals: AbortSignal[]","TRPC_ERROR_CODES_BY_NUMBER: InvertKeyValue<\n typeof TRPC_ERROR_CODES_BY_KEY\n>","retryableRpcCodes: TRPC_ERROR_CODE_NUMBER[]"],"sources":["../src/unstable-core-do-not-import/utils.ts","../src/unstable-core-do-not-import/rpc/codes.ts"],"sourcesContent":["/** @internal */\nexport type UnsetMarker = 'unsetMarker' & {\n __brand: 'unsetMarker';\n};\n\n/**\n * Ensures there are no duplicate keys when building a procedure.\n * @internal\n */\nexport function mergeWithoutOverrides<TType extends Record<string, unknown>>(\n obj1: TType,\n ...objs: Partial<TType>[]\n): TType {\n const newObj: TType = Object.assign(emptyObject(), obj1);\n\n for (const overrides of objs) {\n for (const key in overrides) {\n if (key in newObj && newObj[key] !== overrides[key]) {\n throw new Error(`Duplicate key ${key}`);\n }\n newObj[key as keyof TType] = overrides[key] as TType[keyof TType];\n }\n }\n return newObj;\n}\n\n/**\n * Check that value is object\n * @internal\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return !!value && !Array.isArray(value) && typeof value === 'object';\n}\n\ntype AnyFn = ((...args: any[]) => unknown) & Record<keyof any, unknown>;\nexport function isFunction(fn: unknown): fn is AnyFn {\n return typeof fn === 'function';\n}\n\n/**\n * Create an object without inheriting anything from `Object.prototype`\n * @internal\n */\nexport function emptyObject<TObj extends Record<string, unknown>>(): TObj {\n return Object.create(null);\n}\n\nconst asyncIteratorsSupported =\n typeof Symbol === 'function' && !!Symbol.asyncIterator;\n\nexport function isAsyncIterable<TValue>(\n value: unknown,\n): value is AsyncIterable<TValue> {\n return (\n asyncIteratorsSupported && isObject(value) && Symbol.asyncIterator in value\n );\n}\n\n/**\n * Run an IIFE\n */\nexport const run = <TValue>(fn: () => TValue): TValue => fn();\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop(): void {}\n\nexport function identity<T>(it: T): T {\n return it;\n}\n\n/**\n * Generic runtime assertion function. Throws, if the condition is not `true`.\n *\n * Can be used as a slightly less dangerous variant of type assertions. Code\n * mistakes would be revealed at runtime then (hopefully during testing).\n */\nexport function assert(\n condition: boolean,\n msg = 'no additional info',\n): asserts condition {\n if (!condition) {\n throw new Error(`AssertionError: ${msg}`);\n }\n}\n\nexport function sleep(ms = 0): Promise<void> {\n return new Promise<void>((res) => setTimeout(res, ms));\n}\n\n/**\n * Ponyfill for\n * [`AbortSignal.any`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static).\n */\nexport function abortSignalsAnyPonyfill(signals: AbortSignal[]): AbortSignal {\n if (typeof AbortSignal.any === 'function') {\n return AbortSignal.any(signals);\n }\n\n const ac = new AbortController();\n\n for (const signal of signals) {\n if (signal.aborted) {\n trigger();\n break;\n }\n signal.addEventListener('abort', trigger, { once: true });\n }\n\n return ac.signal;\n\n function trigger() {\n ac.abort();\n for (const signal of signals) {\n signal.removeEventListener('abort', trigger);\n }\n }\n}\n","import type { InvertKeyValue, ValueOf } from '../types';\n\n// reference: https://www.jsonrpc.org/specification\n\n/**\n * JSON-RPC 2.0 Error codes\n *\n * `-32000` to `-32099` are reserved for implementation-defined server-errors.\n * For tRPC we're copying the last digits of HTTP 4XX errors.\n */\nexport const TRPC_ERROR_CODES_BY_KEY = {\n /**\n * Invalid JSON was received by the server.\n * An error occurred on the server while parsing the JSON text.\n */\n PARSE_ERROR: -32700,\n /**\n * The JSON sent is not a valid Request object.\n */\n BAD_REQUEST: -32600, // 400\n\n // Internal JSON-RPC error\n INTERNAL_SERVER_ERROR: -32603, // 500\n NOT_IMPLEMENTED: -32603, // 501\n BAD_GATEWAY: -32603, // 502\n SERVICE_UNAVAILABLE: -32603, // 503\n GATEWAY_TIMEOUT: -32603, // 504\n\n // Implementation specific errors\n UNAUTHORIZED: -32001, // 401\n PAYMENT_REQUIRED: -32002, // 402\n FORBIDDEN: -32003, // 403\n NOT_FOUND: -32004, // 404\n METHOD_NOT_SUPPORTED: -32005, // 405\n TIMEOUT: -32008, // 408\n CONFLICT: -32009, // 409\n PRECONDITION_FAILED: -32012, // 412\n PAYLOAD_TOO_LARGE: -32013, // 413\n UNSUPPORTED_MEDIA_TYPE: -32015, // 415\n UNPROCESSABLE_CONTENT: -32022, // 422\n PRECONDITION_REQUIRED: -32028, // 428\n TOO_MANY_REQUESTS: -32029, // 429\n CLIENT_CLOSED_REQUEST: -32099, // 499\n} as const;\n\n// pure\nexport const TRPC_ERROR_CODES_BY_NUMBER: InvertKeyValue<\n typeof TRPC_ERROR_CODES_BY_KEY\n> = {\n [-32700]: 'PARSE_ERROR',\n [-32600]: 'BAD_REQUEST',\n [-32603]: 'INTERNAL_SERVER_ERROR',\n [-32001]: 'UNAUTHORIZED',\n [-32002]: 'PAYMENT_REQUIRED',\n [-32003]: 'FORBIDDEN',\n [-32004]: 'NOT_FOUND',\n [-32005]: 'METHOD_NOT_SUPPORTED',\n [-32008]: 'TIMEOUT',\n [-32009]: 'CONFLICT',\n [-32012]: 'PRECONDITION_FAILED',\n [-32013]: 'PAYLOAD_TOO_LARGE',\n [-32015]: 'UNSUPPORTED_MEDIA_TYPE',\n [-32022]: 'UNPROCESSABLE_CONTENT',\n [-32028]: 'PRECONDITION_REQUIRED',\n [-32029]: 'TOO_MANY_REQUESTS',\n [-32099]: 'CLIENT_CLOSED_REQUEST',\n};\n\nexport type TRPC_ERROR_CODE_NUMBER = ValueOf<typeof TRPC_ERROR_CODES_BY_KEY>;\nexport type TRPC_ERROR_CODE_KEY = keyof typeof TRPC_ERROR_CODES_BY_KEY;\n\n/**\n * tRPC error codes that are considered retryable\n * With out of the box SSE, the client will reconnect when these errors are encountered\n */\nexport const retryableRpcCodes: TRPC_ERROR_CODE_NUMBER[] = [\n TRPC_ERROR_CODES_BY_KEY.BAD_GATEWAY,\n TRPC_ERROR_CODES_BY_KEY.SERVICE_UNAVAILABLE,\n TRPC_ERROR_CODES_BY_KEY.GATEWAY_TIMEOUT,\n TRPC_ERROR_CODES_BY_KEY.INTERNAL_SERVER_ERROR,\n];\n"],"mappings":";;;;;AASA,SAAgB,sBACdA,MACA,GAAG,MACI;CACP,MAAMC,SAAgB,OAAO,OAAO,aAAa,EAAE,KAAK;AAExD,MAAK,MAAM,aAAa,KACtB,MAAK,MAAM,OAAO,WAAW;AAC3B,MAAI,OAAO,UAAU,OAAO,SAAS,UAAU,KAC7C,OAAM,IAAI,OAAO,gBAAgB,IAAI;AAEvC,SAAO,OAAsB,UAAU;CACxC;AAEH,QAAO;AACR;;;;;AAMD,SAAgB,SAASC,OAAkD;AACzE,UAAS,UAAU,MAAM,QAAQ,MAAM,WAAW,UAAU;AAC7D;AAGD,SAAgB,WAAWC,IAA0B;AACnD,eAAc,OAAO;AACtB;;;;;AAMD,SAAgB,cAA0D;AACxE,QAAO,OAAO,OAAO,KAAK;AAC3B;AAED,MAAM,iCACG,WAAW,gBAAgB,OAAO;AAE3C,SAAgB,gBACdD,OACgC;AAChC,QACE,2BAA2B,SAAS,MAAM,IAAI,OAAO,iBAAiB;AAEzE;;;;AAKD,MAAa,MAAM,CAASE,OAA6B,IAAI;AAG7D,SAAgB,OAAa,CAAE;AAE/B,SAAgB,SAAYC,IAAU;AACpC,QAAO;AACR;;;;;;;AAQD,SAAgB,OACdC,WACA,MAAM,sBACa;AACnB,MAAK,UACH,OAAM,IAAI,OAAO,kBAAkB,IAAI;AAE1C;AAED,SAAgB,MAAM,KAAK,GAAkB;AAC3C,QAAO,IAAI,QAAc,CAAC,QAAQ,WAAW,KAAK,GAAG;AACtD;;;;;AAMD,SAAgB,wBAAwBC,SAAqC;AAC3E,YAAW,YAAY,QAAQ,WAC7B,QAAO,YAAY,IAAI,QAAQ;CAGjC,MAAM,KAAK,IAAI;AAEf,MAAK,MAAM,UAAU,SAAS;AAC5B,MAAI,OAAO,SAAS;AAClB,YAAS;AACT;EACD;AACD,SAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAM,EAAC;CAC1D;AAED,QAAO,GAAG;CAEV,SAAS,UAAU;AACjB,KAAG,OAAO;AACV,OAAK,MAAM,UAAU,QACnB,QAAO,oBAAoB,SAAS,QAAQ;CAE/C;AACF;;;;;;;;;;AC1GD,MAAa,0BAA0B;CAKrC,aAAa;CAIb,aAAa;CAGb,uBAAuB;CACvB,iBAAiB;CACjB,aAAa;CACb,qBAAqB;CACrB,iBAAiB;CAGjB,cAAc;CACd,kBAAkB;CAClB,WAAW;CACX,WAAW;CACX,sBAAsB;CACtB,SAAS;CACT,UAAU;CACV,qBAAqB;CACrB,mBAAmB;CACnB,wBAAwB;CACxB,uBAAuB;CACvB,uBAAuB;CACvB,mBAAmB;CACnB,uBAAuB;AACxB;AAGD,MAAaC,6BAET;EACD,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;AACX;;;;;AASD,MAAaC,oBAA8C;CACzD,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;AACzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"contentTypeParsers-SN4WL9ze.mjs","names":["octetInputParser: UtilityParser<OctetInput, ReadableStream>"],"sources":["../src/unstable-core-do-not-import/http/contentTypeParsers.ts"],"sourcesContent":["import type { ParserZodEsque } from '../parser';\n\n/**\n * @internal\n */\nexport type UtilityParser<TInput, TOutput> = ParserZodEsque<TInput, TOutput> & {\n parse: (input: unknown) => TOutput;\n};\n\n// Should be the same possible types as packages/client/src/links/internals/contentTypes.ts isOctetType\n\n/**\n * @internal\n *\n * File is only available from Node19+ but it always extends Blob so we can use that as a type until we eventually drop Node18\n */\nexport interface FileLike extends Blob {\n readonly name: string;\n}\n\n/**\n * @internal\n */\nexport type OctetInput = Blob | Uint8Array | FileLike;\n\nexport const octetInputParser: UtilityParser<OctetInput, ReadableStream> = {\n _input: null as any as OctetInput,\n _output: null as any as ReadableStream,\n parse(input) {\n if (input instanceof ReadableStream) {\n return input;\n }\n\n throw new Error(\n `Parsed input was expected to be a ReadableStream but was: ${typeof input}`,\n );\n },\n};\n"],"mappings":";AAyBA,MAAaA,mBAA8D;CACzE,QAAQ;CACR,SAAS;CACT,MAAM,OAAO;AACX,MAAI,iBAAiB,eACnB,QAAO;AAGT,QAAM,IAAI,OACP,mEAAmE,MAAM;CAE7E;AACF"}