effect-app 1.17.5 → 1.18.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/CHANGELOG.md +6 -0
- package/_cjs/client/clientFor2.cjs +195 -0
- package/_cjs/client/clientFor2.cjs.map +1 -0
- package/dist/client/clientFor2.d.ts +49 -0
- package/dist/client/clientFor2.d.ts.map +1 -0
- package/dist/client/clientFor2.js +163 -0
- package/package.json +13 -1
- package/src/client/clientFor2.ts +337 -0
- package/tsconfig.src.json +0 -1
- package/tsconfig.test.json +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.clientFor2 = clientFor2;
|
|
7
|
+
var _core = require("@effect-app/core");
|
|
8
|
+
var _rpc = require("@effect/rpc");
|
|
9
|
+
var _rpcHttp = require("@effect/rpc-http");
|
|
10
|
+
var _effectApp = require("effect-app");
|
|
11
|
+
var _client = require("effect-app/client");
|
|
12
|
+
var _http = require("effect-app/http");
|
|
13
|
+
var _utils = require("effect-app/utils");
|
|
14
|
+
var _pathParser = require("path-parser");
|
|
15
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
16
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
17
|
+
|
|
18
|
+
const cache = new Map();
|
|
19
|
+
const apiClient = _core.Effect.gen(function* () {
|
|
20
|
+
const client = yield* _http.HttpClient.HttpClient;
|
|
21
|
+
const config = yield* _client.ApiConfig.Tag;
|
|
22
|
+
return client.pipe(_http.HttpClient.mapRequest(_http.HttpClientRequest.prependUrl(config.apiUrl + "/rpc")), _http.HttpClient.mapRequest(_http.HttpClientRequest.setHeaders(config.headers.pipe(_core.Option.getOrElse(() => _core.HashMap.empty())))));
|
|
23
|
+
});
|
|
24
|
+
function clientFor2(models) {
|
|
25
|
+
const found = cache.get(models);
|
|
26
|
+
if (found) {
|
|
27
|
+
return found;
|
|
28
|
+
}
|
|
29
|
+
const m = clientFor_(models);
|
|
30
|
+
cache.set(models, m);
|
|
31
|
+
return m;
|
|
32
|
+
}
|
|
33
|
+
function clientFor_(models, layers = _core.Layer.empty) {
|
|
34
|
+
const filtered = (0, _utils.typedKeysOf)(models).reduce((acc, cur) => {
|
|
35
|
+
if (_core.Predicate.isObject(models[cur]) && models[cur].success) {
|
|
36
|
+
acc[cur] = models[cur];
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, {});
|
|
40
|
+
const meta = models.meta;
|
|
41
|
+
if (!meta) throw new Error("No meta defined in Resource!");
|
|
42
|
+
const resolver = (0, _core.flow)(_rpcHttp.HttpRpcResolver.make, _ => _rpc.RpcResolver.toClient(_));
|
|
43
|
+
const baseClient = apiClient.pipe(_core.Effect.andThen(_http.HttpClient.mapRequest(_http.HttpClientRequest.appendUrl("/" + meta.moduleName))));
|
|
44
|
+
return (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
|
|
45
|
+
const h = filtered[cur];
|
|
46
|
+
const Request = h;
|
|
47
|
+
const Response = h.success;
|
|
48
|
+
const encodeRequest = _effectApp.S.encodeSync(Request);
|
|
49
|
+
const requestName = `${meta.moduleName}.${cur}`.replaceAll(".js", "");
|
|
50
|
+
const requestMeta = {
|
|
51
|
+
method: "POST",
|
|
52
|
+
// TODO
|
|
53
|
+
Request,
|
|
54
|
+
Response,
|
|
55
|
+
mapPath: requestName,
|
|
56
|
+
name: requestName
|
|
57
|
+
};
|
|
58
|
+
const client = baseClient.pipe(_core.Effect.andThen(_http.HttpClient.mapRequest(_http.HttpClientRequest.appendUrlParam("action", cur))), _core.Effect.andThen(resolver));
|
|
59
|
+
const fields = _core.Struct.omit(Request.fields, "_tag");
|
|
60
|
+
const p = requestName;
|
|
61
|
+
const path = new _pathParser.Path(p); // TODO
|
|
62
|
+
// @ts-expect-error doc
|
|
63
|
+
prev[cur] = requestMeta.method === "GET" ? Object.keys(fields).length === 0 ? {
|
|
64
|
+
handler: client.pipe(_core.Effect.andThen(cl => cl(new Request())), _core.Effect.map(_ => ({
|
|
65
|
+
body: _,
|
|
66
|
+
status: 200,
|
|
67
|
+
headers: {}
|
|
68
|
+
})),
|
|
69
|
+
// TODO
|
|
70
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
71
|
+
captureStackTrace: false,
|
|
72
|
+
attributes: {
|
|
73
|
+
"request.name": requestName
|
|
74
|
+
}
|
|
75
|
+
}), _core.Effect.provide(layers)),
|
|
76
|
+
...requestMeta
|
|
77
|
+
} : {
|
|
78
|
+
handler: req => client.pipe(_core.Effect.andThen(cl => cl(new Request(req))), _core.Effect.map(_ => ({
|
|
79
|
+
body: _,
|
|
80
|
+
status: 200,
|
|
81
|
+
headers: {}
|
|
82
|
+
})),
|
|
83
|
+
// TODO
|
|
84
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
85
|
+
captureStackTrace: false,
|
|
86
|
+
attributes: {
|
|
87
|
+
"request.name": requestName
|
|
88
|
+
}
|
|
89
|
+
}), _core.Effect.provide(layers)),
|
|
90
|
+
...requestMeta,
|
|
91
|
+
mapPath: req => req ? (0, _client.makePathWithQuery)(path, encodeRequest(req)) : p
|
|
92
|
+
} : Object.keys(fields).length === 0 ? {
|
|
93
|
+
handler: client.pipe(_core.Effect.andThen(cl => cl(new Request())), _core.Effect.map(_ => ({
|
|
94
|
+
body: _,
|
|
95
|
+
status: 200,
|
|
96
|
+
headers: {}
|
|
97
|
+
})),
|
|
98
|
+
// TODO
|
|
99
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
100
|
+
captureStackTrace: false,
|
|
101
|
+
attributes: {
|
|
102
|
+
"request.name": requestName
|
|
103
|
+
}
|
|
104
|
+
}), _core.Effect.provide(layers)),
|
|
105
|
+
...requestMeta
|
|
106
|
+
} : {
|
|
107
|
+
handler: req => client.pipe(_core.Effect.andThen(cl => cl(new Request(req))), _core.Effect.map(_ => ({
|
|
108
|
+
body: _,
|
|
109
|
+
status: 200,
|
|
110
|
+
headers: {}
|
|
111
|
+
})),
|
|
112
|
+
// TODO
|
|
113
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
114
|
+
captureStackTrace: false,
|
|
115
|
+
attributes: {
|
|
116
|
+
"request.name": requestName
|
|
117
|
+
}
|
|
118
|
+
}), _core.Effect.provide(layers)),
|
|
119
|
+
...requestMeta,
|
|
120
|
+
mapPath: req => req ? requestMeta.method === "DELETE" ? (0, _client.makePathWithQuery)(path, encodeRequest(req)) : (0, _client.makePathWithBody)(path, encodeRequest(req)) : p
|
|
121
|
+
};
|
|
122
|
+
// generate handler
|
|
123
|
+
// @ts-expect-error doc
|
|
124
|
+
prev[`${cur}E`] = requestMeta.method === "GET" ? Object.keys(fields).length === 0 ? {
|
|
125
|
+
handler: client.pipe(_core.Effect.andThen(cl => cl(new Request())), _core.Effect.flatMap(res => _effectApp.S.encode(Response)(res)),
|
|
126
|
+
// TODO
|
|
127
|
+
_core.Effect.map(_ => ({
|
|
128
|
+
body: _,
|
|
129
|
+
status: 200,
|
|
130
|
+
headers: {}
|
|
131
|
+
})),
|
|
132
|
+
// TODO,
|
|
133
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
134
|
+
captureStackTrace: false,
|
|
135
|
+
attributes: {
|
|
136
|
+
"request.name": requestName
|
|
137
|
+
}
|
|
138
|
+
}), _core.Effect.provide(layers)),
|
|
139
|
+
...requestMeta
|
|
140
|
+
} : {
|
|
141
|
+
handler: req => client.pipe(_core.Effect.andThen(cl => cl(new Request(req))), _core.Effect.flatMap(res => _effectApp.S.encode(Response)(res)),
|
|
142
|
+
// TODO
|
|
143
|
+
_core.Effect.map(_ => ({
|
|
144
|
+
body: _,
|
|
145
|
+
status: 200,
|
|
146
|
+
headers: {}
|
|
147
|
+
})),
|
|
148
|
+
// TODO,
|
|
149
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
150
|
+
captureStackTrace: false,
|
|
151
|
+
attributes: {
|
|
152
|
+
"request.name": requestName
|
|
153
|
+
}
|
|
154
|
+
}), _core.Effect.provide(layers)),
|
|
155
|
+
...requestMeta,
|
|
156
|
+
mapPath: req => req ? (0, _client.makePathWithQuery)(path, encodeRequest(req)) : p
|
|
157
|
+
} : Object.keys(fields).length === 0 ? {
|
|
158
|
+
handler: client.pipe(_core.Effect.andThen(cl => cl(new Request())), _core.Effect.flatMap(res => _effectApp.S.encode(Response)(res)),
|
|
159
|
+
// TODO
|
|
160
|
+
_core.Effect.map(_ => ({
|
|
161
|
+
body: _,
|
|
162
|
+
status: 200,
|
|
163
|
+
headers: {}
|
|
164
|
+
})),
|
|
165
|
+
// TODO,
|
|
166
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
167
|
+
captureStackTrace: false,
|
|
168
|
+
attributes: {
|
|
169
|
+
"request.name": requestName
|
|
170
|
+
}
|
|
171
|
+
}), _core.Effect.provide(layers)),
|
|
172
|
+
...requestMeta
|
|
173
|
+
} : {
|
|
174
|
+
handler: req => client.pipe(_core.Effect.andThen(cl => cl(new Request(req))), _core.Effect.flatMap(res => _effectApp.S.encode(Response)(res)),
|
|
175
|
+
// TODO
|
|
176
|
+
_core.Effect.map(_ => ({
|
|
177
|
+
body: _,
|
|
178
|
+
status: 200,
|
|
179
|
+
headers: {}
|
|
180
|
+
})),
|
|
181
|
+
// TODO,
|
|
182
|
+
_core.Effect.withSpan("client.request " + requestName, {
|
|
183
|
+
captureStackTrace: false,
|
|
184
|
+
attributes: {
|
|
185
|
+
"request.name": requestName
|
|
186
|
+
}
|
|
187
|
+
}), _core.Effect.provide(layers)),
|
|
188
|
+
...requestMeta,
|
|
189
|
+
mapPath: req => req ? requestMeta.method === "DELETE" ? (0, _client.makePathWithQuery)(path, encodeRequest(req)) : (0, _client.makePathWithBody)(path, encodeRequest(req)) : p
|
|
190
|
+
};
|
|
191
|
+
// generate handler
|
|
192
|
+
return prev;
|
|
193
|
+
}, {});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=clientFor2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientFor2.cjs","names":["_core","require","_rpc","_rpcHttp","_effectApp","_client","_http","_utils","_pathParser","cache","Map","apiClient","Effect","gen","client","HttpClient","config","ApiConfig","Tag","pipe","mapRequest","HttpClientRequest","prependUrl","apiUrl","setHeaders","headers","Option","getOrElse","HashMap","empty","clientFor2","models","found","get","m","clientFor_","set","layers","Layer","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","success","meta","Error","resolver","flow","HttpRpcResolver","make","_","RpcResolver","toClient","baseClient","andThen","appendUrl","moduleName","prev","h","Request","Response","encodeRequest","S","encodeSync","requestName","replaceAll","requestMeta","method","mapPath","name","appendUrlParam","fields","Struct","omit","p","path","Path","Object","keys","length","handler","cl","map","body","status","withSpan","captureStackTrace","attributes","provide","req","makePathWithQuery","makePathWithBody","flatMap","res","encode"],"sources":["../../src/client/clientFor2.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Effect } from "@effect-app/core";
|
|
2
|
+
import type * as Serializable from "@effect/schema/Serializable";
|
|
3
|
+
import { S } from "effect-app";
|
|
4
|
+
import type { FetchResponse } from "effect-app/client";
|
|
5
|
+
import { ApiConfig } from "effect-app/client";
|
|
6
|
+
import { HttpClient } from "effect-app/http";
|
|
7
|
+
import type { Schema } from "effect-app/schema";
|
|
8
|
+
import type * as Request from "effect/Request";
|
|
9
|
+
type Requests = Record<string, any>;
|
|
10
|
+
export type Client<M extends Requests> = RequestHandlers<ApiConfig | HttpClient.HttpClient.Service, never, // SupportedErrors | FetchError | ResError,
|
|
11
|
+
M> & RequestHandlersE<ApiConfig | HttpClient.HttpClient.Service, never, // SupportedErrors | FetchError | ResError,
|
|
12
|
+
M>;
|
|
13
|
+
export declare function clientFor2<M extends Requests>(models: M): Client<Omit<M, "meta">>;
|
|
14
|
+
export type ExtractResponse<T> = T extends Schema<any, any, any> ? Schema.Type<T> : T extends unknown ? void : never;
|
|
15
|
+
export type ExtractEResponse<T> = T extends Schema<any, any, any> ? Schema.Encoded<T> : T extends unknown ? void : never;
|
|
16
|
+
type IsEmpty<T> = keyof T extends never ? true : false;
|
|
17
|
+
type Cruft = "_tag" | Request.RequestTypeId | typeof Serializable.symbol | typeof Serializable.symbolResult;
|
|
18
|
+
type RequestHandlers<R, E, M extends Requests> = {
|
|
19
|
+
[K in keyof M]: IsEmpty<Omit<S.Schema.Type<M[K]>, Cruft>> extends true ? {
|
|
20
|
+
handler: Effect<FetchResponse<Schema.Type<M[K]["success"]>>, Schema.Type<M[K]["failure"]> | E, R>;
|
|
21
|
+
Request: M[K];
|
|
22
|
+
Reponse: Schema.Type<M[K]["success"]>;
|
|
23
|
+
mapPath: string;
|
|
24
|
+
name: string;
|
|
25
|
+
} : {
|
|
26
|
+
handler: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => Effect<FetchResponse<Schema.Type<M[K]["success"]>>, Schema.Type<M[K]["failure"]> | E, R>;
|
|
27
|
+
Request: M[K];
|
|
28
|
+
Reponse: Schema.Type<M[K]["success"]>;
|
|
29
|
+
mapPath: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => string;
|
|
30
|
+
name: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
type RequestHandlersE<R, E, M extends Requests> = {
|
|
34
|
+
[K in keyof M & string as `${K}E`]: IsEmpty<Omit<S.Schema.Type<M[K]>, Cruft>> extends true ? {
|
|
35
|
+
handler: Effect<FetchResponse<Schema.Encoded<M[K]["success"]>>, Schema.Type<M[K]["failure"]> | E, R>;
|
|
36
|
+
Request: M[K];
|
|
37
|
+
Reponse: Schema.Type<M[K]["success"]>;
|
|
38
|
+
mapPath: string;
|
|
39
|
+
name: string;
|
|
40
|
+
} : {
|
|
41
|
+
handler: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => Effect<FetchResponse<Schema.Encoded<M[K]["success"]>>, Schema.Type<M[K]["failure"]> | E, R>;
|
|
42
|
+
Request: M[K];
|
|
43
|
+
Reponse: Schema.Type<M[K]["success"]>;
|
|
44
|
+
mapPath: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => string;
|
|
45
|
+
name: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=clientFor2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientFor2.d.ts","sourceRoot":"","sources":["../../src/client/clientFor2.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAmD,MAAM,kBAAkB,CAAA;AAI1F,OAAO,KAAK,KAAK,YAAY,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAuC,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAqB,MAAM,iBAAiB,CAAA;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAG9C,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAenC,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,QAAQ,IACjC,eAAe,CACf,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,EACzC,KAAK,EAAE,2CAA2C;AAClD,CAAC,CACF,GACC,gBAAgB,CAChB,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,EACzC,KAAK,EAAE,2CAA2C;AAClD,CAAC,CACF,CAAA;AAEH,wBAAgB,UAAU,CAAC,CAAC,SAAS,QAAQ,EAC3C,MAAM,EAAE,CAAC,GACR,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAQzB;AAyND,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAC7E,CAAC,SAAS,OAAO,GAAG,IAAI,GACxB,KAAK,CAAA;AAET,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GACjF,CAAC,SAAS,OAAO,GAAG,IAAI,GACxB,KAAK,CAAA;AAET,KAAK,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,KAAK,GAAG,IAAI,GAC1C,KAAK,CAAA;AAET,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,YAAY,CAAC,MAAM,GAAG,OAAO,YAAY,CAAC,YAAY,CAAA;AAG3G,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,QAAQ,IAAI;KAC9C,CAAC,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,IAAI,GAAG;QACrE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACjG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACrC,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;KACb,GACC;QACA,OAAO,EAAE,CACP,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAClC,MAAM,CACT,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAChC,CAAC,CACF,CAAA;QACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACrC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,MAAM,CAAA;QAC1D,IAAI,EAAE,MAAM,CAAA;KACb;CACJ,CAAA;AAED,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,QAAQ,IAAI;KAC/C,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,IAAI,GAAG;QACzF,OAAO,EAAE,MAAM,CACb,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAChC,CAAC,CACF,CAAA;QACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACrC,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,CAAA;KACb,GACC;QACA,OAAO,EAAE,CACP,GAAG,EAAE,IAAI,CACP,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,KAAK,CACN,KACE,MAAM,CACT,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAChC,CAAC,CACF,CAAA;QACD,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACb,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACrC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,MAAM,CAAA;QAC1D,IAAI,EAAE,MAAM,CAAA;KACb;CACJ,CAAA"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
import { Effect, flow, HashMap, Layer, Option, Predicate, Struct } from "@effect-app/core";
|
|
4
|
+
import { RpcResolver } from "@effect/rpc";
|
|
5
|
+
import { HttpRpcResolver } from "@effect/rpc-http";
|
|
6
|
+
import { S } from "effect-app";
|
|
7
|
+
import { ApiConfig, makePathWithBody, makePathWithQuery } from "effect-app/client";
|
|
8
|
+
import { HttpClient, HttpClientRequest } from "effect-app/http";
|
|
9
|
+
import { typedKeysOf } from "effect-app/utils";
|
|
10
|
+
import { Path } from "path-parser";
|
|
11
|
+
const cache = new Map();
|
|
12
|
+
const apiClient = Effect.gen(function* () {
|
|
13
|
+
const client = yield* HttpClient.HttpClient;
|
|
14
|
+
const config = yield* ApiConfig.Tag;
|
|
15
|
+
return client.pipe(HttpClient.mapRequest(HttpClientRequest.prependUrl(config.apiUrl + "/rpc")), HttpClient.mapRequest(HttpClientRequest.setHeaders(config.headers.pipe(Option.getOrElse(() => HashMap.empty())))));
|
|
16
|
+
});
|
|
17
|
+
export function clientFor2(models) {
|
|
18
|
+
const found = cache.get(models);
|
|
19
|
+
if (found) {
|
|
20
|
+
return found;
|
|
21
|
+
}
|
|
22
|
+
const m = clientFor_(models);
|
|
23
|
+
cache.set(models, m);
|
|
24
|
+
return m;
|
|
25
|
+
}
|
|
26
|
+
function clientFor_(models, layers = Layer.empty) {
|
|
27
|
+
const filtered = typedKeysOf(models).reduce((acc, cur) => {
|
|
28
|
+
if (Predicate.isObject(models[cur])
|
|
29
|
+
&& (models[cur].success)) {
|
|
30
|
+
acc[cur] = models[cur];
|
|
31
|
+
}
|
|
32
|
+
return acc;
|
|
33
|
+
}, {});
|
|
34
|
+
const meta = models.meta;
|
|
35
|
+
if (!meta)
|
|
36
|
+
throw new Error("No meta defined in Resource!");
|
|
37
|
+
const resolver = flow((HttpRpcResolver.make), (_) => RpcResolver.toClient(_));
|
|
38
|
+
const baseClient = apiClient.pipe(Effect.andThen(HttpClient.mapRequest(HttpClientRequest.appendUrl("/" + meta.moduleName))));
|
|
39
|
+
return (typedKeysOf(filtered)
|
|
40
|
+
.reduce((prev, cur) => {
|
|
41
|
+
const h = filtered[cur];
|
|
42
|
+
const Request = h;
|
|
43
|
+
const Response = h.success;
|
|
44
|
+
const encodeRequest = S.encodeSync(Request);
|
|
45
|
+
const requestName = `${meta.moduleName}.${cur}`
|
|
46
|
+
.replaceAll(".js", "");
|
|
47
|
+
const requestMeta = {
|
|
48
|
+
method: "POST", // TODO
|
|
49
|
+
Request,
|
|
50
|
+
Response,
|
|
51
|
+
mapPath: requestName,
|
|
52
|
+
name: requestName
|
|
53
|
+
};
|
|
54
|
+
const client = baseClient.pipe(Effect.andThen(HttpClient.mapRequest(HttpClientRequest.appendUrlParam("action", cur))), Effect.andThen(resolver));
|
|
55
|
+
const fields = Struct.omit(Request.fields, "_tag");
|
|
56
|
+
const p = requestName;
|
|
57
|
+
const path = new Path(p); // TODO
|
|
58
|
+
// @ts-expect-error doc
|
|
59
|
+
prev[cur] = requestMeta.method === "GET"
|
|
60
|
+
? Object.keys(fields).length === 0
|
|
61
|
+
? {
|
|
62
|
+
handler: client
|
|
63
|
+
.pipe(Effect.andThen((cl) => cl(new Request())), Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
64
|
+
Effect
|
|
65
|
+
.withSpan("client.request " + requestName, {
|
|
66
|
+
captureStackTrace: false,
|
|
67
|
+
attributes: { "request.name": requestName }
|
|
68
|
+
}), Effect.provide(layers)),
|
|
69
|
+
...requestMeta
|
|
70
|
+
}
|
|
71
|
+
: {
|
|
72
|
+
handler: (req) => client
|
|
73
|
+
.pipe(Effect.andThen((cl) => cl(new Request(req))), Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
74
|
+
Effect
|
|
75
|
+
.withSpan("client.request " + requestName, {
|
|
76
|
+
captureStackTrace: false,
|
|
77
|
+
attributes: { "request.name": requestName }
|
|
78
|
+
}), Effect.provide(layers)),
|
|
79
|
+
...requestMeta,
|
|
80
|
+
mapPath: (req) => req ? makePathWithQuery(path, encodeRequest(req)) : p
|
|
81
|
+
}
|
|
82
|
+
: Object.keys(fields).length === 0
|
|
83
|
+
? {
|
|
84
|
+
handler: client
|
|
85
|
+
.pipe(Effect.andThen((cl) => cl(new Request())), Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
86
|
+
Effect.withSpan("client.request " + requestName, {
|
|
87
|
+
captureStackTrace: false,
|
|
88
|
+
attributes: { "request.name": requestName }
|
|
89
|
+
}), Effect.provide(layers)),
|
|
90
|
+
...requestMeta
|
|
91
|
+
}
|
|
92
|
+
: {
|
|
93
|
+
handler: (req) => client
|
|
94
|
+
.pipe(Effect.andThen((cl) => cl(new Request(req))), Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
95
|
+
Effect.withSpan("client.request " + requestName, {
|
|
96
|
+
captureStackTrace: false,
|
|
97
|
+
attributes: { "request.name": requestName }
|
|
98
|
+
}), Effect.provide(layers)),
|
|
99
|
+
...requestMeta,
|
|
100
|
+
mapPath: (req) => req
|
|
101
|
+
? requestMeta.method === "DELETE"
|
|
102
|
+
? makePathWithQuery(path, encodeRequest(req))
|
|
103
|
+
: makePathWithBody(path, encodeRequest(req))
|
|
104
|
+
: p
|
|
105
|
+
};
|
|
106
|
+
// generate handler
|
|
107
|
+
// @ts-expect-error doc
|
|
108
|
+
prev[`${cur}E`] = requestMeta.method === "GET"
|
|
109
|
+
? Object.keys(fields).length === 0
|
|
110
|
+
? {
|
|
111
|
+
handler: client
|
|
112
|
+
.pipe(Effect.andThen((cl) => cl(new Request())), Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
113
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
114
|
+
Effect
|
|
115
|
+
.withSpan("client.request " + requestName, {
|
|
116
|
+
captureStackTrace: false,
|
|
117
|
+
attributes: { "request.name": requestName }
|
|
118
|
+
}), Effect.provide(layers)),
|
|
119
|
+
...requestMeta
|
|
120
|
+
}
|
|
121
|
+
: {
|
|
122
|
+
handler: (req) => client
|
|
123
|
+
.pipe(Effect.andThen((cl) => cl(new Request(req))), Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
124
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
125
|
+
Effect
|
|
126
|
+
.withSpan("client.request " + requestName, {
|
|
127
|
+
captureStackTrace: false,
|
|
128
|
+
attributes: { "request.name": requestName }
|
|
129
|
+
}), Effect.provide(layers)),
|
|
130
|
+
...requestMeta,
|
|
131
|
+
mapPath: (req) => req ? makePathWithQuery(path, encodeRequest(req)) : p
|
|
132
|
+
}
|
|
133
|
+
: Object.keys(fields).length === 0
|
|
134
|
+
? {
|
|
135
|
+
handler: client
|
|
136
|
+
.pipe(Effect.andThen((cl) => cl(new Request())), Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
137
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
138
|
+
Effect.withSpan("client.request " + requestName, {
|
|
139
|
+
captureStackTrace: false,
|
|
140
|
+
attributes: { "request.name": requestName }
|
|
141
|
+
}), Effect.provide(layers)),
|
|
142
|
+
...requestMeta
|
|
143
|
+
}
|
|
144
|
+
: {
|
|
145
|
+
handler: (req) => client
|
|
146
|
+
.pipe(Effect.andThen((cl) => cl(new Request(req))), Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
147
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
148
|
+
Effect.withSpan("client.request " + requestName, {
|
|
149
|
+
captureStackTrace: false,
|
|
150
|
+
attributes: { "request.name": requestName }
|
|
151
|
+
}), Effect.provide(layers)),
|
|
152
|
+
...requestMeta,
|
|
153
|
+
mapPath: (req) => req
|
|
154
|
+
? requestMeta.method === "DELETE"
|
|
155
|
+
? makePathWithQuery(path, encodeRequest(req))
|
|
156
|
+
: makePathWithBody(path, encodeRequest(req))
|
|
157
|
+
: p
|
|
158
|
+
};
|
|
159
|
+
// generate handler
|
|
160
|
+
return prev;
|
|
161
|
+
}, {}));
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50Rm9yMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvY2xpZW50Rm9yMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUMxRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUdsRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFJbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUE7QUFFekMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDcEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFBO0lBQ25DLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUMzRSxV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
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
+
"@effect/rpc": "^0.40.2",
|
|
8
|
+
"@effect/rpc-http": "^0.38.3",
|
|
7
9
|
"@tsconfig/strictest": "^2.0.5",
|
|
8
10
|
"date-fns": "^4.1.0",
|
|
9
11
|
"nanoid": "^5.0.7",
|
|
@@ -149,6 +151,16 @@
|
|
|
149
151
|
"default": "./_cjs/client/clientFor.cjs"
|
|
150
152
|
}
|
|
151
153
|
},
|
|
154
|
+
"./client/clientFor2": {
|
|
155
|
+
"import": {
|
|
156
|
+
"types": "./dist/client/clientFor2.d.ts",
|
|
157
|
+
"default": "./dist/client/clientFor2.js"
|
|
158
|
+
},
|
|
159
|
+
"require": {
|
|
160
|
+
"types": "./dist/client/clientFor2.d.ts",
|
|
161
|
+
"default": "./_cjs/client/clientFor2.cjs"
|
|
162
|
+
}
|
|
163
|
+
},
|
|
152
164
|
"./client/config": {
|
|
153
165
|
"import": {
|
|
154
166
|
"types": "./dist/client/config.d.ts",
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
|
|
4
|
+
import { Effect, flow, HashMap, Layer, Option, Predicate, Struct } from "@effect-app/core"
|
|
5
|
+
import { RpcResolver } from "@effect/rpc"
|
|
6
|
+
import { HttpRpcResolver } from "@effect/rpc-http"
|
|
7
|
+
import type { RpcRouter } from "@effect/rpc/RpcRouter"
|
|
8
|
+
import type * as Serializable from "@effect/schema/Serializable"
|
|
9
|
+
import { S } from "effect-app"
|
|
10
|
+
import type { FetchResponse } from "effect-app/client"
|
|
11
|
+
import { ApiConfig, makePathWithBody, makePathWithQuery } from "effect-app/client"
|
|
12
|
+
import { HttpClient, HttpClientRequest } from "effect-app/http"
|
|
13
|
+
import type { Schema } from "effect-app/schema"
|
|
14
|
+
import { typedKeysOf } from "effect-app/utils"
|
|
15
|
+
import type * as Request from "effect/Request"
|
|
16
|
+
import { Path } from "path-parser"
|
|
17
|
+
|
|
18
|
+
type Requests = Record<string, any>
|
|
19
|
+
|
|
20
|
+
const cache = new Map<any, Client<any>>()
|
|
21
|
+
|
|
22
|
+
const apiClient = Effect.gen(function*() {
|
|
23
|
+
const client = yield* HttpClient.HttpClient
|
|
24
|
+
const config = yield* ApiConfig.Tag
|
|
25
|
+
return client.pipe(
|
|
26
|
+
HttpClient.mapRequest(HttpClientRequest.prependUrl(config.apiUrl + "/rpc")),
|
|
27
|
+
HttpClient.mapRequest(
|
|
28
|
+
HttpClientRequest.setHeaders(config.headers.pipe(Option.getOrElse(() => HashMap.empty())))
|
|
29
|
+
)
|
|
30
|
+
)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export type Client<M extends Requests> =
|
|
34
|
+
& RequestHandlers<
|
|
35
|
+
ApiConfig | HttpClient.HttpClient.Service,
|
|
36
|
+
never, // SupportedErrors | FetchError | ResError,
|
|
37
|
+
M
|
|
38
|
+
>
|
|
39
|
+
& RequestHandlersE<
|
|
40
|
+
ApiConfig | HttpClient.HttpClient.Service,
|
|
41
|
+
never, // SupportedErrors | FetchError | ResError,
|
|
42
|
+
M
|
|
43
|
+
>
|
|
44
|
+
|
|
45
|
+
export function clientFor2<M extends Requests>(
|
|
46
|
+
models: M
|
|
47
|
+
): Client<Omit<M, "meta">> {
|
|
48
|
+
const found = cache.get(models)
|
|
49
|
+
if (found) {
|
|
50
|
+
return found
|
|
51
|
+
}
|
|
52
|
+
const m = clientFor_(models)
|
|
53
|
+
cache.set(models, m)
|
|
54
|
+
return m
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type Req = S.Schema.All & {
|
|
58
|
+
new(...args: any[]): any
|
|
59
|
+
_tag: string
|
|
60
|
+
fields: S.Struct.Fields
|
|
61
|
+
success: S.Schema.Any
|
|
62
|
+
failure: S.Schema.Any
|
|
63
|
+
config?: Record<string, any>
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function clientFor_<M extends Requests>(models: M, layers = Layer.empty) {
|
|
67
|
+
type Filtered = {
|
|
68
|
+
[K in keyof Requests as Requests[K] extends Req ? K : never]: Requests[K] extends Req ? Requests[K] : never
|
|
69
|
+
}
|
|
70
|
+
const filtered = typedKeysOf(models).reduce((acc, cur) => {
|
|
71
|
+
if (
|
|
72
|
+
Predicate.isObject(models[cur])
|
|
73
|
+
&& (models[cur].success)
|
|
74
|
+
) {
|
|
75
|
+
acc[cur as keyof Filtered] = models[cur]
|
|
76
|
+
}
|
|
77
|
+
return acc
|
|
78
|
+
}, {} as Record<keyof Filtered, Req>)
|
|
79
|
+
|
|
80
|
+
const meta = (models as any).meta as { moduleName: string }
|
|
81
|
+
if (!meta) throw new Error("No meta defined in Resource!")
|
|
82
|
+
|
|
83
|
+
const resolver = flow(
|
|
84
|
+
HttpRpcResolver.make<RpcRouter<any, any>>,
|
|
85
|
+
(_) => RpcResolver.toClient(_ as any)
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
const baseClient = apiClient.pipe(
|
|
89
|
+
Effect.andThen(HttpClient.mapRequest(HttpClientRequest.appendUrl("/" + meta.moduleName)))
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
return (typedKeysOf(filtered)
|
|
93
|
+
.reduce((prev, cur) => {
|
|
94
|
+
const h = filtered[cur]!
|
|
95
|
+
|
|
96
|
+
const Request = h
|
|
97
|
+
const Response = h.success
|
|
98
|
+
|
|
99
|
+
const encodeRequest = S.encodeSync(
|
|
100
|
+
Request as unknown as S.Schema<any, any>
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
const requestName = `${meta.moduleName}.${cur as string}`
|
|
104
|
+
.replaceAll(".js", "")
|
|
105
|
+
|
|
106
|
+
const requestMeta = {
|
|
107
|
+
method: "POST", // TODO
|
|
108
|
+
Request,
|
|
109
|
+
Response,
|
|
110
|
+
mapPath: requestName,
|
|
111
|
+
name: requestName
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const client = baseClient.pipe(
|
|
115
|
+
Effect.andThen(HttpClient.mapRequest(HttpClientRequest.appendUrlParam("action", cur as string))),
|
|
116
|
+
Effect.andThen(resolver)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
const fields = Struct.omit(Request.fields, "_tag")
|
|
120
|
+
const p = requestName
|
|
121
|
+
const path = new Path(p) // TODO
|
|
122
|
+
// @ts-expect-error doc
|
|
123
|
+
prev[cur] = requestMeta.method === "GET"
|
|
124
|
+
? Object.keys(fields).length === 0
|
|
125
|
+
? {
|
|
126
|
+
handler: client
|
|
127
|
+
.pipe(
|
|
128
|
+
Effect.andThen((cl) => cl(new Request())),
|
|
129
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
130
|
+
Effect
|
|
131
|
+
.withSpan("client.request " + requestName, {
|
|
132
|
+
captureStackTrace: false,
|
|
133
|
+
attributes: { "request.name": requestName }
|
|
134
|
+
}),
|
|
135
|
+
Effect.provide(layers)
|
|
136
|
+
),
|
|
137
|
+
...requestMeta
|
|
138
|
+
}
|
|
139
|
+
: {
|
|
140
|
+
handler: (req: any) =>
|
|
141
|
+
client
|
|
142
|
+
.pipe(
|
|
143
|
+
Effect.andThen((cl) => cl(new Request(req))),
|
|
144
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
145
|
+
Effect
|
|
146
|
+
.withSpan("client.request " + requestName, {
|
|
147
|
+
captureStackTrace: false,
|
|
148
|
+
attributes: { "request.name": requestName }
|
|
149
|
+
}),
|
|
150
|
+
Effect.provide(layers)
|
|
151
|
+
),
|
|
152
|
+
...requestMeta,
|
|
153
|
+
mapPath: (req: any) => req ? makePathWithQuery(path, encodeRequest(req)) : p
|
|
154
|
+
}
|
|
155
|
+
: Object.keys(fields).length === 0
|
|
156
|
+
? {
|
|
157
|
+
handler: client
|
|
158
|
+
.pipe(
|
|
159
|
+
Effect.andThen((cl) => cl(new Request())),
|
|
160
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
161
|
+
Effect.withSpan("client.request " + requestName, {
|
|
162
|
+
captureStackTrace: false,
|
|
163
|
+
attributes: { "request.name": requestName }
|
|
164
|
+
}),
|
|
165
|
+
Effect.provide(layers)
|
|
166
|
+
),
|
|
167
|
+
...requestMeta
|
|
168
|
+
}
|
|
169
|
+
: {
|
|
170
|
+
handler: (req: any) =>
|
|
171
|
+
client
|
|
172
|
+
.pipe(
|
|
173
|
+
Effect.andThen((cl) => cl(new Request(req))),
|
|
174
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO
|
|
175
|
+
Effect.withSpan("client.request " + requestName, {
|
|
176
|
+
captureStackTrace: false,
|
|
177
|
+
attributes: { "request.name": requestName }
|
|
178
|
+
}),
|
|
179
|
+
Effect.provide(layers)
|
|
180
|
+
),
|
|
181
|
+
|
|
182
|
+
...requestMeta,
|
|
183
|
+
mapPath: (req: any) =>
|
|
184
|
+
req
|
|
185
|
+
? requestMeta.method === "DELETE"
|
|
186
|
+
? makePathWithQuery(path, encodeRequest(req))
|
|
187
|
+
: makePathWithBody(path, encodeRequest(req))
|
|
188
|
+
: p
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// generate handler
|
|
192
|
+
|
|
193
|
+
// @ts-expect-error doc
|
|
194
|
+
prev[`${cur}E`] = requestMeta.method === "GET"
|
|
195
|
+
? Object.keys(fields).length === 0
|
|
196
|
+
? {
|
|
197
|
+
handler: client
|
|
198
|
+
.pipe(
|
|
199
|
+
Effect.andThen((cl) => cl(new Request())),
|
|
200
|
+
Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
201
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
202
|
+
Effect
|
|
203
|
+
.withSpan("client.request " + requestName, {
|
|
204
|
+
captureStackTrace: false,
|
|
205
|
+
attributes: { "request.name": requestName }
|
|
206
|
+
}),
|
|
207
|
+
Effect.provide(layers)
|
|
208
|
+
),
|
|
209
|
+
...requestMeta
|
|
210
|
+
}
|
|
211
|
+
: {
|
|
212
|
+
handler: (req: any) =>
|
|
213
|
+
client
|
|
214
|
+
.pipe(
|
|
215
|
+
Effect.andThen((cl) => cl(new Request(req))),
|
|
216
|
+
Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
217
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
218
|
+
Effect
|
|
219
|
+
.withSpan("client.request " + requestName, {
|
|
220
|
+
captureStackTrace: false,
|
|
221
|
+
attributes: { "request.name": requestName }
|
|
222
|
+
}),
|
|
223
|
+
Effect.provide(layers)
|
|
224
|
+
),
|
|
225
|
+
|
|
226
|
+
...requestMeta,
|
|
227
|
+
mapPath: (req: any) => req ? makePathWithQuery(path, encodeRequest(req)) : p
|
|
228
|
+
}
|
|
229
|
+
: Object.keys(fields).length === 0
|
|
230
|
+
? {
|
|
231
|
+
handler: client
|
|
232
|
+
.pipe(
|
|
233
|
+
Effect.andThen((cl) => cl(new Request())),
|
|
234
|
+
Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
235
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
236
|
+
Effect.withSpan("client.request " + requestName, {
|
|
237
|
+
captureStackTrace: false,
|
|
238
|
+
attributes: { "request.name": requestName }
|
|
239
|
+
}),
|
|
240
|
+
Effect.provide(layers)
|
|
241
|
+
),
|
|
242
|
+
...requestMeta
|
|
243
|
+
}
|
|
244
|
+
: {
|
|
245
|
+
handler: (req: any) =>
|
|
246
|
+
client
|
|
247
|
+
.pipe(
|
|
248
|
+
Effect.andThen((cl) => cl(new Request(req))),
|
|
249
|
+
Effect.flatMap((res) => S.encode(Response)(res)), // TODO
|
|
250
|
+
Effect.map((_) => ({ body: _, status: 200, headers: {} })), // TODO,
|
|
251
|
+
Effect.withSpan("client.request " + requestName, {
|
|
252
|
+
captureStackTrace: false,
|
|
253
|
+
attributes: { "request.name": requestName }
|
|
254
|
+
}),
|
|
255
|
+
Effect.provide(layers)
|
|
256
|
+
),
|
|
257
|
+
|
|
258
|
+
...requestMeta,
|
|
259
|
+
mapPath: (req: any) =>
|
|
260
|
+
req
|
|
261
|
+
? requestMeta.method === "DELETE"
|
|
262
|
+
? makePathWithQuery(path, encodeRequest(req))
|
|
263
|
+
: makePathWithBody(path, encodeRequest(req))
|
|
264
|
+
: p
|
|
265
|
+
}
|
|
266
|
+
// generate handler
|
|
267
|
+
|
|
268
|
+
return prev
|
|
269
|
+
}, {} as Client<M>))
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export type ExtractResponse<T> = T extends Schema<any, any, any> ? Schema.Type<T>
|
|
273
|
+
: T extends unknown ? void
|
|
274
|
+
: never
|
|
275
|
+
|
|
276
|
+
export type ExtractEResponse<T> = T extends Schema<any, any, any> ? Schema.Encoded<T>
|
|
277
|
+
: T extends unknown ? void
|
|
278
|
+
: never
|
|
279
|
+
|
|
280
|
+
type IsEmpty<T> = keyof T extends never ? true
|
|
281
|
+
: false
|
|
282
|
+
|
|
283
|
+
type Cruft = "_tag" | Request.RequestTypeId | typeof Serializable.symbol | typeof Serializable.symbolResult
|
|
284
|
+
|
|
285
|
+
// TODO: refactor to new Request pattern, then filter out non-requests similar to the runtime changes in clientFor, and matchFor (boilerplate)
|
|
286
|
+
type RequestHandlers<R, E, M extends Requests> = {
|
|
287
|
+
[K in keyof M]: IsEmpty<Omit<S.Schema.Type<M[K]>, Cruft>> extends true ? {
|
|
288
|
+
handler: Effect<FetchResponse<Schema.Type<M[K]["success"]>>, Schema.Type<M[K]["failure"]> | E, R>
|
|
289
|
+
Request: M[K]
|
|
290
|
+
Reponse: Schema.Type<M[K]["success"]>
|
|
291
|
+
mapPath: string
|
|
292
|
+
name: string
|
|
293
|
+
}
|
|
294
|
+
: {
|
|
295
|
+
handler: (
|
|
296
|
+
req: Omit<S.Schema.Type<M[K]>, Cruft>
|
|
297
|
+
) => Effect<
|
|
298
|
+
FetchResponse<Schema.Type<M[K]["success"]>>,
|
|
299
|
+
Schema.Type<M[K]["failure"]> | E,
|
|
300
|
+
R
|
|
301
|
+
>
|
|
302
|
+
Request: M[K]
|
|
303
|
+
Reponse: Schema.Type<M[K]["success"]>
|
|
304
|
+
mapPath: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => string
|
|
305
|
+
name: string
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
type RequestHandlersE<R, E, M extends Requests> = {
|
|
310
|
+
[K in keyof M & string as `${K}E`]: IsEmpty<Omit<S.Schema.Type<M[K]>, Cruft>> extends true ? {
|
|
311
|
+
handler: Effect<
|
|
312
|
+
FetchResponse<Schema.Encoded<M[K]["success"]>>,
|
|
313
|
+
Schema.Type<M[K]["failure"]> | E,
|
|
314
|
+
R
|
|
315
|
+
>
|
|
316
|
+
Request: M[K]
|
|
317
|
+
Reponse: Schema.Type<M[K]["success"]>
|
|
318
|
+
mapPath: string
|
|
319
|
+
name: string
|
|
320
|
+
}
|
|
321
|
+
: {
|
|
322
|
+
handler: (
|
|
323
|
+
req: Omit<
|
|
324
|
+
S.Schema.Type<M[K]>,
|
|
325
|
+
Cruft
|
|
326
|
+
>
|
|
327
|
+
) => Effect<
|
|
328
|
+
FetchResponse<Schema.Encoded<M[K]["success"]>>,
|
|
329
|
+
Schema.Type<M[K]["failure"]> | E,
|
|
330
|
+
R
|
|
331
|
+
>
|
|
332
|
+
Request: M[K]
|
|
333
|
+
Reponse: Schema.Type<M[K]["success"]>
|
|
334
|
+
mapPath: (req: Omit<S.Schema.Type<M[K]>, Cruft>) => string
|
|
335
|
+
name: string
|
|
336
|
+
}
|
|
337
|
+
}
|
package/tsconfig.src.json
CHANGED