@trpc/client 11.0.0-next.91 → 11.0.0-rc.329

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 (159) hide show
  1. package/README.md +4 -4
  2. package/dist/TRPCClientError.d.ts +8 -7
  3. package/dist/TRPCClientError.d.ts.map +1 -1
  4. package/dist/{TRPCClientError-e224e397.js → TRPCClientError.js} +3 -3
  5. package/dist/{TRPCClientError-0de4d231.mjs → TRPCClientError.mjs} +4 -4
  6. package/dist/bundle-analysis.json +126 -155
  7. package/dist/createTRPCClient.d.ts +27 -19
  8. package/dist/createTRPCClient.d.ts.map +1 -1
  9. package/dist/createTRPCClient.js +50 -0
  10. package/dist/createTRPCClient.mjs +45 -0
  11. package/dist/createTRPCUntypedClient.d.ts +3 -2
  12. package/dist/createTRPCUntypedClient.d.ts.map +1 -1
  13. package/dist/createTRPCUntypedClient.js +10 -0
  14. package/dist/createTRPCUntypedClient.mjs +7 -0
  15. package/dist/getFetch.d.ts +1 -1
  16. package/dist/getFetch.d.ts.map +1 -1
  17. package/dist/getFetch.js +17 -0
  18. package/dist/getFetch.mjs +15 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +32 -370
  21. package/dist/index.mjs +9 -354
  22. package/dist/internals/TRPCUntypedClient.d.ts +5 -30
  23. package/dist/internals/TRPCUntypedClient.d.ts.map +1 -1
  24. package/dist/internals/TRPCUntypedClient.js +85 -0
  25. package/dist/internals/TRPCUntypedClient.mjs +83 -0
  26. package/dist/internals/dataLoader.d.ts +1 -1
  27. package/dist/internals/dataLoader.d.ts.map +1 -1
  28. package/dist/{httpBatchLink-204206a5.mjs → internals/dataLoader.js} +2 -117
  29. package/dist/internals/dataLoader.mjs +131 -0
  30. package/dist/internals/getAbortController.d.ts +2 -2
  31. package/dist/internals/getAbortController.d.ts.map +1 -1
  32. package/dist/internals/getAbortController.js +18 -0
  33. package/dist/internals/getAbortController.mjs +16 -0
  34. package/dist/internals/transformer.d.ts +42 -0
  35. package/dist/internals/transformer.d.ts.map +1 -0
  36. package/dist/internals/transformer.js +30 -0
  37. package/dist/internals/transformer.mjs +28 -0
  38. package/dist/internals/types.d.ts +4 -2
  39. package/dist/internals/types.d.ts.map +1 -1
  40. package/dist/links/HTTPBatchLinkOptions.d.ts +6 -5
  41. package/dist/links/HTTPBatchLinkOptions.d.ts.map +1 -1
  42. package/dist/links/httpBatchLink.d.ts +2 -2
  43. package/dist/links/httpBatchLink.d.ts.map +1 -1
  44. package/dist/links/httpBatchLink.js +37 -9
  45. package/dist/links/httpBatchLink.mjs +39 -5
  46. package/dist/links/httpBatchStreamLink.d.ts +6 -5
  47. package/dist/links/httpBatchStreamLink.d.ts.map +1 -1
  48. package/dist/links/httpBatchStreamLink.js +43 -0
  49. package/dist/links/httpBatchStreamLink.mjs +41 -0
  50. package/dist/links/httpFormDataLink.d.ts +1 -1
  51. package/dist/links/httpFormDataLink.d.ts.map +1 -1
  52. package/dist/links/httpFormDataLink.js +31 -0
  53. package/dist/links/httpFormDataLink.mjs +29 -0
  54. package/dist/links/httpLink.d.ts +8 -8
  55. package/dist/links/httpLink.d.ts.map +1 -1
  56. package/dist/links/httpLink.js +6 -9
  57. package/dist/links/httpLink.mjs +6 -7
  58. package/dist/links/internals/createChain.d.ts +2 -2
  59. package/dist/links/internals/createChain.d.ts.map +1 -1
  60. package/dist/{splitLink-f29e84be.js → links/internals/createChain.js} +0 -22
  61. package/dist/{splitLink-4c75f7be.mjs → links/internals/createChain.mjs} +1 -22
  62. package/dist/links/internals/createHTTPBatchLink.d.ts +6 -6
  63. package/dist/links/internals/createHTTPBatchLink.d.ts.map +1 -1
  64. package/dist/links/internals/createHTTPBatchLink.js +85 -0
  65. package/dist/links/internals/createHTTPBatchLink.mjs +83 -0
  66. package/dist/links/internals/dedupeLink.d.ts +2 -2
  67. package/dist/links/internals/dedupeLink.d.ts.map +1 -1
  68. package/dist/links/internals/getTextDecoder.d.ts +1 -1
  69. package/dist/links/internals/getTextDecoder.d.ts.map +1 -1
  70. package/dist/links/internals/getTextDecoder.js +18 -0
  71. package/dist/links/internals/getTextDecoder.mjs +16 -0
  72. package/dist/links/internals/httpUtils.d.ts +19 -11
  73. package/dist/links/internals/httpUtils.d.ts.map +1 -1
  74. package/dist/{httpUtils-c0e7bf5a.js → links/internals/httpUtils.js} +20 -39
  75. package/dist/{httpUtils-f58ceda1.mjs → links/internals/httpUtils.mjs} +20 -38
  76. package/dist/links/internals/parseJSONStream.d.ts +5 -6
  77. package/dist/links/internals/parseJSONStream.d.ts.map +1 -1
  78. package/dist/links/internals/parseJSONStream.js +118 -0
  79. package/dist/links/internals/parseJSONStream.mjs +115 -0
  80. package/dist/links/internals/retryLink.d.ts +2 -2
  81. package/dist/links/internals/retryLink.d.ts.map +1 -1
  82. package/dist/links/loggerLink.d.ts +4 -4
  83. package/dist/links/loggerLink.d.ts.map +1 -1
  84. package/dist/links/loggerLink.js +6 -4
  85. package/dist/links/loggerLink.mjs +6 -2
  86. package/dist/links/splitLink.d.ts +2 -2
  87. package/dist/links/splitLink.d.ts.map +1 -1
  88. package/dist/links/splitLink.js +23 -6
  89. package/dist/links/splitLink.mjs +25 -2
  90. package/dist/links/types.d.ts +15 -14
  91. package/dist/links/types.d.ts.map +1 -1
  92. package/dist/links/wsLink.d.ts +44 -13
  93. package/dist/links/wsLink.d.ts.map +1 -1
  94. package/dist/links/wsLink.js +64 -24
  95. package/dist/links/wsLink.mjs +64 -22
  96. package/dist/links.d.ts +10 -0
  97. package/dist/links.d.ts.map +1 -0
  98. package/dist/unstable-internals.d.ts +2 -0
  99. package/dist/unstable-internals.d.ts.map +1 -0
  100. package/dist/unstable-internals.js +7 -0
  101. package/dist/unstable-internals.mjs +1 -0
  102. package/package.json +26 -28
  103. package/src/TRPCClientError.ts +24 -13
  104. package/src/createTRPCClient.ts +58 -51
  105. package/src/createTRPCUntypedClient.ts +3 -5
  106. package/src/getFetch.ts +1 -1
  107. package/src/index.ts +2 -0
  108. package/src/internals/TRPCUntypedClient.ts +14 -84
  109. package/src/internals/dataLoader.ts +1 -1
  110. package/src/internals/getAbortController.ts +2 -2
  111. package/src/internals/transformer.ts +76 -0
  112. package/src/internals/types.ts +8 -1
  113. package/src/links/HTTPBatchLinkOptions.ts +17 -15
  114. package/src/links/httpBatchLink.ts +9 -8
  115. package/src/links/httpBatchStreamLink.ts +17 -17
  116. package/src/links/httpFormDataLink.ts +11 -12
  117. package/src/links/httpLink.ts +27 -19
  118. package/src/links/internals/createChain.ts +6 -2
  119. package/src/links/internals/createHTTPBatchLink.ts +24 -16
  120. package/src/links/internals/dedupeLink.ts +4 -3
  121. package/src/links/internals/getTextDecoder.ts +1 -1
  122. package/src/links/internals/httpUtils.ts +42 -21
  123. package/src/links/internals/parseJSONStream.ts +12 -14
  124. package/src/links/internals/retryLink.ts +4 -3
  125. package/src/links/loggerLink.ts +5 -5
  126. package/src/links/splitLink.ts +2 -2
  127. package/src/links/types.ts +27 -22
  128. package/src/links/wsLink.ts +124 -36
  129. package/src/links.ts +14 -0
  130. package/src/unstable-internals.ts +1 -0
  131. package/unstable-internals/index.d.ts +1 -0
  132. package/unstable-internals/index.js +1 -0
  133. package/dist/TRPCClientError-23c8aa93.js +0 -61
  134. package/dist/httpBatchLink-64fceaac.js +0 -251
  135. package/dist/httpBatchLink-92dab48e.js +0 -247
  136. package/dist/httpUtils-35e50476.js +0 -145
  137. package/dist/internals/isObject.d.ts +0 -2
  138. package/dist/internals/isObject.d.ts.map +0 -1
  139. package/dist/internals/retryDelay.d.ts +0 -2
  140. package/dist/internals/retryDelay.d.ts.map +0 -1
  141. package/dist/links/index.d.ts +0 -10
  142. package/dist/links/index.d.ts.map +0 -1
  143. package/dist/shared/index.d.ts +0 -2
  144. package/dist/shared/index.d.ts.map +0 -1
  145. package/dist/shared/index.js +0 -9
  146. package/dist/shared/index.mjs +0 -1
  147. package/dist/shared/transformResult.d.ts +0 -34
  148. package/dist/shared/transformResult.d.ts.map +0 -1
  149. package/dist/splitLink-0df96fdc.js +0 -41
  150. package/dist/transformResult-ace864b8.mjs +0 -58
  151. package/dist/transformResult-c1422cb5.js +0 -60
  152. package/dist/transformResult-dfce8f15.js +0 -61
  153. package/shared/index.d.ts +0 -1
  154. package/shared/index.js +0 -1
  155. package/src/internals/isObject.ts +0 -4
  156. package/src/internals/retryDelay.ts +0 -3
  157. package/src/links/index.ts +0 -14
  158. package/src/shared/index.ts +0 -1
  159. package/src/shared/transformResult.ts +0 -79
@@ -1 +1 @@
1
- {"version":3,"file":"createTRPCClient.d.ts","sourceRoot":"","sources":["../src/createTRPCClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createTRPCClient.d.ts","sourceRoot":"","sources":["../src/createTRPCClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ 'use strict';
2
+
3
+ var unstableCoreDoNotImport = require('@trpc/server/unstable-core-do-not-import');
4
+ var TRPCUntypedClient = require('./internals/TRPCUntypedClient.js');
5
+
6
+ const clientCallTypeMap = {
7
+ query: 'query',
8
+ mutate: 'mutation',
9
+ subscribe: 'subscription'
10
+ };
11
+ /** @internal */ const clientCallTypeToProcedureType = (clientCallType)=>{
12
+ return clientCallTypeMap[clientCallType];
13
+ };
14
+ /**
15
+ * @internal
16
+ */ function createTRPCClientProxy(client) {
17
+ return unstableCoreDoNotImport.createFlatProxy((key)=>{
18
+ if (client.hasOwnProperty(key)) {
19
+ return client[key];
20
+ }
21
+ if (key === '__untypedClient') {
22
+ return client;
23
+ }
24
+ return unstableCoreDoNotImport.createRecursiveProxy(({ path , args })=>{
25
+ const pathCopy = [
26
+ key,
27
+ ...path
28
+ ];
29
+ const procedureType = clientCallTypeToProcedureType(pathCopy.pop());
30
+ const fullPath = pathCopy.join('.');
31
+ return client[procedureType](fullPath, ...args);
32
+ });
33
+ });
34
+ }
35
+ function createTRPCClient(opts) {
36
+ const client = new TRPCUntypedClient.TRPCUntypedClient(opts);
37
+ const proxy = createTRPCClientProxy(client);
38
+ return proxy;
39
+ }
40
+ /**
41
+ * Get an untyped client from a proxy client
42
+ * @internal
43
+ */ function getUntypedClient(client) {
44
+ return client.__untypedClient;
45
+ }
46
+
47
+ exports.clientCallTypeToProcedureType = clientCallTypeToProcedureType;
48
+ exports.createTRPCClient = createTRPCClient;
49
+ exports.createTRPCClientProxy = createTRPCClientProxy;
50
+ exports.getUntypedClient = getUntypedClient;
@@ -0,0 +1,45 @@
1
+ import { createFlatProxy, createRecursiveProxy } from '@trpc/server/unstable-core-do-not-import';
2
+ import { TRPCUntypedClient } from './internals/TRPCUntypedClient.mjs';
3
+
4
+ const clientCallTypeMap = {
5
+ query: 'query',
6
+ mutate: 'mutation',
7
+ subscribe: 'subscription'
8
+ };
9
+ /** @internal */ const clientCallTypeToProcedureType = (clientCallType)=>{
10
+ return clientCallTypeMap[clientCallType];
11
+ };
12
+ /**
13
+ * @internal
14
+ */ function createTRPCClientProxy(client) {
15
+ return createFlatProxy((key)=>{
16
+ if (client.hasOwnProperty(key)) {
17
+ return client[key];
18
+ }
19
+ if (key === '__untypedClient') {
20
+ return client;
21
+ }
22
+ return createRecursiveProxy(({ path , args })=>{
23
+ const pathCopy = [
24
+ key,
25
+ ...path
26
+ ];
27
+ const procedureType = clientCallTypeToProcedureType(pathCopy.pop());
28
+ const fullPath = pathCopy.join('.');
29
+ return client[procedureType](fullPath, ...args);
30
+ });
31
+ });
32
+ }
33
+ function createTRPCClient(opts) {
34
+ const client = new TRPCUntypedClient(opts);
35
+ const proxy = createTRPCClientProxy(client);
36
+ return proxy;
37
+ }
38
+ /**
39
+ * Get an untyped client from a proxy client
40
+ * @internal
41
+ */ function getUntypedClient(client) {
42
+ return client.__untypedClient;
43
+ }
44
+
45
+ export { clientCallTypeToProcedureType, createTRPCClient, createTRPCClientProxy, getUntypedClient };
@@ -1,5 +1,6 @@
1
- import { AnyRouter } from '@trpc/server';
2
- import { CreateTRPCClientOptions, TRPCUntypedClient } from './internals/TRPCUntypedClient';
1
+ import type { AnyRouter } from '@trpc/server/unstable-core-do-not-import';
2
+ import type { CreateTRPCClientOptions } from './internals/TRPCUntypedClient';
3
+ import { TRPCUntypedClient } from './internals/TRPCUntypedClient';
3
4
  export declare function createTRPCUntypedClient<TRouter extends AnyRouter>(opts: CreateTRPCClientOptions<TRouter>): TRPCUntypedClient<TRouter>;
4
5
  export type { CreateTRPCClientOptions, TRPCRequestOptions, } from './internals/TRPCUntypedClient';
5
6
  export { TRPCUntypedClient } from './internals/TRPCUntypedClient';
@@ -1 +1 @@
1
- {"version":3,"file":"createTRPCUntypedClient.d.ts","sourceRoot":"","sources":["../src/createTRPCUntypedClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,SAAS,EAC/D,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACrC,iBAAiB,CAAC,OAAO,CAAC,CAE5B;AAED,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"createTRPCUntypedClient.d.ts","sourceRoot":"","sources":["../src/createTRPCUntypedClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,SAAS,EAC/D,IAAI,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACrC,iBAAiB,CAAC,OAAO,CAAC,CAE5B;AAED,YAAY,EACV,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var TRPCUntypedClient = require('./internals/TRPCUntypedClient.js');
4
+
5
+ function createTRPCUntypedClient(opts) {
6
+ return new TRPCUntypedClient.TRPCUntypedClient(opts);
7
+ }
8
+
9
+ exports.TRPCUntypedClient = TRPCUntypedClient.TRPCUntypedClient;
10
+ exports.createTRPCUntypedClient = createTRPCUntypedClient;
@@ -0,0 +1,7 @@
1
+ import { TRPCUntypedClient } from './internals/TRPCUntypedClient.mjs';
2
+
3
+ function createTRPCUntypedClient(opts) {
4
+ return new TRPCUntypedClient(opts);
5
+ }
6
+
7
+ export { TRPCUntypedClient, createTRPCUntypedClient };
@@ -1,3 +1,3 @@
1
- import { FetchEsque, NativeFetchEsque } from './internals/types';
1
+ import type { FetchEsque, NativeFetchEsque } from './internals/types';
2
2
  export declare function getFetch(customFetchImpl?: FetchEsque | NativeFetchEsque): FetchEsque;
3
3
  //# sourceMappingURL=getFetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getFetch.d.ts","sourceRoot":"","sources":["../src/getFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMjE,wBAAgB,QAAQ,CACtB,eAAe,CAAC,EAAE,UAAU,GAAG,gBAAgB,GAC9C,UAAU,CAcZ"}
1
+ {"version":3,"file":"getFetch.d.ts","sourceRoot":"","sources":["../src/getFetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMtE,wBAAgB,QAAQ,CACtB,eAAe,CAAC,EAAE,UAAU,GAAG,gBAAgB,GAC9C,UAAU,CAcZ"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const isFunction = (fn)=>typeof fn === 'function';
4
+ function getFetch(customFetchImpl) {
5
+ if (customFetchImpl) {
6
+ return customFetchImpl;
7
+ }
8
+ if (typeof window !== 'undefined' && isFunction(window.fetch)) {
9
+ return window.fetch;
10
+ }
11
+ if (typeof globalThis !== 'undefined' && isFunction(globalThis.fetch)) {
12
+ return globalThis.fetch;
13
+ }
14
+ throw new Error('No fetch implementation found');
15
+ }
16
+
17
+ exports.getFetch = getFetch;
@@ -0,0 +1,15 @@
1
+ const isFunction = (fn)=>typeof fn === 'function';
2
+ function getFetch(customFetchImpl) {
3
+ if (customFetchImpl) {
4
+ return customFetchImpl;
5
+ }
6
+ if (typeof window !== 'undefined' && isFunction(window.fetch)) {
7
+ return window.fetch;
8
+ }
9
+ if (typeof globalThis !== 'undefined' && isFunction(globalThis.fetch)) {
10
+ return globalThis.fetch;
11
+ }
12
+ throw new Error('No fetch implementation found');
13
+ }
14
+
15
+ export { getFetch };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AAExB,OAAO;AACL;;GAEG;AACH,gBAAgB,IAAI,qBAAqB;AACzC;;GAEG;AACH,KAAK,gBAAgB,IAAI,qBAAqB;AAC9C;;GAEG;AACH,KAAK,iBAAiB,IAAI,sBAAsB,GACjD,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AAExB,OAAO;AACL;;GAEG;AACH,gBAAgB,IAAI,qBAAqB;AACzC;;GAEG;AACH,KAAK,gBAAgB,IAAI,qBAAqB;AAC9C;;GAEG;AACH,KAAK,iBAAiB,IAAI,sBAAsB,GACjD,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,373 +1,35 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var observable = require('@trpc/server/observable');
6
- var links_splitLink = require('./splitLink-f29e84be.js');
7
- var TRPCClientError = require('./TRPCClientError-e224e397.js');
8
- var shared = require('@trpc/server/shared');
9
- var httpUtils = require('./httpUtils-c0e7bf5a.js');
10
- var links_httpBatchLink = require('./httpBatchLink-64fceaac.js');
11
- var links_httpLink = require('./links/httpLink.js');
12
- var links_loggerLink = require('./links/loggerLink.js');
13
- var links_wsLink = require('./links/wsLink.js');
14
- require('./transformResult-dfce8f15.js');
15
-
16
- class TRPCUntypedClient {
17
- $request({ type , input , path , context ={} }) {
18
- const chain$ = links_splitLink.createChain({
19
- links: this.links,
20
- op: {
21
- id: ++this.requestId,
22
- type,
23
- path,
24
- input,
25
- context
26
- }
27
- });
28
- return chain$.pipe(observable.share());
29
- }
30
- requestAsPromise(opts) {
31
- const req$ = this.$request(opts);
32
- const { promise , abort } = observable.observableToPromise(req$);
33
- const abortablePromise = new Promise((resolve, reject)=>{
34
- opts.signal?.addEventListener('abort', abort);
35
- promise.then((envelope)=>{
36
- resolve(envelope.result.data);
37
- }).catch((err)=>{
38
- reject(TRPCClientError.TRPCClientError.from(err));
39
- });
40
- });
41
- return abortablePromise;
42
- }
43
- query(path, input, opts) {
44
- return this.requestAsPromise({
45
- type: 'query',
46
- path,
47
- input,
48
- context: opts?.context,
49
- signal: opts?.signal
50
- });
51
- }
52
- mutation(path, input, opts) {
53
- return this.requestAsPromise({
54
- type: 'mutation',
55
- path,
56
- input,
57
- context: opts?.context,
58
- signal: opts?.signal
59
- });
60
- }
61
- subscription(path, input, opts) {
62
- const observable$ = this.$request({
63
- type: 'subscription',
64
- path,
65
- input,
66
- context: opts?.context
67
- });
68
- return observable$.subscribe({
69
- next (envelope) {
70
- if (envelope.result.type === 'started') {
71
- opts.onStarted?.();
72
- } else if (envelope.result.type === 'stopped') {
73
- opts.onStopped?.();
74
- } else {
75
- opts.onData?.(envelope.result.data);
76
- }
77
- },
78
- error (err) {
79
- opts.onError?.(err);
80
- },
81
- complete () {
82
- opts.onComplete?.();
83
- }
84
- });
85
- }
86
- constructor(opts){
87
- this.requestId = 0;
88
- const combinedTransformer = (()=>{
89
- const transformer = opts.transformer;
90
- if (!transformer) {
91
- return {
92
- input: {
93
- serialize: (data)=>data,
94
- deserialize: (data)=>data
95
- },
96
- output: {
97
- serialize: (data)=>data,
98
- deserialize: (data)=>data
99
- }
100
- };
101
- }
102
- if ('input' in transformer) {
103
- return opts.transformer;
104
- }
105
- return {
106
- input: transformer,
107
- output: transformer
108
- };
109
- })();
110
- this.runtime = {
111
- transformer: {
112
- serialize: (data)=>combinedTransformer.input.serialize(data),
113
- deserialize: (data)=>combinedTransformer.output.deserialize(data)
114
- },
115
- combinedTransformer
116
- };
117
- // Initialize the links
118
- this.links = opts.links.map((link)=>link(this.runtime));
119
- }
120
- }
121
-
122
- function createTRPCUntypedClient(opts) {
123
- return new TRPCUntypedClient(opts);
124
- }
125
-
126
- const clientCallTypeMap = {
127
- query: 'query',
128
- mutate: 'mutation',
129
- subscribe: 'subscription'
130
- };
131
- /** @internal */ const clientCallTypeToProcedureType = (clientCallType)=>{
132
- return clientCallTypeMap[clientCallType];
133
- };
134
- /**
135
- * @internal
136
- */ function createTRPCClientProxy(client) {
137
- return shared.createFlatProxy((key)=>{
138
- if (client.hasOwnProperty(key)) {
139
- return client[key];
140
- }
141
- if (key === '__untypedClient') {
142
- return client;
143
- }
144
- return shared.createRecursiveProxy(({ path , args })=>{
145
- const pathCopy = [
146
- key,
147
- ...path
148
- ];
149
- const procedureType = clientCallTypeToProcedureType(pathCopy.pop());
150
- const fullPath = pathCopy.join('.');
151
- return client[procedureType](fullPath, ...args);
152
- });
153
- });
154
- }
155
- function createTRPCClient(opts) {
156
- const client = new TRPCUntypedClient(opts);
157
- const proxy = createTRPCClientProxy(client);
158
- return proxy;
159
- }
160
- /**
161
- * Get an untyped client from a proxy client
162
- * @internal
163
- */ function getUntypedClient(client) {
164
- return client.__untypedClient;
165
- }
166
-
167
- function getTextDecoder(customTextDecoder) {
168
- if (customTextDecoder) {
169
- return customTextDecoder;
170
- }
171
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
172
- if (typeof window !== 'undefined' && window.TextDecoder) {
173
- return new window.TextDecoder();
174
- }
175
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
176
- if (typeof globalThis !== 'undefined' && globalThis.TextDecoder) {
177
- return new globalThis.TextDecoder();
178
- }
179
- throw new Error('No TextDecoder implementation found');
180
- }
181
-
182
- // Stream parsing adapted from https://www.loginradius.com/blog/engineering/guest-post/http-streaming-with-nodejs-and-fetch-api/
183
- /**
184
- * @internal
185
- * @description Take a stream of bytes and call `onLine` with
186
- * a JSON object for each line in the stream. Expected stream
187
- * format is:
188
- * ```json
189
- * {"1": {...}
190
- * ,"0": {...}
191
- * }
192
- * ```
193
- */ async function parseJSONStream(opts) {
194
- const parse = opts.parse ?? JSON.parse;
195
- const onLine = (line)=>{
196
- if (opts.signal?.aborted) return;
197
- if (!line || line === '}') {
198
- return;
199
- }
200
- /**
201
- * At this point, `line` can be one of two things:
202
- * - The first line of the stream `{"2":{...}`
203
- * - A line in the middle of the stream `,"2":{...}`
204
- */ const indexOfColon = line.indexOf(':');
205
- const indexAsStr = line.substring(2, indexOfColon - 1);
206
- const text = line.substring(indexOfColon + 1);
207
- opts.onSingle(Number(indexAsStr), parse(text));
208
- };
209
- await readLines(opts.readableStream, onLine, opts.textDecoder);
210
- }
211
- /**
212
- * Handle transforming a stream of bytes into lines of text.
213
- * To avoid using AsyncIterators / AsyncGenerators,
214
- * we use a callback for each line.
215
- *
216
- * @param readableStream can be a NodeJS stream or a WebAPI stream
217
- * @param onLine will be called for every line ('\n' delimited) in the stream
218
- */ async function readLines(readableStream, onLine, textDecoder) {
219
- let partOfLine = '';
220
- const onChunk = (chunk)=>{
221
- const chunkText = textDecoder.decode(chunk);
222
- const chunkLines = chunkText.split('\n');
223
- if (chunkLines.length === 1) {
224
- partOfLine += chunkLines[0];
225
- } else if (chunkLines.length > 1) {
226
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- length checked on line above
227
- onLine(partOfLine + chunkLines[0]);
228
- for(let i = 1; i < chunkLines.length - 1; i++){
229
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- length checked on line above
230
- onLine(chunkLines[i]);
231
- }
232
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- length doesn't change, so is necessarily > 1
233
- partOfLine = chunkLines[chunkLines.length - 1];
234
- }
235
- };
236
- // we handle 2 different types of streams, this if where we figure out which one we have
237
- if ('getReader' in readableStream) {
238
- await readStandardChunks(readableStream, onChunk);
239
- } else {
240
- await readNodeChunks(readableStream, onChunk);
241
- }
242
- onLine(partOfLine);
243
- }
244
- /**
245
- * Handle NodeJS stream
246
- */ function readNodeChunks(stream, onChunk) {
247
- return new Promise((resolve)=>{
248
- stream.on('data', onChunk);
249
- stream.on('end', resolve);
250
- });
251
- }
252
- /**
253
- * Handle WebAPI stream
254
- */ async function readStandardChunks(stream, onChunk) {
255
- const reader = stream.getReader();
256
- let readResult = await reader.read();
257
- while(!readResult.done){
258
- onChunk(readResult.value);
259
- readResult = await reader.read();
260
- }
261
- }
262
- const streamingJsonHttpRequester = (opts, onSingle)=>{
263
- const ac = opts.AbortController ? new opts.AbortController() : null;
264
- const responsePromise = httpUtils.fetchHTTPResponse({
265
- ...opts,
266
- contentTypeHeader: 'application/json',
267
- batchModeHeader: 'stream',
268
- getUrl: httpUtils.getUrl,
269
- getBody: httpUtils.getBody
270
- }, ac);
271
- const cancel = ()=>ac?.abort();
272
- const promise = responsePromise.then(async (res)=>{
273
- if (!res.body) throw new Error('Received response without body');
274
- const meta = {
275
- response: res
276
- };
277
- return parseJSONStream({
278
- readableStream: res.body,
279
- onSingle,
280
- parse: (string)=>({
281
- json: JSON.parse(string),
282
- meta
283
- }),
284
- signal: ac?.signal,
285
- textDecoder: opts.textDecoder
286
- });
287
- });
288
- return {
289
- cancel,
290
- promise
291
- };
292
- };
293
-
294
- const streamRequester = (requesterOpts)=>{
295
- const textDecoder = getTextDecoder(requesterOpts.opts.textDecoder);
296
- return (batchOps, unitResolver)=>{
297
- const path = batchOps.map((op)=>op.path).join(',');
298
- const inputs = batchOps.map((op)=>op.input);
299
- const { cancel , promise } = streamingJsonHttpRequester({
300
- ...requesterOpts,
301
- textDecoder,
302
- path,
303
- inputs,
304
- headers () {
305
- if (!requesterOpts.opts.headers) {
306
- return {};
307
- }
308
- if (typeof requesterOpts.opts.headers === 'function') {
309
- return requesterOpts.opts.headers({
310
- opList: batchOps
311
- });
312
- }
313
- return requesterOpts.opts.headers;
314
- }
315
- }, (index, res)=>{
316
- unitResolver(index, res);
317
- });
318
- return {
319
- /**
320
- * return an empty array because the batchLoader expects an array of results
321
- * but we've already called the `unitResolver` for each of them, there's
322
- * nothing left to do here.
323
- */ promise: promise.then(()=>[]),
324
- cancel
325
- };
326
- };
327
- };
328
- const unstable_httpBatchStreamLink = links_httpBatchLink.createHTTPBatchLink(streamRequester);
329
-
330
- const getBody = (opts)=>{
331
- if (!('input' in opts)) {
332
- return undefined;
333
- }
334
- if (!(opts.input instanceof FormData)) {
335
- throw new Error('Input is not FormData');
336
- }
337
- return opts.input;
338
- };
339
- const formDataRequester = (opts)=>{
340
- if (opts.type !== 'mutation') {
341
- // TODO(?) handle formdata queries
342
- throw new Error('We only handle mutations with formdata');
343
- }
344
- return httpUtils.httpRequest({
345
- ...opts,
346
- getUrl () {
347
- return `${opts.url}/${opts.path}`;
348
- },
349
- getBody
350
- });
351
- };
352
- const experimental_formDataLink = links_httpLink.httpLinkFactory({
353
- requester: formDataRequester
354
- });
355
-
356
- exports.splitLink = links_splitLink.splitLink;
3
+ var createTRPCUntypedClient = require('./createTRPCUntypedClient.js');
4
+ var createTRPCClient = require('./createTRPCClient.js');
5
+ var getFetch = require('./getFetch.js');
6
+ var TRPCClientError = require('./TRPCClientError.js');
7
+ var httpBatchLink = require('./links/httpBatchLink.js');
8
+ var httpBatchStreamLink = require('./links/httpBatchStreamLink.js');
9
+ var httpLink = require('./links/httpLink.js');
10
+ var loggerLink = require('./links/loggerLink.js');
11
+ var splitLink = require('./links/splitLink.js');
12
+ var wsLink = require('./links/wsLink.js');
13
+ var httpFormDataLink = require('./links/httpFormDataLink.js');
14
+ var TRPCUntypedClient = require('./internals/TRPCUntypedClient.js');
15
+
16
+
17
+
18
+ exports.createTRPCUntypedClient = createTRPCUntypedClient.createTRPCUntypedClient;
19
+ exports.clientCallTypeToProcedureType = createTRPCClient.clientCallTypeToProcedureType;
20
+ exports.createTRPCClient = createTRPCClient.createTRPCClient;
21
+ exports.createTRPCClientProxy = createTRPCClient.createTRPCClientProxy;
22
+ exports.createTRPCProxyClient = createTRPCClient.createTRPCClient;
23
+ exports.getUntypedClient = createTRPCClient.getUntypedClient;
24
+ exports.getFetch = getFetch.getFetch;
357
25
  exports.TRPCClientError = TRPCClientError.TRPCClientError;
358
- exports.getFetch = httpUtils.getFetch;
359
- exports.httpBatchLink = links_httpBatchLink.httpBatchLink;
360
- exports.httpLink = links_httpLink.httpLink;
361
- exports.httpLinkFactory = links_httpLink.httpLinkFactory;
362
- exports.loggerLink = links_loggerLink.loggerLink;
363
- exports.createWSClient = links_wsLink.createWSClient;
364
- exports.wsLink = links_wsLink.wsLink;
365
- exports.TRPCUntypedClient = TRPCUntypedClient;
366
- exports.clientCallTypeToProcedureType = clientCallTypeToProcedureType;
367
- exports.createTRPCClient = createTRPCClient;
368
- exports.createTRPCClientProxy = createTRPCClientProxy;
369
- exports.createTRPCProxyClient = createTRPCClient;
370
- exports.createTRPCUntypedClient = createTRPCUntypedClient;
371
- exports.experimental_formDataLink = experimental_formDataLink;
372
- exports.getUntypedClient = getUntypedClient;
373
- exports.unstable_httpBatchStreamLink = unstable_httpBatchStreamLink;
26
+ exports.httpBatchLink = httpBatchLink.httpBatchLink;
27
+ exports.unstable_httpBatchStreamLink = httpBatchStreamLink.unstable_httpBatchStreamLink;
28
+ exports.httpLink = httpLink.httpLink;
29
+ exports.httpLinkFactory = httpLink.httpLinkFactory;
30
+ exports.loggerLink = loggerLink.loggerLink;
31
+ exports.splitLink = splitLink.splitLink;
32
+ exports.createWSClient = wsLink.createWSClient;
33
+ exports.wsLink = wsLink.wsLink;
34
+ exports.experimental_formDataLink = httpFormDataLink.experimental_formDataLink;
35
+ exports.TRPCUntypedClient = TRPCUntypedClient.TRPCUntypedClient;