@trpc/server 10.0.0-proxy-alpha.63 → 10.0.0-proxy-alpha.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,7 +52,7 @@ function createContext(opts: CreateHTTPContextOptions) {
52
52
  type Context = inferAsyncReturnType<typeof createContext>;
53
53
 
54
54
  // Initialize tRPC
55
- const t = initTRPC<{ ctx: Context }>()();
55
+ const t = initTRPC.context<Context>.create();
56
56
 
57
57
  // Create main router
58
58
  const appRouter = t.router({
@@ -1,87 +1,105 @@
1
1
  import { mergeRoutersGeneric } from './internals/__generated__/mergeRoutersGeneric';
2
2
  import { DefaultErrorShape, ErrorFormatter, ErrorFormatterShape } from '../error/formatter';
3
3
  import { CombinedDataTransformer, DataTransformerOptions, DefaultDataTransformer } from '../transformer';
4
- import { InitGenerics, InitOptions } from './internals/config';
4
+ import { CreateInitGenerics, InitGenerics, InitOptions } from './internals/config';
5
5
  import { PickFirstDefined, ValidateShape } from './internals/utils';
6
- export declare function initTRPC<TParams extends Partial<InitGenerics> = {}>(): <TOptions extends Partial<InitOptions<{
7
- ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
8
- meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
9
- }>>>(options?: ValidateShape<TOptions, Partial<InitOptions<{
10
- ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
11
- meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
12
- }>>> | undefined) => {
13
- /**
14
- * These are just types, they can't be used
15
- * @internal
16
- */
17
- _config: {
18
- ctx: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
19
- meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
20
- errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, DefaultErrorShape>>>;
21
- transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
22
- };
23
- /**
24
- * Builder object for creating procedures
25
- */
26
- procedure: import("./internals/procedureBuilder").ProcedureBuilder<{
27
- _config: {
28
- ctx: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
29
- meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
30
- errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, DefaultErrorShape>>>;
31
- transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
32
- };
33
- _ctx_in: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
34
- _ctx_out: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
35
- _input_in: typeof import("./internals/utils").unsetMarker;
36
- _input_out: typeof import("./internals/utils").unsetMarker;
37
- _output_in: typeof import("./internals/utils").unsetMarker;
38
- _output_out: typeof import("./internals/utils").unsetMarker;
39
- _meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
40
- }>;
41
- /**
42
- * Create reusable middlewares
43
- */
44
- middleware: <$TNewParams extends import("./procedure").ProcedureParams<{
45
- transformer: CombinedDataTransformer;
46
- errorShape: DefaultErrorShape;
47
- ctx: Record<string, unknown>;
48
- meta: Record<string, unknown>;
49
- }, unknown, unknown, unknown, unknown, unknown, unknown, unknown>>(fn: import("./middleware").MiddlewareFunction<{
6
+ declare type PartialInitGenerics = Partial<InitGenerics>;
7
+ declare type CreateInitGenericsFromPartial<T extends PartialInitGenerics> = CreateInitGenerics<{
8
+ ctx: T['ctx'] extends InitGenerics['ctx'] ? T['ctx'] : {};
9
+ meta: T['meta'] extends InitGenerics['meta'] ? T['meta'] : {};
10
+ }>;
11
+ /**
12
+ * TODO: This can be improved:
13
+ * - We should be able to chain `.meta()`/`.context()` only once
14
+ * - Simplify typings
15
+ * - Doesn't need to be a class but it doesn't really hurt either
16
+ */
17
+ declare class TRPCBuilder<TParams extends Partial<InitGenerics> = {}> {
18
+ context<TNewContext extends InitGenerics['ctx']>(): TRPCBuilder<{ [TKey in "ctx" | keyof TParams]: TKey extends "ctx" ? {
19
+ ctx: TNewContext;
20
+ }[TKey] : TKey extends keyof TParams ? TParams[TKey] : never; }>;
21
+ meta<TNewMeta extends InitGenerics['meta']>(): TRPCBuilder<{ [TKey in "meta" | keyof TParams]: TKey extends "meta" ? {
22
+ meta: TNewMeta;
23
+ }[TKey] : TKey extends keyof TParams ? TParams[TKey] : never; }>;
24
+ create<TOptions extends Partial<InitOptions<CreateInitGenericsFromPartial<TParams>>>>(options?: ValidateShape<TOptions, Partial<InitOptions<CreateInitGenericsFromPartial<TParams>>>> | undefined): {
25
+ /**
26
+ * These are just types, they can't be used
27
+ * @internal
28
+ */
50
29
  _config: {
51
- ctx: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
52
- meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
53
- errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, DefaultErrorShape>>>;
30
+ ctx: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
31
+ meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
32
+ errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, DefaultErrorShape>>>;
54
33
  transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
55
34
  };
56
- _ctx_in: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
57
- _ctx_out: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
58
- _input_out: unknown;
59
- _input_in: unknown;
60
- _output_in: unknown;
61
- _output_out: unknown;
62
- _meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
63
- }, $TNewParams>) => import("./middleware").MiddlewareFunction<{
64
- _config: {
65
- ctx: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
66
- meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
67
- errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, DefaultErrorShape>>>;
68
- transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
69
- };
70
- _ctx_in: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
71
- _ctx_out: TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>;
72
- _input_out: unknown;
73
- _input_in: unknown;
74
- _output_in: unknown;
75
- _output_out: unknown;
76
- _meta: PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>;
77
- }, $TNewParams>;
78
- /**
79
- * Create a router
80
- */
81
- router: <TProcRouterRecord extends import("./router").ProcedureRouterRecord>(opts: TProcRouterRecord) => import("./router").Router<import("./router").RouterDef<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends undefined ? {} : NonNullable<TParams["ctx"]>, DefaultErrorShape>>>, PickFirstDefined<TParams["meta"] extends undefined ? {} : NonNullable<TParams["meta"]>, undefined>, TProcRouterRecord>> & TProcRouterRecord;
82
- /**
83
- * Merge Routers
84
- */
85
- mergeRouters: typeof mergeRoutersGeneric;
86
- };
35
+ /**
36
+ * Builder object for creating procedures
37
+ */
38
+ procedure: import("./internals/procedureBuilder").ProcedureBuilder<{
39
+ _config: {
40
+ ctx: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
41
+ meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
42
+ errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, DefaultErrorShape>>>;
43
+ transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
44
+ };
45
+ _ctx_in: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
46
+ _ctx_out: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
47
+ _input_in: typeof import("./internals/utils").unsetMarker;
48
+ _input_out: typeof import("./internals/utils").unsetMarker;
49
+ _output_in: typeof import("./internals/utils").unsetMarker;
50
+ _output_out: typeof import("./internals/utils").unsetMarker;
51
+ _meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
52
+ }>;
53
+ /**
54
+ * Create reusable middlewares
55
+ */
56
+ middleware: <$TNewParams extends import("./procedure").ProcedureParams<{
57
+ transformer: CombinedDataTransformer;
58
+ errorShape: DefaultErrorShape;
59
+ ctx: Record<string, unknown>;
60
+ meta: Record<string, unknown>;
61
+ }, unknown, unknown, unknown, unknown, unknown, unknown, unknown>>(fn: import("./middleware").MiddlewareFunction<{
62
+ _config: {
63
+ ctx: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
64
+ meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
65
+ errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, DefaultErrorShape>>>;
66
+ transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
67
+ };
68
+ _ctx_in: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
69
+ _ctx_out: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
70
+ _input_out: unknown;
71
+ _input_in: unknown;
72
+ _output_in: unknown;
73
+ _output_out: unknown;
74
+ _meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
75
+ }, $TNewParams>) => import("./middleware").MiddlewareFunction<{
76
+ _config: {
77
+ ctx: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
78
+ meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
79
+ errorShape: ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, DefaultErrorShape>>>;
80
+ transformer: TOptions["transformer"] extends DataTransformerOptions ? TOptions["transformer"] extends DataTransformerOptions ? CombinedDataTransformer : DefaultDataTransformer : DefaultDataTransformer;
81
+ };
82
+ _ctx_in: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
83
+ _ctx_out: TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {};
84
+ _input_out: unknown;
85
+ _input_in: unknown;
86
+ _output_in: unknown;
87
+ _output_out: unknown;
88
+ _meta: TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {};
89
+ }, $TNewParams>;
90
+ /**
91
+ * Create a router
92
+ */
93
+ router: <TProcRouterRecord extends import("./router").ProcedureRouterRecord>(opts: TProcRouterRecord) => import("./router").Router<import("./router").RouterDef<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, ErrorFormatterShape<PickFirstDefined<TOptions["errorFormatter"], ErrorFormatter<TParams["ctx"] extends Record<string, unknown> ? TParams["ctx"] : {}, DefaultErrorShape>>>, TParams["meta"] extends Record<string, unknown> ? TParams["meta"] : {}, TProcRouterRecord>> & TProcRouterRecord;
94
+ /**
95
+ * Merge Routers
96
+ */
97
+ mergeRouters: typeof mergeRoutersGeneric;
98
+ };
99
+ }
100
+ /**
101
+ * Initialize tRPC - be done exactly once per backend
102
+ */
103
+ export declare const initTRPC: TRPCBuilder<{}>;
104
+ export {};
87
105
  //# sourceMappingURL=initTRPC.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initTRPC.d.ts","sourceRoot":"","sources":["../../../../packages/server/src/core/initTRPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EAGvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,YAAY,EACZ,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;SAE1D,OAAO,CAAC,KAAK,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC;UAClE,OAAO,CAAC,MAAM,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,YAAY,OAAO,CAAC,MAAM,CAAC,CAAC;;SADtE,OAAO,CAAC,KAAK,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,YAAY,OAAO,CAAC,KAAK,CAAC,CAAC;UAClE,OAAO,CAAC,MAAM,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,YAAY,OAAO,CAAC,MAAM,CAAC,CAAC;;IAuCzE;;;OAGG;;;;;;;IAEH;;OAEG;;;;;;;;;;;;;;;;IAEH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEH;;OAEG;;IAKH;;OAEG;;EAIR"}
1
+ {"version":3,"file":"initTRPC.d.ts","sourceRoot":"","sources":["../../../../packages/server/src/core/initTRPC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EAGvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAElB,YAAY,EACZ,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIpE,aAAK,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEjD,aAAK,6BAA6B,CAAC,CAAC,SAAS,mBAAmB,IAC9D,kBAAkB,CAAC;IACjB,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;CAC/D,CAAC,CAAC;AAEL;;;;;GAKG;AAEH,cAAM,WAAW,CAAC,OAAO,SAAS,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;IAC1D,OAAO,CAAC,WAAW,SAAS,YAAY,CAAC,KAAK,CAAC;aACQ,WAAW;;IAElE,IAAI,CAAC,QAAQ,SAAS,YAAY,CAAC,MAAM,CAAC;cACc,QAAQ;;IAEhE,MAAM,CACJ,QAAQ,SAAS,OAAO,CACtB,WAAW,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CACpD,EAED,OAAO,CAAC,EACJ,aAAa,CACX,QAAQ,EACR,OAAO,CAAC,WAAW,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,CAC7D,GACD,SAAS;QAkDX;;;WAGG;;;;;;;QAEH;;WAEG;;;;;;;;;;;;;;;;QAEH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAEH;;WAEG;;QAKH;;WAEG;;;CApER;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,iBAAoB,CAAC"}
@@ -21,7 +21,7 @@ export interface InitOptions<T extends InitGenerics> {
21
21
  */
22
22
  export declare type CreateInitGenerics<T extends InitGenerics> = T;
23
23
  /**
24
- * The config that is resolved after both calls of `initTRPC()` has been called
24
+ * The config that is resolved after `initTRPC.create()` has been called
25
25
  * Combination of `InitTOptions` + `InitGenerics`
26
26
  * @internal
27
27
  */
package/dist/index.js CHANGED
@@ -40,7 +40,26 @@ function mergeRoutersGeneric(...args) {
40
40
  return mergeRouters(...args);
41
41
  }
42
42
 
43
- function initTRPC() {
43
+ /**
44
+ * TODO: This can be improved:
45
+ * - We should be able to chain `.meta()`/`.context()` only once
46
+ * - Simplify typings
47
+ * - Doesn't need to be a class but it doesn't really hurt either
48
+ */ class TRPCBuilder {
49
+ context() {
50
+ return new TRPCBuilder();
51
+ }
52
+ meta() {
53
+ return new TRPCBuilder();
54
+ }
55
+ create(options) {
56
+ return createTRPCInner()(options);
57
+ }
58
+ }
59
+ /**
60
+ * Initialize tRPC - be done exactly once per backend
61
+ */ const initTRPC = new TRPCBuilder();
62
+ function createTRPCInner() {
44
63
  return function initTRPCInner(options) {
45
64
  const errorFormatter = options?.errorFormatter ?? router.defaultFormatter;
46
65
  const transformer = router.getDataTransformer(options?.transformer ?? router.defaultTransformer);
package/dist/index.mjs CHANGED
@@ -37,7 +37,26 @@ function mergeRoutersGeneric(...args) {
37
37
  return mergeRouters(...args);
38
38
  }
39
39
 
40
- function initTRPC() {
40
+ /**
41
+ * TODO: This can be improved:
42
+ * - We should be able to chain `.meta()`/`.context()` only once
43
+ * - Simplify typings
44
+ * - Doesn't need to be a class but it doesn't really hurt either
45
+ */ class TRPCBuilder {
46
+ context() {
47
+ return new TRPCBuilder();
48
+ }
49
+ meta() {
50
+ return new TRPCBuilder();
51
+ }
52
+ create(options) {
53
+ return createTRPCInner()(options);
54
+ }
55
+ }
56
+ /**
57
+ * Initialize tRPC - be done exactly once per backend
58
+ */ const initTRPC = new TRPCBuilder();
59
+ function createTRPCInner() {
41
60
  return function initTRPCInner(options) {
42
61
  const errorFormatter = options?.errorFormatter ?? defaultFormatter;
43
62
  const transformer = getDataTransformer(options?.transformer ?? defaultTransformer);
package/dist/types.d.ts CHANGED
@@ -26,6 +26,12 @@ export declare type Maybe<T> = T | undefined | null;
26
26
  * @internal
27
27
  */
28
28
  export declare type ThenArg<T> = T extends PromiseLike<infer U> ? ThenArg<U> : T;
29
+ /**
30
+ * @internal
31
+ */
32
+ export declare type Simplify<T> = {
33
+ [KeyType in keyof T]: T[KeyType];
34
+ };
29
35
  /**
30
36
  * @public
31
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,oBAAY,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KACxC,IAAI,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,MAAM,CAAC,GAC7C,CAAC,CAAC,IAAI,CAAC,GACP,IAAI,SAAS,MAAM,CAAC,GACpB,CAAC,CAAC,IAAI,CAAC,GACP,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AAEpD;;GAEG;AACH,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAExD;;GAEG;AACH,oBAAY,oBAAoB,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IACtE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC,aAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACpC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;CACpD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEpE;;GAEG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI;KACxB,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK;CACxD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,oBAAY,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAEpE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,oBAAY,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;KACxC,IAAI,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,MAAM,CAAC,GAC7C,CAAC,CAAC,IAAI,CAAC,GACP,IAAI,SAAS,MAAM,CAAC,GACpB,CAAC,CAAC,IAAI,CAAC,GACP,KAAK;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,oBAAY,QAAQ,CAClB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,SAAS,MAAM,IACpB;KACD,CAAC,IAAI,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF;;GAEG;AACH,oBAAY,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAE5C;;GAEG;AACH,oBAAY,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,oBAAY,QAAQ,CAAC,CAAC,IAAI;KAAG,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;CAAE,CAAC;AAE/D;;GAEG;AACH,oBAAY,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AAEpD;;GAEG;AACH,oBAAY,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAExD;;GAEG;AACH,oBAAY,oBAAoB,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,IACtE,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAEjC,aAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACpC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK;CACpD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,oBAAY,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEpE;;GAEG;AACH,oBAAY,SAAS,CAAC,CAAC,IAAI;KACxB,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,GAAG,KAAK;CACxD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;GAEG;AACH,oBAAY,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trpc/server",
3
- "version": "10.0.0-proxy-alpha.63",
3
+ "version": "10.0.0-proxy-alpha.64",
4
4
  "description": "tRPC Server",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -136,5 +136,5 @@
136
136
  "yup": "^0.32.8",
137
137
  "zod": "^3.0.0"
138
138
  },
139
- "gitHead": "7eb10c98f1fe7385ab7a61d07fab49510294030b"
139
+ "gitHead": "0a159a6c4224920090105f6e60a2e6172a750d46"
140
140
  }
@@ -12,6 +12,7 @@ import {
12
12
  defaultTransformer,
13
13
  getDataTransformer,
14
14
  } from '../transformer';
15
+ import { FlatOverwrite } from '../types';
15
16
  import {
16
17
  CreateInitGenerics,
17
18
  CreateRootConfig,
@@ -23,14 +24,54 @@ import { PickFirstDefined, ValidateShape } from './internals/utils';
23
24
  import { createMiddlewareFactory } from './middleware';
24
25
  import { createRouterFactory } from './router';
25
26
 
26
- export function initTRPC<TParams extends Partial<InitGenerics> = {}>() {
27
- type $Generics = CreateInitGenerics<{
28
- ctx: TParams['ctx'] extends undefined ? {} : NonNullable<TParams['ctx']>;
29
- meta: TParams['meta'] extends undefined ? {} : NonNullable<TParams['meta']>;
27
+ type PartialInitGenerics = Partial<InitGenerics>;
28
+
29
+ type CreateInitGenericsFromPartial<T extends PartialInitGenerics> =
30
+ CreateInitGenerics<{
31
+ ctx: T['ctx'] extends InitGenerics['ctx'] ? T['ctx'] : {};
32
+ meta: T['meta'] extends InitGenerics['meta'] ? T['meta'] : {};
30
33
  }>;
31
34
 
35
+ /**
36
+ * TODO: This can be improved:
37
+ * - We should be able to chain `.meta()`/`.context()` only once
38
+ * - Simplify typings
39
+ * - Doesn't need to be a class but it doesn't really hurt either
40
+ */
41
+
42
+ class TRPCBuilder<TParams extends Partial<InitGenerics> = {}> {
43
+ context<TNewContext extends InitGenerics['ctx']>() {
44
+ return new TRPCBuilder<FlatOverwrite<TParams, { ctx: TNewContext }>>();
45
+ }
46
+ meta<TNewMeta extends InitGenerics['meta']>() {
47
+ return new TRPCBuilder<FlatOverwrite<TParams, { meta: TNewMeta }>>();
48
+ }
49
+ create<
50
+ TOptions extends Partial<
51
+ InitOptions<CreateInitGenericsFromPartial<TParams>>
52
+ >,
53
+ >(
54
+ options?:
55
+ | ValidateShape<
56
+ TOptions,
57
+ Partial<InitOptions<CreateInitGenericsFromPartial<TParams>>>
58
+ >
59
+ | undefined,
60
+ ) {
61
+ return createTRPCInner<TParams>()<TOptions>(options);
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Initialize tRPC - be done exactly once per backend
67
+ */
68
+ export const initTRPC = new TRPCBuilder();
69
+
70
+ function createTRPCInner<TParams extends Partial<InitGenerics>>() {
71
+ type $Generics = CreateInitGenericsFromPartial<TParams>;
72
+
32
73
  type $Context = $Generics['ctx'];
33
- type $Meta = PickFirstDefined<$Generics['meta'], undefined>;
74
+ type $Meta = $Generics['meta'];
34
75
  type $Options = Partial<InitOptions<$Generics>>;
35
76
 
36
77
  return function initTRPCInner<TOptions extends $Options>(
@@ -27,7 +27,7 @@ export interface InitOptions<T extends InitGenerics> {
27
27
  export type CreateInitGenerics<T extends InitGenerics> = T;
28
28
 
29
29
  /**
30
- * The config that is resolved after both calls of `initTRPC()` has been called
30
+ * The config that is resolved after `initTRPC.create()` has been called
31
31
  * Combination of `InitTOptions` + `InitGenerics`
32
32
  * @internal
33
33
  */
package/src/types.ts CHANGED
@@ -41,6 +41,11 @@ export type Maybe<T> = T | undefined | null;
41
41
  */
42
42
  export type ThenArg<T> = T extends PromiseLike<infer U> ? ThenArg<U> : T;
43
43
 
44
+ /**
45
+ * @internal
46
+ */
47
+ export type Simplify<T> = { [KeyType in keyof T]: T[KeyType] };
48
+
44
49
  /**
45
50
  * @public
46
51
  */