@trpc/next 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 (58) hide show
  1. package/README.md +5 -5
  2. package/dist/app-dir/client.d.ts +3 -3
  3. package/dist/app-dir/client.d.ts.map +1 -1
  4. package/dist/app-dir/client.js +5 -105
  5. package/dist/app-dir/client.mjs +4 -102
  6. package/dist/app-dir/create-action-hook.d.ts +18 -6
  7. package/dist/app-dir/create-action-hook.d.ts.map +1 -1
  8. package/dist/app-dir/create-action-hook.js +108 -0
  9. package/dist/app-dir/create-action-hook.mjs +105 -0
  10. package/dist/app-dir/formDataToObject.js +34 -0
  11. package/dist/app-dir/formDataToObject.mjs +32 -0
  12. package/dist/app-dir/links/nextCache.d.ts +4 -3
  13. package/dist/app-dir/links/nextCache.d.ts.map +1 -1
  14. package/dist/app-dir/links/nextCache.js +9 -10
  15. package/dist/app-dir/links/nextCache.mjs +8 -7
  16. package/dist/app-dir/links/nextHttp.d.ts +11 -5
  17. package/dist/app-dir/links/nextHttp.d.ts.map +1 -1
  18. package/dist/app-dir/links/nextHttp.js +22 -23
  19. package/dist/app-dir/links/nextHttp.mjs +22 -21
  20. package/dist/app-dir/server.d.ts +19 -12
  21. package/dist/app-dir/server.d.ts.map +1 -1
  22. package/dist/app-dir/server.js +39 -55
  23. package/dist/app-dir/server.mjs +29 -43
  24. package/dist/app-dir/shared.d.ts +19 -13
  25. package/dist/app-dir/shared.d.ts.map +1 -1
  26. package/dist/{shared-e49b9cdc.js → app-dir/shared.js} +1 -1
  27. package/dist/{shared-f6996341.mjs → app-dir/shared.mjs} +2 -2
  28. package/dist/app-dir/types.d.ts +23 -11
  29. package/dist/app-dir/types.d.ts.map +1 -1
  30. package/dist/bundle-analysis.json +56 -44
  31. package/dist/createTRPCNext.d.ts +10 -8
  32. package/dist/createTRPCNext.d.ts.map +1 -1
  33. package/dist/createTRPCNext.js +38 -0
  34. package/dist/createTRPCNext.mjs +36 -0
  35. package/dist/index.js +4 -190
  36. package/dist/index.mjs +2 -185
  37. package/dist/ssrPrepass.d.ts +3 -0
  38. package/dist/ssrPrepass.d.ts.map +1 -0
  39. package/dist/ssrPrepass.js +139 -0
  40. package/dist/ssrPrepass.mjs +137 -0
  41. package/dist/withTRPC.d.ts +41 -13
  42. package/dist/withTRPC.d.ts.map +1 -1
  43. package/dist/withTRPC.js +86 -0
  44. package/dist/withTRPC.mjs +84 -0
  45. package/package.json +36 -25
  46. package/src/app-dir/client.ts +4 -4
  47. package/src/app-dir/create-action-hook.tsx +49 -19
  48. package/src/app-dir/links/nextCache.ts +20 -8
  49. package/src/app-dir/links/nextHttp.ts +50 -30
  50. package/src/app-dir/server.ts +86 -34
  51. package/src/app-dir/shared.ts +52 -25
  52. package/src/app-dir/types.ts +41 -29
  53. package/src/createTRPCNext.tsx +25 -16
  54. package/src/ssrPrepass.ts +185 -0
  55. package/src/withTRPC.tsx +102 -180
  56. package/ssrPrepass/index.d.ts +1 -0
  57. package/ssrPrepass/index.js +1 -0
  58. package/dist/shared-642894f4.js +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/app-dir/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,qBAAqB,EACrB,OAAO,EACR,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,OAAO,SAAS,SAAS,IAAI;KACzD,IAAI,IAAI,MAAM,MAAM,CACnB,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EACzB,iBAAiB,GAAG,SAAS,CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GACjD,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GACnD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;CAC1E,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,SAAS,SAAS,EACtD,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,+BAOnC;AAED,KAAK,gBAAgB,CAAC,OAAO,SAAS,SAAS,IAAI;IACjD,CAAC,KAAK,SAAS,OAAO,CAAC,OAAO,CAAC,EAAE,EAC/B,EAAE,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GACjD;SACA,IAAI,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC5C,CAAC;IACF,CAAC,KAAK,SAAS,OAAO,CAAC,OAAO,CAAC,EAC7B,EAAE,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,KAAK,GAC5C,OAAO,CAAC,KAAK,CAAC,CAAC;CACnB,CAAC;AACF,KAAK,2BAA2B,CAAC,OAAO,SAAS,SAAS,IAAI;IAC5D,GAAG,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAChC,CAAC;AACF,MAAM,MAAM,uBAAuB,CAAC,OAAO,SAAS,SAAS,IAC3D,qBAAqB,CACnB,2BAA2B,CAAC,OAAO,CAAC,EACpC,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;AAEJ;;GAEG;AACH,MAAM,WAAW,8BAA8B,CAAC,OAAO,SAAS,SAAS;IACvE,MAAM,EAAE,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAIjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAM5D;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;CACjB;AAGD;;GAEG;AACH,MAAM,MAAM,cAAc,CACxB,OAAO,SAAS,aAAa,EAC7B,KAAK,SAAS,YAAY,IACxB;IACF,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;CAC7C,CAAC"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/app-dir/shared.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('@trpc/server/shared');
3
+ require('@trpc/server/unstable-core-do-not-import');
4
4
 
5
5
  /**
6
6
  * @internal
@@ -1,4 +1,4 @@
1
- import '@trpc/server/shared';
1
+ import '@trpc/server/unstable-core-do-not-import';
2
2
 
3
3
  /**
4
4
  * @internal
@@ -13,4 +13,4 @@ function isFormData(value) {
13
13
  return value instanceof FormData;
14
14
  }
15
15
 
16
- export { generateCacheTag as g, isFormData as i };
16
+ export { generateCacheTag, isFormData };
@@ -1,19 +1,31 @@
1
- import { Resolver } from '@trpc/client';
2
- import { AnyMutationProcedure, AnyProcedure, AnyQueryProcedure, AnyRootConfig, AnyRouter, AnySubscriptionProcedure, ProcedureArgs, ProcedureRouterRecord } from '@trpc/server';
3
- export type DecorateProcedureServer<TConfig extends AnyRootConfig, TProcedure extends AnyProcedure> = TProcedure extends AnyQueryProcedure ? {
4
- query: Resolver<TConfig, TProcedure>;
5
- revalidate: (input?: ProcedureArgs<TProcedure['_def']>[0]) => Promise<{
1
+ import type { Resolver } from '@trpc/client';
2
+ import type { AnyProcedure, AnyRootTypes, inferProcedureInput, inferTransformedProcedureOutput, ProcedureType, RouterRecord } from '@trpc/server/unstable-core-do-not-import';
3
+ type ResolverDef = {
4
+ input: any;
5
+ output: any;
6
+ transformer: boolean;
7
+ errorShape: any;
8
+ };
9
+ export type DecorateProcedureServer<TType extends ProcedureType, TDef extends ResolverDef> = TType extends 'query' ? {
10
+ query: Resolver<TDef>;
11
+ revalidate: (input?: TDef['input']) => Promise<{
6
12
  revalidated: false;
7
13
  error: string;
8
14
  } | {
9
15
  revalidated: true;
10
16
  }>;
11
- } : TProcedure extends AnyMutationProcedure ? {
12
- mutate: Resolver<TConfig, TProcedure>;
13
- } : TProcedure extends AnySubscriptionProcedure ? {
14
- subscribe: Resolver<TConfig, TProcedure>;
17
+ } : TType extends 'mutation' ? {
18
+ mutate: Resolver<TDef>;
19
+ } : TType extends 'subscription' ? {
20
+ subscribe: Resolver<TDef>;
15
21
  } : never;
16
- export type NextAppDirDecoratedProcedureRecord<TConfig extends AnyRootConfig, TProcedures extends ProcedureRouterRecord> = {
17
- [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter ? NextAppDirDecoratedProcedureRecord<TConfig, TProcedures[TKey]['_def']['record']> : TProcedures[TKey] extends AnyProcedure ? DecorateProcedureServer<TConfig, TProcedures[TKey]> : never;
22
+ export type NextAppDirDecorateRouterRecord<TRoot extends AnyRootTypes, TRecord extends RouterRecord> = {
23
+ [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value ? $Value extends RouterRecord ? NextAppDirDecorateRouterRecord<TRoot, $Value> : $Value extends AnyProcedure ? DecorateProcedureServer<$Value['_def']['type'], {
24
+ input: inferProcedureInput<$Value>;
25
+ output: inferTransformedProcedureOutput<TRoot, $Value>;
26
+ errorShape: TRoot['errorShape'];
27
+ transformer: TRoot['transformer'];
28
+ }> : never : never;
18
29
  };
30
+ export {};
19
31
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/app-dir/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,uBAAuB,CACjC,OAAO,SAAS,aAAa,EAC7B,UAAU,SAAS,YAAY,IAC7B,UAAU,SAAS,iBAAiB,GACpC;IACE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACrC,UAAU,EAAE,CACV,KAAK,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KACzC,OAAO,CACV;QAAE,WAAW,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAC9D,CAAC;CACH,GACD,UAAU,SAAS,oBAAoB,GACvC;IACE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;CACvC,GACD,UAAU,SAAS,wBAAwB,GAC3C;IACE,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;CAC1C,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,kCAAkC,CAC5C,OAAO,SAAS,aAAa,EAC7B,WAAW,SAAS,qBAAqB,IACvC;KACD,IAAI,IAAI,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,SAAS,GAC5D,kCAAkC,CAChC,OAAO,EACP,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CACpC,GACD,WAAW,CAAC,IAAI,CAAC,SAAS,YAAY,GACtC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,GACnD,KAAK;CACV,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/app-dir/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,+BAA+B,EAC/B,aAAa,EACb,YAAY,EACb,MAAM,0CAA0C,CAAC;AAElD,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,KAAK,SAAS,aAAa,EAC3B,IAAI,SAAS,WAAW,IACtB,KAAK,SAAS,OAAO,GACrB;IACE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,UAAU,EAAE,CACV,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAClB,OAAO,CACV;QAAE,WAAW,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAC9D,CAAC;CACH,GACD,KAAK,SAAS,UAAU,GACxB;IACE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CACxB,GACD,KAAK,SAAS,cAAc,GAC5B;IACE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;CAC3B,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,8BAA8B,CACxC,KAAK,SAAS,YAAY,EAC1B,OAAO,SAAS,YAAY,IAC1B;KACD,IAAI,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,MAAM,MAAM,GACvD,MAAM,SAAS,YAAY,GACzB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,GAC7C,MAAM,SAAS,YAAY,GAC3B,uBAAuB,CACrB,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACtB;QACE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,EAAE,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;KACnC,CACF,GACD,KAAK,GACP,KAAK;CACV,CAAC"}
@@ -1,27 +1,24 @@
1
1
  {
2
- "bundleSize": 20957,
3
- "bundleOrigSize": 30577,
4
- "bundleReduction": 31.46,
2
+ "bundleSize": 23547,
3
+ "bundleOrigSize": 38462,
4
+ "bundleReduction": 38.78,
5
5
  "modules": [
6
6
  {
7
- "id": "/src/withTRPC.tsx",
8
- "size": 6882,
9
- "origSize": 8409,
7
+ "id": "/src/ssrPrepass.ts",
8
+ "size": 5062,
9
+ "origSize": 5853,
10
10
  "renderedExports": [
11
- "withTRPC"
11
+ "ssrPrepass"
12
12
  ],
13
13
  "removedExports": [],
14
- "dependents": [
15
- "/src/createTRPCNext.tsx",
16
- "/src/index.ts"
17
- ],
18
- "percent": 32.84,
19
- "reduction": 18.16
14
+ "dependents": [],
15
+ "percent": 21.5,
16
+ "reduction": 13.51
20
17
  },
21
18
  {
22
19
  "id": "/src/app-dir/server.ts",
23
- "size": 3709,
24
- "origSize": 4842,
20
+ "size": 4333,
21
+ "origSize": 6110,
25
22
  "renderedExports": [
26
23
  "experimental_createTRPCNextAppDirServer",
27
24
  "experimental_createServerActionHandler",
@@ -29,13 +26,28 @@
29
26
  ],
30
27
  "removedExports": [],
31
28
  "dependents": [],
32
- "percent": 17.7,
33
- "reduction": 23.4
29
+ "percent": 18.4,
30
+ "reduction": 29.08
31
+ },
32
+ {
33
+ "id": "/src/withTRPC.tsx",
34
+ "size": 3448,
35
+ "origSize": 6138,
36
+ "renderedExports": [
37
+ "withTRPC"
38
+ ],
39
+ "removedExports": [],
40
+ "dependents": [
41
+ "/src/index.ts",
42
+ "/src/createTRPCNext.tsx"
43
+ ],
44
+ "percent": 14.64,
45
+ "reduction": 43.83
34
46
  },
35
47
  {
36
48
  "id": "/src/app-dir/create-action-hook.tsx",
37
- "size": 3310,
38
- "origSize": 5650,
49
+ "size": 3436,
50
+ "origSize": 6779,
39
51
  "renderedExports": [
40
52
  "experimental_serverActionLink",
41
53
  "experimental_createActionHook"
@@ -44,49 +56,49 @@
44
56
  "dependents": [
45
57
  "/src/app-dir/client.ts"
46
58
  ],
47
- "percent": 15.79,
48
- "reduction": 41.42
59
+ "percent": 14.59,
60
+ "reduction": 49.31
49
61
  },
50
62
  {
51
63
  "id": "/src/app-dir/links/nextCache.ts",
52
- "size": 2479,
53
- "origSize": 2682,
64
+ "size": 2571,
65
+ "origSize": 3044,
54
66
  "renderedExports": [
55
67
  "experimental_nextCacheLink"
56
68
  ],
57
69
  "removedExports": [],
58
70
  "dependents": [],
59
- "percent": 11.83,
60
- "reduction": 7.57
71
+ "percent": 10.92,
72
+ "reduction": 15.54
61
73
  },
62
74
  {
63
75
  "id": "/src/app-dir/client.ts",
64
- "size": 1264,
65
- "origSize": 1801,
76
+ "size": 1279,
77
+ "origSize": 1894,
66
78
  "renderedExports": [
67
79
  "experimental_createTRPCNextAppDirClient"
68
80
  ],
69
81
  "removedExports": [],
70
82
  "dependents": [],
71
- "percent": 6.03,
72
- "reduction": 29.82
83
+ "percent": 5.43,
84
+ "reduction": 32.47
73
85
  },
74
86
  {
75
87
  "id": "/src/app-dir/links/nextHttp.ts",
76
- "size": 1210,
77
- "origSize": 1473,
88
+ "size": 1192,
89
+ "origSize": 1973,
78
90
  "renderedExports": [
79
91
  "experimental_nextHttpLink"
80
92
  ],
81
93
  "removedExports": [],
82
94
  "dependents": [],
83
- "percent": 5.77,
84
- "reduction": 17.85
95
+ "percent": 5.06,
96
+ "reduction": 39.58
85
97
  },
86
98
  {
87
99
  "id": "/src/createTRPCNext.tsx",
88
- "size": 950,
89
- "origSize": 2372,
100
+ "size": 1073,
101
+ "origSize": 2651,
90
102
  "renderedExports": [
91
103
  "createTRPCNext"
92
104
  ],
@@ -94,8 +106,8 @@
94
106
  "dependents": [
95
107
  "/src/index.ts"
96
108
  ],
97
- "percent": 4.53,
98
- "reduction": 59.95
109
+ "percent": 4.56,
110
+ "reduction": 59.52
99
111
  },
100
112
  {
101
113
  "id": "/src/app-dir/formDataToObject.ts",
@@ -108,13 +120,13 @@
108
120
  "dependents": [
109
121
  "/src/app-dir/server.ts"
110
122
  ],
111
- "percent": 3.9,
123
+ "percent": 3.47,
112
124
  "reduction": 0.97
113
125
  },
114
126
  {
115
127
  "id": "/src/app-dir/shared.ts",
116
128
  "size": 335,
117
- "origSize": 2460,
129
+ "origSize": 3132,
118
130
  "renderedExports": [
119
131
  "generateCacheTag",
120
132
  "isFormData"
@@ -124,12 +136,12 @@
124
136
  ],
125
137
  "dependents": [
126
138
  "/src/app-dir/server.ts",
127
- "/src/app-dir/create-action-hook.tsx",
128
139
  "/src/app-dir/links/nextCache.ts",
129
- "/src/app-dir/links/nextHttp.ts"
140
+ "/src/app-dir/links/nextHttp.ts",
141
+ "/src/app-dir/create-action-hook.tsx"
130
142
  ],
131
- "percent": 1.6,
132
- "reduction": 86.38
143
+ "percent": 1.42,
144
+ "reduction": 89.3
133
145
  },
134
146
  {
135
147
  "id": "/src/index.ts",
@@ -142,5 +154,5 @@
142
154
  "reduction": 100
143
155
  }
144
156
  ],
145
- "moduleCount": 10
157
+ "moduleCount": 11
146
158
  }
@@ -1,7 +1,8 @@
1
- import { CreateReactUtils, DecoratedProcedureRecord, TRPCUseQueries } from '@trpc/react-query/shared';
2
- import { AnyRouter, ProtectedIntersection } from '@trpc/server';
3
- import { NextPageContext } from 'next/types';
4
- import { withTRPC, WithTRPCNoSSROptions, WithTRPCSSROptions } from './withTRPC';
1
+ import type { CreateReactUtils, DecorateRouterRecord, TRPCUseQueries, TRPCUseSuspenseQueries } from '@trpc/react-query/shared';
2
+ import type { AnyRouter, ProtectedIntersection } from '@trpc/server/unstable-core-do-not-import';
3
+ import type { NextPageContext } from 'next/types';
4
+ import type { WithTRPCNoSSROptions, WithTRPCSSROptions } from './withTRPC';
5
+ import { withTRPC } from './withTRPC';
5
6
  /**
6
7
  * @internal
7
8
  */
@@ -9,19 +10,20 @@ export interface CreateTRPCNextBase<TRouter extends AnyRouter, TSSRContext exten
9
10
  /**
10
11
  * @deprecated renamed to `useUtils` and will be removed in a future tRPC version
11
12
  *
12
- * @see https://trpc.io/docs/client/react/useUtils
13
+ * @link https://trpc.io/docs/v11/client/react/useUtils
13
14
  */
14
15
  useContext(): CreateReactUtils<TRouter, TSSRContext>;
15
16
  /**
16
- * @see https://trpc.io/docs/client/react/useUtils
17
+ * @link https://trpc.io/docs/v11/client/react/useUtils
17
18
  */
18
19
  useUtils(): CreateReactUtils<TRouter, TSSRContext>;
19
20
  withTRPC: ReturnType<typeof withTRPC<TRouter, TSSRContext>>;
20
21
  useQueries: TRPCUseQueries<TRouter>;
22
+ useSuspenseQueries: TRPCUseSuspenseQueries<TRouter>;
21
23
  }
22
24
  /**
23
25
  * @internal
24
26
  */
25
- export type CreateTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext, TFlags> = ProtectedIntersection<CreateTRPCNextBase<TRouter, TSSRContext>, DecoratedProcedureRecord<TRouter['_def']['_config'], TRouter['_def']['record'], TFlags>>;
26
- export declare function createTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext, TFlags = null>(opts: WithTRPCNoSSROptions<TRouter> | WithTRPCSSROptions<TRouter>): CreateTRPCNext<TRouter, TSSRContext, TFlags>;
27
+ export type CreateTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext> = ProtectedIntersection<CreateTRPCNextBase<TRouter, TSSRContext>, DecorateRouterRecord<TRouter['_def']['_config']['$types'], TRouter['_def']['record']>>;
28
+ export declare function createTRPCNext<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext>(opts: WithTRPCNoSSROptions<TRouter> | WithTRPCSSROptions<TRouter>): CreateTRPCNext<TRouter, TSSRContext>;
27
29
  //# sourceMappingURL=createTRPCNext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createTRPCNext.d.ts","sourceRoot":"","sources":["../src/createTRPCNext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,gBAAgB,EAEhB,wBAAwB,EACxB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,kBAAkB,CACjC,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe;IAEnC;;;;OAIG;IACH,UAAU,IAAI,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD;;OAEG;IACH,QAAQ,IAAI,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CACxB,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe,EACnC,MAAM,IACJ,qBAAqB,CACvB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,EACxC,wBAAwB,CACtB,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EACzB,MAAM,CACP,CACF,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe,GAAG,eAAe,EACrD,MAAM,GAAG,IAAI,EAEb,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAChE,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CA2B9C"}
1
+ {"version":3,"file":"createTRPCNext.d.ts","sourceRoot":"","sources":["../src/createTRPCNext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAMlC,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACtB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,kBAAkB,CACjC,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe;IAEnC;;;;OAIG;IACH,UAAU,IAAI,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD;;OAEG;IACH,QAAQ,IAAI,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACpC,kBAAkB,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CACxB,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe,IACjC,qBAAqB,CACvB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,EACxC,oBAAoB,CAClB,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EACpC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAC1B,CACF,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,SAAS,SAAS,EACzB,WAAW,SAAS,eAAe,GAAG,eAAe,EAErD,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAChE,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CA+BtC"}
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var shared = require('@trpc/react-query/shared');
4
+ var unstableCoreDoNotImport = require('@trpc/server/unstable-core-do-not-import');
5
+ var React = require('react');
6
+ var withTRPC = require('./withTRPC.js');
7
+
8
+ /* istanbul ignore file -- @preserve */ // We're testing this through E2E-testing
9
+ function createTRPCNext(opts) {
10
+ const hooks = shared.createRootHooks(opts);
11
+ // TODO: maybe set TSSRContext to `never` when using `WithTRPCNoSSROptions`
12
+ const _withTRPC = withTRPC.withTRPC(opts);
13
+ return unstableCoreDoNotImport.createFlatProxy((key)=>{
14
+ if (key === 'useContext' || key === 'useUtils') {
15
+ return ()=>{
16
+ const context = hooks.useUtils();
17
+ // create a stable reference of the utils context
18
+ return React.useMemo(()=>{
19
+ return shared.createReactQueryUtils(context);
20
+ }, [
21
+ context
22
+ ]);
23
+ };
24
+ }
25
+ if (key === 'useQueries') {
26
+ return hooks.useQueries;
27
+ }
28
+ if (key === 'useSuspenseQueries') {
29
+ return hooks.useSuspenseQueries;
30
+ }
31
+ if (key === 'withTRPC') {
32
+ return _withTRPC;
33
+ }
34
+ return shared.createReactDecoration(key, hooks);
35
+ });
36
+ }
37
+
38
+ exports.createTRPCNext = createTRPCNext;
@@ -0,0 +1,36 @@
1
+ import { createRootHooks, createReactQueryUtils, createReactDecoration } from '@trpc/react-query/shared';
2
+ import { createFlatProxy } from '@trpc/server/unstable-core-do-not-import';
3
+ import { useMemo } from 'react';
4
+ import { withTRPC } from './withTRPC.mjs';
5
+
6
+ /* istanbul ignore file -- @preserve */ // We're testing this through E2E-testing
7
+ function createTRPCNext(opts) {
8
+ const hooks = createRootHooks(opts);
9
+ // TODO: maybe set TSSRContext to `never` when using `WithTRPCNoSSROptions`
10
+ const _withTRPC = withTRPC(opts);
11
+ return createFlatProxy((key)=>{
12
+ if (key === 'useContext' || key === 'useUtils') {
13
+ return ()=>{
14
+ const context = hooks.useUtils();
15
+ // create a stable reference of the utils context
16
+ return useMemo(()=>{
17
+ return createReactQueryUtils(context);
18
+ }, [
19
+ context
20
+ ]);
21
+ };
22
+ }
23
+ if (key === 'useQueries') {
24
+ return hooks.useQueries;
25
+ }
26
+ if (key === 'useSuspenseQueries') {
27
+ return hooks.useSuspenseQueries;
28
+ }
29
+ if (key === 'withTRPC') {
30
+ return _withTRPC;
31
+ }
32
+ return createReactDecoration(key, hooks);
33
+ });
34
+ }
35
+
36
+ export { createTRPCNext };
package/dist/index.js CHANGED
@@ -1,195 +1,9 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
3
+ var withTRPC = require('./withTRPC.js');
4
+ var createTRPCNext = require('./createTRPCNext.js');
4
5
 
5
- var reactQuery = require('@tanstack/react-query');
6
- var client = require('@trpc/client');
7
- var shared = require('@trpc/react-query/shared');
8
- var React = require('react');
9
- var ssrPrepass = require('react-ssr-prepass');
10
- var shared$1 = require('@trpc/server/shared');
11
6
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
7
 
14
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
15
- var ssrPrepass__default = /*#__PURE__*/_interopDefaultLegacy(ssrPrepass);
16
-
17
- function transformQueryOrMutationCacheErrors(result) {
18
- const error = result.state.error;
19
- if (error instanceof Error && error.name === 'TRPCClientError') {
20
- const newError = {
21
- message: error.message,
22
- data: error.data,
23
- shape: error.shape
24
- };
25
- return {
26
- ...result,
27
- state: {
28
- ...result.state,
29
- error: newError
30
- }
31
- };
32
- }
33
- return result;
34
- }
35
- function withTRPC(opts) {
36
- const { config: getClientConfig } = opts;
37
- return (AppOrPage)=>{
38
- const trpc = shared.createRootHooks(opts);
39
- const WithTRPC = (props)=>{
40
- const [prepassProps] = React.useState(()=>{
41
- if (props.trpc) {
42
- return props.trpc;
43
- }
44
- const config = getClientConfig({});
45
- const queryClient = shared.getQueryClient(config);
46
- const trpcClient = trpc.createClient(config);
47
- return {
48
- abortOnUnmount: config.abortOnUnmount,
49
- queryClient,
50
- trpcClient,
51
- ssrState: opts.ssr ? 'mounting' : false,
52
- ssrContext: null
53
- };
54
- });
55
- const { queryClient , trpcClient , ssrState , ssrContext } = prepassProps;
56
- // allow normal components to be wrapped, not just app/pages
57
- const hydratedState = trpc.useDehydratedState(trpcClient, props.pageProps?.trpcState);
58
- return /*#__PURE__*/ React__default["default"].createElement(trpc.Provider, {
59
- abortOnUnmount: prepassProps.abortOnUnmount ?? false,
60
- client: trpcClient,
61
- queryClient: queryClient,
62
- ssrState: ssrState,
63
- ssrContext: ssrContext
64
- }, /*#__PURE__*/ React__default["default"].createElement(reactQuery.QueryClientProvider, {
65
- client: queryClient
66
- }, /*#__PURE__*/ React__default["default"].createElement(reactQuery.HydrationBoundary, {
67
- state: hydratedState
68
- }, /*#__PURE__*/ React__default["default"].createElement(AppOrPage, Object.assign({}, props)))));
69
- };
70
- if (AppOrPage.getInitialProps ?? opts.ssr) {
71
- WithTRPC.getInitialProps = async (appOrPageCtx)=>{
72
- const AppTree = appOrPageCtx.AppTree;
73
- // Determine if we are wrapping an App component or a Page component.
74
- const isApp = !!appOrPageCtx.Component;
75
- const ctx = isApp ? appOrPageCtx.ctx : appOrPageCtx;
76
- // Run the wrapped component's getInitialProps function.
77
- let pageProps = {};
78
- if (AppOrPage.getInitialProps) {
79
- const originalProps = await AppOrPage.getInitialProps(appOrPageCtx);
80
- const originalPageProps = isApp ? originalProps.pageProps ?? {} : originalProps;
81
- pageProps = {
82
- ...originalPageProps,
83
- ...pageProps
84
- };
85
- }
86
- const getAppTreeProps = (props)=>isApp ? {
87
- pageProps: props
88
- } : props;
89
- if (typeof window !== 'undefined' || !opts.ssr) {
90
- return getAppTreeProps(pageProps);
91
- }
92
- const config = getClientConfig({
93
- ctx
94
- });
95
- const trpcClient = client.createTRPCUntypedClient(config);
96
- const queryClient = shared.getQueryClient(config);
97
- const trpcProp = {
98
- config,
99
- trpcClient,
100
- queryClient,
101
- ssrState: 'prepass',
102
- ssrContext: ctx
103
- };
104
- const prepassProps = {
105
- pageProps,
106
- trpc: trpcProp
107
- };
108
- // Run the prepass step on AppTree. This will run all trpc queries on the server.
109
- // multiple prepass ensures that we can do batching on the server
110
- while(true){
111
- // render full tree
112
- await ssrPrepass__default["default"](/*#__PURE__*/ React.createElement(AppTree, prepassProps));
113
- if (!queryClient.isFetching()) {
114
- break;
115
- }
116
- // wait until the query cache has settled it's promises
117
- await new Promise((resolve)=>{
118
- const unsub = queryClient.getQueryCache().subscribe((event)=>{
119
- if (event?.query.getObserversCount() === 0) {
120
- resolve();
121
- unsub();
122
- }
123
- });
124
- });
125
- }
126
- const dehydratedCache = reactQuery.dehydrate(queryClient, {
127
- shouldDehydrateQuery () {
128
- // makes sure errors are also dehydrated
129
- return true;
130
- }
131
- });
132
- // since error instances can't be serialized, let's make them into `TRPCClientErrorLike`-objects
133
- const dehydratedCacheWithErrors = {
134
- ...dehydratedCache,
135
- queries: dehydratedCache.queries.map(transformQueryOrMutationCacheErrors),
136
- mutations: dehydratedCache.mutations.map(transformQueryOrMutationCacheErrors)
137
- };
138
- // dehydrate query client's state and add it to the props
139
- pageProps.trpcState = trpcClient.runtime.combinedTransformer.output.serialize(dehydratedCacheWithErrors);
140
- const appTreeProps = getAppTreeProps(pageProps);
141
- const meta = opts.responseMeta?.({
142
- ctx,
143
- clientErrors: [
144
- ...dehydratedCache.queries,
145
- ...dehydratedCache.mutations
146
- ].map((v)=>v.state.error).flatMap((err)=>err instanceof Error && err.name === 'TRPCClientError' ? [
147
- err
148
- ] : [])
149
- }) ?? {};
150
- for (const [key, value] of Object.entries(meta.headers ?? {})){
151
- if (typeof value === 'string') {
152
- ctx.res?.setHeader(key, value);
153
- }
154
- }
155
- if (meta.status && ctx.res) {
156
- ctx.res.statusCode = meta.status;
157
- }
158
- return appTreeProps;
159
- };
160
- }
161
- const displayName = AppOrPage.displayName ?? AppOrPage.name ?? 'Component';
162
- WithTRPC.displayName = `withTRPC(${displayName})`;
163
- return WithTRPC;
164
- };
165
- }
166
-
167
- /* istanbul ignore file -- @preserve */ // We're testing this through E2E-testing
168
- function createTRPCNext(opts) {
169
- const hooks = shared.createRootHooks(opts);
170
- // TODO: maybe set TSSRContext to `never` when using `WithTRPCNoSSROptions`
171
- const _withTRPC = withTRPC(opts);
172
- return shared$1.createFlatProxy((key)=>{
173
- if (key === 'useContext' || key === 'useUtils') {
174
- return ()=>{
175
- const context = hooks.useUtils();
176
- // create a stable reference of the utils context
177
- return React.useMemo(()=>{
178
- return shared.createReactQueryUtils(context);
179
- }, [
180
- context
181
- ]);
182
- };
183
- }
184
- if (key === 'useQueries') {
185
- return hooks.useQueries;
186
- }
187
- if (key === 'withTRPC') {
188
- return _withTRPC;
189
- }
190
- return shared.createReactDecoration(key, hooks);
191
- });
192
- }
193
-
194
- exports.createTRPCNext = createTRPCNext;
195
- exports.withTRPC = withTRPC;
8
+ exports.withTRPC = withTRPC.withTRPC;
9
+ exports.createTRPCNext = createTRPCNext.createTRPCNext;