@nifrajs/client 3.1.0 → 3.3.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.
- package/dist/jsonify.d.ts +6 -3
- package/dist/jsonify.d.ts.map +1 -1
- package/dist/result.d.ts +37 -6
- package/dist/result.d.ts.map +1 -1
- package/dist/treaty.d.ts +6 -1
- package/dist/treaty.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/jsonify.ts +12 -3
- package/src/result.ts +36 -2
- package/src/treaty.ts +15 -3
package/dist/jsonify.d.ts
CHANGED
|
@@ -3,13 +3,16 @@ import type { BinaryResponse, RawResponse } from "@nifrajs/core/binary";
|
|
|
3
3
|
* Maps a value to the shape it takes after a JSON round-trip, so the client's
|
|
4
4
|
* `data` type reflects the wire - not the handler's in-memory return.
|
|
5
5
|
*
|
|
6
|
-
* - `Date` → `string`; `undefined` / functions / `bigint` → dropped from objects
|
|
6
|
+
* - `Date` → `string`; `undefined` / functions / `bigint` → dropped from objects (a top-level
|
|
7
|
+
* `undefined` remains `undefined`, which is useful for bodyless statuses such as `204`)
|
|
7
8
|
* - arrays and plain objects recurse; optionality (`?`) is preserved
|
|
8
9
|
*
|
|
9
10
|
* Pragmatic by design: `Map`/`Set`/class instances/custom `toJSON` are treated as
|
|
10
11
|
* plain objects (best-effort), not specially handled. Documented, not magic.
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
type JsonifyObjectProperty<T> = T extends undefined ? never : T extends (...args: never[]) => unknown ? never : Jsonify<T>;
|
|
14
|
+
export type Jsonify<T> = [unknown] extends [T] ? unknown : T extends BinaryResponse ? Blob : T extends RawResponse<infer U> ? Jsonify<U> : T extends string | number | boolean | null ? T : T extends Date ? string : T extends bigint ? never : T extends (...args: never[]) => unknown ? never : T extends undefined ? undefined : T extends ReadonlyArray<infer U> ? Array<Jsonify<U>> : T extends object ? {
|
|
15
|
+
[K in keyof T as [JsonifyObjectProperty<T[K]>] extends [never] ? never : K]: JsonifyObjectProperty<T[K]>;
|
|
14
16
|
} : never;
|
|
17
|
+
export {};
|
|
15
18
|
//# sourceMappingURL=jsonify.d.ts.map
|
package/dist/jsonify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonify.d.ts","sourceRoot":"","sources":["../src/jsonify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvE
|
|
1
|
+
{"version":3,"file":"jsonify.d.ts","sourceRoot":"","sources":["../src/jsonify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvE;;;;;;;;;;GAUG;AACH,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAC/C,KAAK,GACL,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GACrC,KAAK,GACL,OAAO,CAAC,CAAC,CAAC,CAAA;AAEhB,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAC1C,OAAO,GAIP,CAAC,SAAS,cAAc,GACtB,IAAI,GAGJ,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAC5B,OAAO,CAAC,CAAC,CAAC,GACV,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GACxC,CAAC,GACD,CAAC,SAAS,IAAI,GACZ,MAAM,GACN,CAAC,SAAS,MAAM,GACd,KAAK,GACL,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GACrC,KAAK,GACL,CAAC,SAAS,SAAS,GACjB,SAAS,GACT,CAAC,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACjB,CAAC,SAAS,MAAM,GACd;KACG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC1D,KAAK,GACL,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC,GACD,KAAK,CAAA"}
|
package/dist/result.d.ts
CHANGED
|
@@ -22,6 +22,42 @@ type DeclaredFailures<Errors extends Record<number, unknown>> = {
|
|
|
22
22
|
readonly error: ApiError;
|
|
23
23
|
};
|
|
24
24
|
}[Extract<keyof Errors, number>];
|
|
25
|
+
type DecimalDigit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
26
|
+
/** The finite success-status set keeps a declared 200/201 arm narrowable without a `number` fallback
|
|
27
|
+
* swallowing it. */
|
|
28
|
+
type SuccessStatus = {
|
|
29
|
+
[S in `2${DecimalDigit}${DecimalDigit}`]: S extends `${infer N extends number}` ? N : never;
|
|
30
|
+
}[`2${DecimalDigit}${DecimalDigit}`];
|
|
31
|
+
type DeclaredSuccesses<Responses> = {
|
|
32
|
+
[K in Extract<keyof Responses, SuccessStatus>]: {
|
|
33
|
+
readonly ok: true;
|
|
34
|
+
readonly status: K;
|
|
35
|
+
readonly data: Responses[K];
|
|
36
|
+
readonly error: null;
|
|
37
|
+
};
|
|
38
|
+
}[Extract<keyof Responses, SuccessStatus>];
|
|
39
|
+
type SuccessFallback<Data, Responses> = Exclude<SuccessStatus, Extract<keyof Responses, SuccessStatus>> extends never ? never : {
|
|
40
|
+
readonly ok: true;
|
|
41
|
+
readonly status: Exclude<SuccessStatus, Extract<keyof Responses, SuccessStatus>>;
|
|
42
|
+
readonly data: Data;
|
|
43
|
+
readonly error: null;
|
|
44
|
+
};
|
|
45
|
+
type SuccessResult<Data, Responses> = [Responses] extends [never] ? {
|
|
46
|
+
readonly ok: true;
|
|
47
|
+
readonly status: number;
|
|
48
|
+
readonly data: Data;
|
|
49
|
+
readonly error: null;
|
|
50
|
+
} : [Responses] extends [object] ? number extends keyof Responses ? {
|
|
51
|
+
readonly ok: true;
|
|
52
|
+
readonly status: number;
|
|
53
|
+
readonly data: Data;
|
|
54
|
+
readonly error: null;
|
|
55
|
+
} : DeclaredSuccesses<Responses> | SuccessFallback<Data, Responses> : {
|
|
56
|
+
readonly ok: true;
|
|
57
|
+
readonly status: number;
|
|
58
|
+
readonly data: Data;
|
|
59
|
+
readonly error: null;
|
|
60
|
+
};
|
|
25
61
|
/**
|
|
26
62
|
* The outcome of a client call. The client never throws - inspect `ok` to branch.
|
|
27
63
|
*
|
|
@@ -32,12 +68,7 @@ type DeclaredFailures<Errors extends Record<number, unknown>> = {
|
|
|
32
68
|
* single failure arm with `data: Errors` (`unknown`). `error` is always the server's normalized
|
|
33
69
|
* `{ error, issues? }` summary on failure, `null` on success.
|
|
34
70
|
*/
|
|
35
|
-
export type Result<Data, Errors = unknown> = {
|
|
36
|
-
readonly ok: true;
|
|
37
|
-
readonly status: number;
|
|
38
|
-
readonly data: Data;
|
|
39
|
-
readonly error: null;
|
|
40
|
-
} | ([Errors] extends [Record<number, unknown>] ? DeclaredFailures<Errors> | {
|
|
71
|
+
export type Result<Data, Errors = unknown, Responses = unknown> = SuccessResult<Data, Responses> | ([Errors] extends [Record<number, unknown>] ? DeclaredFailures<Errors> | {
|
|
41
72
|
readonly ok: false;
|
|
42
73
|
readonly status: Exclude<ErrorStatus, Extract<keyof Errors, number>> | 0;
|
|
43
74
|
readonly data: unknown;
|
package/dist/result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KACtC,CAAC,CAAA;CACH;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAA;AAEP,oGAAoG;AACpG,KAAK,gBAAgB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KAC7D,CAAC,IAAI,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,GAAG;QACpC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAA;QAClB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;KACzB;CACF,CAAC,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAEhC
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
|
package/dist/treaty.d.ts
CHANGED
|
@@ -15,6 +15,11 @@ type CallOptions<I extends RouteInfo> = {
|
|
|
15
15
|
headers?: Record<string, string>;
|
|
16
16
|
signal?: AbortSignal;
|
|
17
17
|
};
|
|
18
|
+
/** Response metadata is a status map, so an explicitly bodyless status must keep its `undefined`
|
|
19
|
+
* value instead of being treated like an omitted object property by the general `Jsonify` helper. */
|
|
20
|
+
type JsonifyResponses<T> = T extends object ? {
|
|
21
|
+
[K in keyof T]: Jsonify<T[K]>;
|
|
22
|
+
} : never;
|
|
18
23
|
type IsBodyVerb<M extends string> = M extends "POST" | "PUT" | "PATCH" ? true : false;
|
|
19
24
|
/**
|
|
20
25
|
* A terminal method call. The shape is **verb-aware** so the runtime can read
|
|
@@ -24,7 +29,7 @@ type IsBodyVerb<M extends string> = M extends "POST" | "PUT" | "PATCH" ? true :
|
|
|
24
29
|
* `Result` whose data is the handler's output as it arrives over the wire
|
|
25
30
|
* (`Jsonify`).
|
|
26
31
|
*/
|
|
27
|
-
type MethodCall<I extends RouteInfo, BodyVerb extends boolean> = BodyVerb extends true ? [I["body"]] extends [never] ? (body?: undefined, options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>>> : (body: I["body"], options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>>> : (options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>>>;
|
|
32
|
+
type MethodCall<I extends RouteInfo, BodyVerb extends boolean> = BodyVerb extends true ? [I["body"]] extends [never] ? (body?: undefined, options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>> : (body: I["body"], options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>> : (options?: CallOptions<I>) => Promise<Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>>;
|
|
28
33
|
/** The SSE event payload of a route (from `app.sse()`'s `sse` schema); `never` for ordinary routes. */
|
|
29
34
|
type SseOf<I> = I extends {
|
|
30
35
|
sse: infer E;
|
package/dist/treaty.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treaty.d.ts","sourceRoot":"","sources":["../src/treaty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,mHAAmH;AACnH,MAAM,MAAM,UAAU,CAAC,GAAG,IAAI,GAAG,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAIjF;;;;;GAKG;AACH,KAAK,aAAa,GAChB,sHAAsH,CAAA;AAExH,KAAK,WAAW,CAAC,CAAC,SAAS,SAAS,IAAI;IACtC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAA;AAErF;;;;;;;GAOG;AACH,KAAK,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,QAAQ,SAAS,OAAO,IAAI,QAAQ,SAAS,IAAI,GAClF,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACzB,CACE,IAAI,CAAC,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"treaty.d.ts","sourceRoot":"","sources":["../src/treaty.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/client",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Browser-safe, end-to-end-typed client for @nifrajs/core servers (Eden-style proxy).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@nifrajs/core": "^3.
|
|
42
|
+
"@nifrajs/core": "^3.3.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@nifrajs/core": "workspace:*",
|
package/src/jsonify.ts
CHANGED
|
@@ -4,12 +4,19 @@ import type { BinaryResponse, RawResponse } from "@nifrajs/core/binary"
|
|
|
4
4
|
* Maps a value to the shape it takes after a JSON round-trip, so the client's
|
|
5
5
|
* `data` type reflects the wire - not the handler's in-memory return.
|
|
6
6
|
*
|
|
7
|
-
* - `Date` → `string`; `undefined` / functions / `bigint` → dropped from objects
|
|
7
|
+
* - `Date` → `string`; `undefined` / functions / `bigint` → dropped from objects (a top-level
|
|
8
|
+
* `undefined` remains `undefined`, which is useful for bodyless statuses such as `204`)
|
|
8
9
|
* - arrays and plain objects recurse; optionality (`?`) is preserved
|
|
9
10
|
*
|
|
10
11
|
* Pragmatic by design: `Map`/`Set`/class instances/custom `toJSON` are treated as
|
|
11
12
|
* plain objects (best-effort), not specially handled. Documented, not magic.
|
|
12
13
|
*/
|
|
14
|
+
type JsonifyObjectProperty<T> = T extends undefined
|
|
15
|
+
? never
|
|
16
|
+
: T extends (...args: never[]) => unknown
|
|
17
|
+
? never
|
|
18
|
+
: Jsonify<T>
|
|
19
|
+
|
|
13
20
|
export type Jsonify<T> = [unknown] extends [T]
|
|
14
21
|
? unknown // `unknown`/`any` (e.g. a route with no response schema) stays opaque
|
|
15
22
|
: // A route that declared itself binary with `bytes()`. Checked FIRST, before the object arm below
|
|
@@ -30,11 +37,13 @@ export type Jsonify<T> = [unknown] extends [T]
|
|
|
30
37
|
: T extends (...args: never[]) => unknown
|
|
31
38
|
? never
|
|
32
39
|
: T extends undefined
|
|
33
|
-
?
|
|
40
|
+
? undefined
|
|
34
41
|
: T extends ReadonlyArray<infer U>
|
|
35
42
|
? Array<Jsonify<U>>
|
|
36
43
|
: T extends object
|
|
37
44
|
? {
|
|
38
|
-
[K in keyof T as [
|
|
45
|
+
[K in keyof T as [JsonifyObjectProperty<T[K]>] extends [never]
|
|
46
|
+
? never
|
|
47
|
+
: K]: JsonifyObjectProperty<T[K]>
|
|
39
48
|
}
|
|
40
49
|
: never
|
package/src/result.ts
CHANGED
|
@@ -74,6 +74,40 @@ type DeclaredFailures<Errors extends Record<number, unknown>> = {
|
|
|
74
74
|
}
|
|
75
75
|
}[Extract<keyof Errors, number>]
|
|
76
76
|
|
|
77
|
+
type DecimalDigit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
|
|
78
|
+
/** The finite success-status set keeps a declared 200/201 arm narrowable without a `number` fallback
|
|
79
|
+
* swallowing it. */
|
|
80
|
+
type SuccessStatus = {
|
|
81
|
+
[S in `2${DecimalDigit}${DecimalDigit}`]: S extends `${infer N extends number}` ? N : never
|
|
82
|
+
}[`2${DecimalDigit}${DecimalDigit}`]
|
|
83
|
+
|
|
84
|
+
type DeclaredSuccesses<Responses> = {
|
|
85
|
+
[K in Extract<keyof Responses, SuccessStatus>]: {
|
|
86
|
+
readonly ok: true
|
|
87
|
+
readonly status: K
|
|
88
|
+
readonly data: Responses[K]
|
|
89
|
+
readonly error: null
|
|
90
|
+
}
|
|
91
|
+
}[Extract<keyof Responses, SuccessStatus>]
|
|
92
|
+
|
|
93
|
+
type SuccessFallback<Data, Responses> =
|
|
94
|
+
Exclude<SuccessStatus, Extract<keyof Responses, SuccessStatus>> extends never
|
|
95
|
+
? never
|
|
96
|
+
: {
|
|
97
|
+
readonly ok: true
|
|
98
|
+
readonly status: Exclude<SuccessStatus, Extract<keyof Responses, SuccessStatus>>
|
|
99
|
+
readonly data: Data
|
|
100
|
+
readonly error: null
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
type SuccessResult<Data, Responses> = [Responses] extends [never]
|
|
104
|
+
? { readonly ok: true; readonly status: number; readonly data: Data; readonly error: null }
|
|
105
|
+
: [Responses] extends [object]
|
|
106
|
+
? number extends keyof Responses
|
|
107
|
+
? { readonly ok: true; readonly status: number; readonly data: Data; readonly error: null }
|
|
108
|
+
: DeclaredSuccesses<Responses> | SuccessFallback<Data, Responses>
|
|
109
|
+
: { readonly ok: true; readonly status: number; readonly data: Data; readonly error: null }
|
|
110
|
+
|
|
77
111
|
/**
|
|
78
112
|
* The outcome of a client call. The client never throws - inspect `ok` to branch.
|
|
79
113
|
*
|
|
@@ -84,8 +118,8 @@ type DeclaredFailures<Errors extends Record<number, unknown>> = {
|
|
|
84
118
|
* single failure arm with `data: Errors` (`unknown`). `error` is always the server's normalized
|
|
85
119
|
* `{ error, issues? }` summary on failure, `null` on success.
|
|
86
120
|
*/
|
|
87
|
-
export type Result<Data, Errors = unknown> =
|
|
88
|
-
|
|
|
121
|
+
export type Result<Data, Errors = unknown, Responses = unknown> =
|
|
122
|
+
| SuccessResult<Data, Responses>
|
|
89
123
|
| ([Errors] extends [Record<number, unknown>]
|
|
90
124
|
?
|
|
91
125
|
| DeclaredFailures<Errors>
|
package/src/treaty.ts
CHANGED
|
@@ -22,6 +22,10 @@ type CallOptions<I extends RouteInfo> = {
|
|
|
22
22
|
signal?: AbortSignal
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/** Response metadata is a status map, so an explicitly bodyless status must keep its `undefined`
|
|
26
|
+
* value instead of being treated like an omitted object property by the general `Jsonify` helper. */
|
|
27
|
+
type JsonifyResponses<T> = T extends object ? { [K in keyof T]: Jsonify<T[K]> } : never
|
|
28
|
+
|
|
25
29
|
type IsBodyVerb<M extends string> = M extends "POST" | "PUT" | "PATCH" ? true : false
|
|
26
30
|
|
|
27
31
|
/**
|
|
@@ -37,12 +41,20 @@ type MethodCall<I extends RouteInfo, BodyVerb extends boolean> = BodyVerb extend
|
|
|
37
41
|
? (
|
|
38
42
|
body?: undefined,
|
|
39
43
|
options?: CallOptions<I>,
|
|
40
|
-
) => Promise<
|
|
44
|
+
) => Promise<
|
|
45
|
+
Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>
|
|
46
|
+
>
|
|
41
47
|
: (
|
|
42
48
|
body: I["body"],
|
|
43
49
|
options?: CallOptions<I>,
|
|
44
|
-
) => Promise<
|
|
45
|
-
|
|
50
|
+
) => Promise<
|
|
51
|
+
Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>
|
|
52
|
+
>
|
|
53
|
+
: (
|
|
54
|
+
options?: CallOptions<I>,
|
|
55
|
+
) => Promise<
|
|
56
|
+
Result<Jsonify<I["output"]>, Jsonify<I["errors"]>, JsonifyResponses<I["responses"]>>
|
|
57
|
+
>
|
|
46
58
|
|
|
47
59
|
// --- typed SSE subscriptions ---
|
|
48
60
|
|