@effect-app/infra 1.41.6 → 1.42.1

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 1.42.1
4
+
5
+ ### Patch Changes
6
+
7
+ - remove legacy from r3
8
+
9
+ ## 1.42.0
10
+
11
+ ### Minor Changes
12
+
13
+ - ae059ac: add routing3
14
+
3
15
  ## 1.41.6
4
16
 
5
17
  ### Patch Changes
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toHttpApp = exports.makeRouter = exports.RouterSymbol = void 0;
7
+ var _utils = require("@effect-app/core/utils");
8
+ var _rpc = require("@effect/rpc");
9
+ var _schema = require("@effect/schema");
10
+ var _effectApp = require("effect-app");
11
+ var _http = require("effect-app/http");
12
+ var _errorReporter = require("../errorReporter.cjs");
13
+ var _logger = require("../logger.cjs");
14
+ var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
15
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
16
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+ /*
19
+ TODO: Effect.retry(r2, optimisticConcurrencySchedule) / was for PATCH only
20
+ TODO: uninteruptible commands! was for All except GET.
21
+ */
22
+
23
+ const logRequestError = (0, _errorReporter.logError)("Request");
24
+ const reportRequestError = (0, _errorReporter.reportError)("Request");
25
+ /**
26
+ * Plain jane JSON version
27
+ * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
28
+ */
29
+ const toHttpApp = (self, options) => {
30
+ const handler = _rpc.RpcRouter.toHandler(self, options);
31
+ return _effectApp.Effect.withFiberRuntime(fiber => {
32
+ const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
33
+ const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
34
+ return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
35
+ let status = 200;
36
+ for (const r of _.flat()) {
37
+ if (typeof r === "number") continue;
38
+ const results = Array.isArray(r) ? r : [r];
39
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
40
+ status = 500;
41
+ break;
42
+ }
43
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
44
+ status = 422; // 418
45
+ break;
46
+ }
47
+ }
48
+ return _http.HttpServerResponse.json(_, {
49
+ status
50
+ });
51
+ }), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
52
+ });
53
+ };
54
+ exports.toHttpApp = toHttpApp;
55
+ const RouterSymbol = exports.RouterSymbol = Symbol();
56
+ const makeRouter = (middleware, devMode) => {
57
+ const rpc = (0, _DynamicMiddleware.makeRpc)(middleware);
58
+ function matchFor(rsc) {
59
+ const meta = rsc.meta;
60
+ const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
61
+ if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
62
+ acc[cur] = rsc[cur];
63
+ }
64
+ return acc;
65
+ }, {});
66
+ const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
67
+ ;
68
+ prev[cur] = Object.assign(fnOrEffect => {
69
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
70
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
71
+ static stack = stack;
72
+ static _tag = "d";
73
+ static handler = () => fnOrEffect;
74
+ } : class {
75
+ static stack = stack;
76
+ static _tag = "d";
77
+ static handler = fnOrEffect;
78
+ };
79
+ }, {
80
+ success: rsc[cur].success,
81
+ failure: rsc[cur].failure
82
+ }) // "Raw" variations are for when you don't want to decode just to encode it again on the response
83
+ ;
84
+ prev[cur + "Raw"] = Object.assign(fnOrEffect => {
85
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
86
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
87
+ static stack = stack;
88
+ static _tag = "raw";
89
+ static handler = () => fnOrEffect;
90
+ } : class {
91
+ static stack = stack;
92
+ static _tag = "raw";
93
+ static handler = (req, ctx) => fnOrEffect(req, {
94
+ ...ctx,
95
+ Response: rsc[cur].success
96
+ });
97
+ };
98
+ }, {
99
+ success: _effectApp.S.encodedSchema(rsc[cur].success),
100
+ failure: rsc[cur].failure
101
+ });
102
+ return prev;
103
+ }, {});
104
+ const controllers = (controllers, layers) => {
105
+ const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
106
+ const handler = controllers[cur];
107
+ const req = rsc[cur];
108
+ acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
109
+ static success = _effectApp.S.encodedSchema(req.success);
110
+ get [_schema.Serializable.symbol]() {
111
+ return this.constructor;
112
+ }
113
+ get [_schema.Serializable.symbolResult]() {
114
+ return {
115
+ failure: req.failure,
116
+ success: _effectApp.S.encodedSchema(req.success)
117
+ };
118
+ }
119
+ } : req, req => _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
120
+ prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
121
+ return prev;
122
+ }, {})).pipe(
123
+ // can't use andThen due to some being a function and effect
124
+ _effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
125
+ action: `${meta.moduleName}.${req._tag}`
126
+ }), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
127
+ return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
128
+ action: `${meta.moduleName}.${req._tag}`,
129
+ req: (0, _utils.pretty)(req),
130
+ headers: (0, _utils.pretty)(headers)
131
+ // resHeaders: pretty(
132
+ // Object
133
+ // .entries(headers)
134
+ // .reduce((prev, [key, value]) => {
135
+ // prev[key] = value && typeof value === "string" ? snipString(value) : value
136
+ // return prev
137
+ // }, {} as Record<string, any>)
138
+ // )
139
+ }));
140
+ }))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
141
+ captureStackTrace: () => handler.stack
142
+ })), meta.moduleName); // TODO
143
+ return acc;
144
+ }, {});
145
+ const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
146
+ const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
147
+ const layer = r.use(router => _effectApp.Effect.gen(function* () {
148
+ const httpApp = toHttpApp(rpcRouter, {
149
+ spanPrefix: rsc.meta.moduleName + "."
150
+ });
151
+ const services = (yield* _effectApp.Effect.context()).pipe(_effectApp.Context.omit(_effectApp.Scope.Scope), _effectApp.Context.omit(_effectApp.Tracer.ParentSpan));
152
+ yield* router.all("/", httpApp.pipe(_http.HttpMiddleware.make(_effectApp.Effect.provide(services))),
153
+ // TODO: not queries.
154
+ {
155
+ uninterruptible: true
156
+ });
157
+ }));
158
+ const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers ? _effectApp.Layer.provide(layers) : _ => _);
159
+ // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
160
+ return {
161
+ moduleName: meta.moduleName,
162
+ Router: r,
163
+ routes
164
+ };
165
+ };
166
+ const effect = (layers, make) => {
167
+ const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
168
+ const layer = r.use(router => _effectApp.Effect.gen(function* () {
169
+ const controllers = yield* make(items);
170
+ // return make.pipe(Effect.map((c) => controllers(c, layers)))
171
+ const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
172
+ const handler = controllers[cur];
173
+ const req = rsc[cur];
174
+ acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
175
+ static success = _effectApp.S.encodedSchema(req.success);
176
+ get [_schema.Serializable.symbol]() {
177
+ return this.constructor;
178
+ }
179
+ get [_schema.Serializable.symbolResult]() {
180
+ return {
181
+ failure: req.failure,
182
+ success: _effectApp.S.encodedSchema(req.success)
183
+ };
184
+ }
185
+ } : req, req => _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
186
+ prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
187
+ return prev;
188
+ }, {})).pipe(
189
+ // can't use andThen due to some being a function and effect
190
+ _effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
191
+ action: `${meta.moduleName}.${req._tag}`
192
+ }), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
193
+ return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
194
+ action: `${meta.moduleName}.${req._tag}`,
195
+ req: (0, _utils.pretty)(req),
196
+ headers: (0, _utils.pretty)(headers)
197
+ // resHeaders: pretty(
198
+ // Object
199
+ // .entries(headers)
200
+ // .reduce((prev, [key, value]) => {
201
+ // prev[key] = value && typeof value === "string" ? snipString(value) : value
202
+ // return prev
203
+ // }, {} as Record<string, any>)
204
+ // )
205
+ }));
206
+ }))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
207
+ captureStackTrace: () => handler.stack
208
+ })), meta.moduleName); // TODO
209
+ return acc;
210
+ }, {});
211
+ const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
212
+ const httpApp = toHttpApp(rpcRouter, {
213
+ spanPrefix: rsc.meta.moduleName + "."
214
+ });
215
+ const services = (yield* _effectApp.Effect.context()).pipe(_effectApp.Context.omit(_effectApp.Scope.Scope), _effectApp.Context.omit(_effectApp.Tracer.ParentSpan));
216
+ yield* router.all("/", httpApp.pipe(_http.HttpMiddleware.make(_effectApp.Effect.provide(services))),
217
+ // TODO: not queries.
218
+ {
219
+ uninterruptible: true
220
+ });
221
+ }));
222
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
223
+ const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers ? _effectApp.Layer.provide(layers) : _ => _);
224
+ // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
225
+ return {
226
+ moduleName: meta.moduleName,
227
+ Router: r,
228
+ routes
229
+ };
230
+ };
231
+ const r = {
232
+ effect,
233
+ controllers
234
+ };
235
+ return r;
236
+ }
237
+ function matchAll(handlers, requestLayer) {
238
+ const routers = (0, _utils.typedValuesOf)(handlers);
239
+ const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
240
+ const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
241
+ for (const route of routers) {
242
+ yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
243
+ }
244
+ })).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
245
+ return {
246
+ layer: r,
247
+ Router: rootRouter
248
+ };
249
+ }
250
+ return {
251
+ matchAll,
252
+ matchFor
253
+ };
254
+ };
255
+ exports.makeRouter = makeRouter;
256
+ //# sourceMappingURL=routing2 copy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing2 copy.cjs","names":["_utils","require","_rpc","_schema","_effectApp","_http","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeRouter","middleware","devMode","rpc","makeRpc","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","failure","req","ctx","Response","S","encodedSchema","controllers","layers","mapped","effect","Serializable","symbol","constructor","symbolResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","moduleName","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","make","values","Router","HttpRouter","Tag","layer","use","router","gen","httpApp","spanPrefix","services","omit","Scope","Tracer","ParentSpan","HttpMiddleware","provide","uninterruptible","routes","Layer","provideMerge","Live","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing2 copy.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toHttpApp = exports.makeRouter = exports.RouterSymbol = void 0;
7
+ var _utils = require("@effect-app/core/utils");
8
+ var _rpc = require("@effect/rpc");
9
+ var _schema = require("@effect/schema");
10
+ var _effectApp = require("effect-app");
11
+ var _http = require("effect-app/http");
12
+ var _errorReporter = require("../errorReporter.cjs");
13
+ var _logger = require("../logger.cjs");
14
+ var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
15
+ /* eslint-disable @typescript-eslint/no-unsafe-argument */
16
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+ /*
19
+ TODO: Effect.retry(r2, optimisticConcurrencySchedule) / was for PATCH only
20
+ TODO: uninteruptible commands! was for All except GET.
21
+ */
22
+
23
+ const logRequestError = (0, _errorReporter.logError)("Request");
24
+ const reportRequestError = (0, _errorReporter.reportError)("Request");
25
+ /**
26
+ * Plain jane JSON version
27
+ * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
28
+ */
29
+ const toHttpApp = (self, options) => {
30
+ const handler = _rpc.RpcRouter.toHandler(self, options);
31
+ return _effectApp.Effect.withFiberRuntime(fiber => {
32
+ const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
33
+ const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
34
+ return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
35
+ let status = 200;
36
+ for (const r of _.flat()) {
37
+ if (typeof r === "number") continue;
38
+ const results = Array.isArray(r) ? r : [r];
39
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
40
+ status = 500;
41
+ break;
42
+ }
43
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
44
+ status = 422; // 418
45
+ break;
46
+ }
47
+ }
48
+ return _http.HttpServerResponse.json(_, {
49
+ status
50
+ });
51
+ }), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
52
+ });
53
+ };
54
+ exports.toHttpApp = toHttpApp;
55
+ const RouterSymbol = exports.RouterSymbol = Symbol();
56
+ const makeRouter = (middleware, devMode) => {
57
+ const rpc = (0, _DynamicMiddleware.makeRpc)(middleware);
58
+ function matchFor(rsc) {
59
+ const meta = rsc.meta;
60
+ const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
61
+ if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
62
+ acc[cur] = rsc[cur];
63
+ }
64
+ return acc;
65
+ }, {});
66
+ const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
67
+ ;
68
+ prev[cur] = Object.assign(fnOrEffect => {
69
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
70
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
71
+ static stack = stack;
72
+ static _tag = "d";
73
+ static handler = () => fnOrEffect;
74
+ } : class {
75
+ static stack = stack;
76
+ static _tag = "d";
77
+ static handler = fnOrEffect;
78
+ };
79
+ }, {
80
+ success: rsc[cur].success,
81
+ failure: rsc[cur].failure
82
+ }) // "Raw" variations are for when you don't want to decode just to encode it again on the response
83
+ ;
84
+ prev[cur + "Raw"] = Object.assign(fnOrEffect => {
85
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
86
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
87
+ static stack = stack;
88
+ static _tag = "raw";
89
+ static handler = () => fnOrEffect;
90
+ } : class {
91
+ static stack = stack;
92
+ static _tag = "raw";
93
+ static handler = (req, ctx) => fnOrEffect(req, {
94
+ ...ctx,
95
+ Response: rsc[cur].success
96
+ });
97
+ };
98
+ }, {
99
+ success: _effectApp.S.encodedSchema(rsc[cur].success),
100
+ failure: rsc[cur].failure
101
+ });
102
+ return prev;
103
+ }, {});
104
+ const effect = (layers, make) => {
105
+ const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
106
+ const layer = r.use(router => _effectApp.Effect.gen(function* () {
107
+ const controllers = yield* make(items);
108
+ // return make.pipe(Effect.map((c) => controllers(c, layers)))
109
+ const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
110
+ const handler = controllers[cur];
111
+ const req = rsc[cur];
112
+ acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
113
+ static success = _effectApp.S.encodedSchema(req.success);
114
+ get [_schema.Serializable.symbol]() {
115
+ return this.constructor;
116
+ }
117
+ get [_schema.Serializable.symbolResult]() {
118
+ return {
119
+ failure: req.failure,
120
+ success: _effectApp.S.encodedSchema(req.success)
121
+ };
122
+ }
123
+ } : req, req => _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
124
+ prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
125
+ return prev;
126
+ }, {})).pipe(
127
+ // can't use andThen due to some being a function and effect
128
+ _effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
129
+ action: `${meta.moduleName}.${req._tag}`
130
+ }), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
131
+ return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
132
+ action: `${meta.moduleName}.${req._tag}`,
133
+ req: (0, _utils.pretty)(req),
134
+ headers: (0, _utils.pretty)(headers)
135
+ // resHeaders: pretty(
136
+ // Object
137
+ // .entries(headers)
138
+ // .reduce((prev, [key, value]) => {
139
+ // prev[key] = value && typeof value === "string" ? snipString(value) : value
140
+ // return prev
141
+ // }, {} as Record<string, any>)
142
+ // )
143
+ }));
144
+ }))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
145
+ captureStackTrace: () => handler.stack
146
+ })), meta.moduleName); // TODO
147
+ return acc;
148
+ }, {});
149
+ const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
150
+ const httpApp = toHttpApp(rpcRouter, {
151
+ spanPrefix: rsc.meta.moduleName + "."
152
+ });
153
+ const services = (yield* _effectApp.Effect.context()).pipe(_effectApp.Context.omit(_effectApp.Scope.Scope), _effectApp.Context.omit(_effectApp.Tracer.ParentSpan));
154
+ yield* router.all("/", httpApp.pipe(_http.HttpMiddleware.make(_effectApp.Effect.provide(services))),
155
+ // TODO: not queries.
156
+ {
157
+ uninterruptible: true
158
+ });
159
+ }));
160
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
161
+ const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers ? _effectApp.Layer.provide(layers) : _ => _);
162
+ // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
163
+ return {
164
+ moduleName: meta.moduleName,
165
+ Router: r,
166
+ routes
167
+ };
168
+ };
169
+ return effect;
170
+ }
171
+ function matchAll(handlers, requestLayer) {
172
+ const routers = (0, _utils.typedValuesOf)(handlers);
173
+ const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
174
+ const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
175
+ for (const route of routers) {
176
+ yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
177
+ }
178
+ })).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
179
+ return {
180
+ layer: r,
181
+ Router: rootRouter
182
+ };
183
+ }
184
+ return {
185
+ matchAll,
186
+ matchFor
187
+ };
188
+ };
189
+ exports.makeRouter = makeRouter;
190
+ //# sourceMappingURL=routing3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing3.cjs","names":["_utils","require","_rpc","_schema","_effectApp","_http","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeRouter","middleware","devMode","rpc","makeRpc","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","failure","req","ctx","Response","S","encodedSchema","effect","layers","make","Router","HttpRouter","Tag","moduleName","layer","use","router","gen","controllers","mapped","Serializable","symbol","constructor","symbolResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","values","httpApp","spanPrefix","services","omit","Scope","Tracer","ParentSpan","HttpMiddleware","provide","uninterruptible","routes","Layer","provideMerge","Live","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing3.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAG9B,eAAO,MAAM,MAAM,yBAAwB,CAAA;AAC3C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;;;;;;uBAW5B,iBAAiB,iBAIzB,sBAAqB;;;uBAKV,iBACL,iBACP,sBAAsB;;;;;;2BAaN,iBAAiB;;;2BAcG,iBAAiB;;;;;;;;;;;;;;AA9CvD,qBAAa,oBAAqB,SAAQ,yBASxC;CAAG;;;;;;;uBADM,iBAAiB,iBAIzB,sBAAqB;;;uBAKV,iBACL,iBACP,sBAAsB;;;;;;;;;;;2BAaN,iBAAiB;;;2BAcG,iBAAiB;;;;;;;;;;;;;;;;AAnCvD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAgBlC;IAEA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAUhE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,eAAO,MAAM,cAAc,QAAS,cAAc;;;;;;;;;CAkBhD,CAAA;AAKF,yBAAiB,oBAAoB,CAAC;IACpC,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACnF"}
1
+ {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAG9B,eAAO,MAAM,MAAM,yBAAwB,CAAA;AAC3C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;;;;;;qBAW/B,EAAG,iBAAiB,eAI3B,EAAE,sBAAqB;;;qBAKb,EAAG,iBACL,eACP,EAAA,sBAAsB;;;;;;yBAaR,EAAE,iBAAiB;;;yBAcA,EAAG,iBAAiB;;;;;;;;;;;;;;AA9CvD,qBAAa,oBAAqB,SAAQ,yBASxC;CAAG;;;;;;;qBADG,EAAG,iBAAiB,eAI3B,EAAE,sBAAqB;;;qBAKb,EAAG,iBACL,eACP,EAAA,sBAAsB;;;;;;;;;;;yBAaR,EAAE,iBAAiB;;;yBAcA,EAAG,iBAAiB;;;;;;;;;;;;;;;;AAnCvD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAgBlC;IAEA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAUhE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,eAAO,MAAM,cAAc,QAAS,cAAc;;;;;;;;;CAkBhD,CAAA;AAKF,yBAAiB,oBAAoB,CAAC;IACpC,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACnF"}
@@ -0,0 +1,105 @@
1
+ import type * as HttpApp from "@effect/platform/HttpApp";
2
+ import { Rpc, RpcRouter } from "@effect/rpc";
3
+ import type { NonEmptyArray } from "effect-app";
4
+ import { Effect, Layer, S } from "effect-app";
5
+ import type { GetEffectContext, RPCContextMap } from "effect-app/client/req";
6
+ import type { HttpServerError } from "effect-app/http";
7
+ import { HttpRouter } from "effect-app/http";
8
+ import type { Middleware } from "./routing/DynamicMiddleware.js";
9
+ export type _R<T extends Effect<any, any, any>> = [T] extends [
10
+ Effect<any, any, infer R>
11
+ ] ? R : never;
12
+ export type _E<T extends Effect<any, any, any>> = [T] extends [
13
+ Effect<any, infer E, any>
14
+ ] ? E : never;
15
+ export type EffectDeps<A> = {
16
+ [K in keyof A as A[K] extends Effect<any, any, any> ? K : never]: A[K] extends Effect<any, any, any> ? A[K] : never;
17
+ };
18
+ /**
19
+ * Plain jane JSON version
20
+ * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
21
+ */
22
+ export declare const toHttpApp: <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
23
+ readonly spanPrefix?: string;
24
+ }) => HttpApp.Default<HttpServerError.RequestError, RpcRouter.RpcRouter.Context<R>>;
25
+ export interface Hint<Err extends string> {
26
+ Err: Err;
27
+ }
28
+ type HandleVoid<Expected, Actual, Result> = [Expected] extends [void] ? [Actual] extends [void] ? Result : Hint<"You're returning non void for a void Response, please fix"> : Result;
29
+ type AnyRequestModule = S.Schema.Any & {
30
+ success?: S.Schema.Any;
31
+ failure?: S.Schema.Any;
32
+ };
33
+ type GetSuccess<T> = T extends {
34
+ success: S.Schema.Any;
35
+ } ? T["success"] : typeof S.Void;
36
+ type GetFailure<T extends {
37
+ failure?: S.Schema.Any;
38
+ }> = T["failure"] extends never ? typeof S.Never : T["failure"];
39
+ export interface Handler<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> {
40
+ new (): {};
41
+ _tag: RT;
42
+ stack: string;
43
+ handler: (req: S.Schema.Type<Action>) => Effect<A, E, R>;
44
+ }
45
+ type AHandler<Action extends AnyRequestModule> = Handler<Action, "raw", S.Schema.Encoded<GetSuccess<Action>>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any> | Handler<Action, "d", S.Schema.Type<GetSuccess<Action>>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, any>;
46
+ type Filter<T> = {
47
+ [K in keyof T as T[K] extends S.Schema.All & {
48
+ success: S.Schema.Any;
49
+ failure: S.Schema.Any;
50
+ } ? K : never]: T[K];
51
+ };
52
+ export interface ExtendedMiddleware<Context, CTXMap extends Record<string, RPCContextMap.Any>> extends Middleware<Context, CTXMap> {
53
+ makeContext: Effect<{
54
+ [K in keyof CTXMap as CTXMap[K][1] extends never ? never : CTXMap[K][0]]: CTXMap[K][1];
55
+ }, never, never>;
56
+ }
57
+ export declare const RouterSymbol: unique symbol;
58
+ export interface RouterShape<Rsc> {
59
+ [RouterSymbol]: Rsc;
60
+ }
61
+ type RPCRouteR<T extends Rpc.Rpc<any, any>> = [T] extends [
62
+ Rpc.Rpc<any, infer R>
63
+ ] ? R : never;
64
+ export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContextMap.Any>>(middleware: ExtendedMiddleware<Context, CTXMap>, devMode: boolean) => {
65
+ matchAll: <T extends {
66
+ [key: string]: {
67
+ Router: {
68
+ router: Effect<HttpRouter.HttpRouter<any, any>, any, any>;
69
+ };
70
+ routes: Layer.Layer<any, any, any>;
71
+ moduleName: string;
72
+ };
73
+ }, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
74
+ layer: Layer.Layer<never, Layer.Layer.Error<(typeof handlers)[keyof typeof handlers]["routes"]>, Layer.Layer.Context<(typeof handlers)[keyof typeof handlers]["routes"]>>;
75
+ Router: HttpRouter.HttpRouter.TagClass<"RootRouter", "RootRouter", Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_1 ? T_1 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_1 extends HttpRouter.HttpRouter<infer E_1, any> ? E_1 : never : never : never, R | Exclude<Effect.Effect.Success<T[keyof T]["Router"]["router"]> extends infer T_2 ? T_2 extends Effect.Effect.Success<T[keyof T]["Router"]["router"]> ? T_2 extends HttpRouter.HttpRouter<any, infer R_1> ? R_1 : never : never : never, A>>;
76
+ };
77
+ matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
78
+ meta: {
79
+ moduleName: ModuleName;
80
+ };
81
+ }) => {
82
+ effect: <E_1, R_1, THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, TLayers extends NonEmptyArray<Layer.Layer.Any>>(layers: TLayers, make: (requests: { [Key in keyof Filter<Rsc>]: {
83
+ <A_1 extends S.Schema.Type<GetSuccess<Rsc[Key]>>, R2 = never, E_2 = never>(f: Effect<A_1, E_2, R2>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_1, Handler<Rsc[Key], "d", A_1, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>>>;
84
+ <A_1 extends S.Schema.Type<GetSuccess<Rsc[Key]>>, R2_1 = never, E_3 = never>(f: (req: S.Schema.Type<Rsc[Key]>) => Effect<A_1, E_3, R2_1>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_1, Handler<Rsc[Key], "d", A_1, E_3, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key]["config"]>>>>;
85
+ success: Rsc[Key]["success"];
86
+ failure: Rsc[Key]["failure"];
87
+ }; } & { [Key_1 in keyof Filter<Rsc> as Key_1 extends string ? `${Key_1}Raw` : never]: {
88
+ <A_1 extends S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, R2 = never, E_2 = never>(f: Effect<A_1, E_2, R2>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_1, Handler<Rsc[Key_1], "raw", A_1, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>>>;
89
+ <A_1 extends S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, R2_1 = never, E_3 = never>(f: (req: S.Schema.Type<Rsc[Key_1]>) => Effect<A_1, E_3, R2_1>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_1, Handler<Rsc[Key_1], "raw", A_1, E_3, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>>>;
90
+ success: S.SchemaClass<S.Schema.Encoded<Rsc[Key_1]["success"]>, S.Schema.Encoded<Rsc[Key_1]["success"]>, never>;
91
+ failure: Rsc[Key_1]["failure"];
92
+ }; }) => Effect<THandlers, E_1, R_1>) => {
93
+ moduleName: ModuleName;
94
+ Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>>; }[keyof Filter<Rsc>]>, { [k in keyof TLayers]: Layer.Layer.Success<TLayers[k]>; }[number]>>;
95
+ routes: Layer.Layer<RouterShape<Rsc>, E_1 | { [k_1 in keyof TLayers]: Layer.Layer.Error<TLayers[k_1]>; }[number], { [k_2 in keyof TLayers]: Layer.Layer.Context<TLayers[k_2]>; }[number] | Exclude<R_1, { [k_3 in keyof TLayers]: Layer.Layer.Success<TLayers[k_3]>; }[number]>>;
96
+ };
97
+ controllers: <THandlers_1 extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, TLayers_1 extends NonEmptyArray<Layer.Layer.Any>>(controllers: THandlers_1, layers?: TLayers_1) => {
98
+ moduleName: ModuleName;
99
+ Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers_1[K]["handler"]>>>; }[keyof Filter<Rsc>]>, { [k in keyof TLayers_1]: Layer.Layer.Success<TLayers_1[k]>; }[number]>>;
100
+ routes: Layer.Layer<RouterShape<Rsc>, { [k_1 in keyof TLayers_1]: Layer.Layer.Error<TLayers_1[k_1]>; }[number], { [k_2 in keyof TLayers_1]: Layer.Layer.Context<TLayers_1[k_2]>; }[number]>;
101
+ };
102
+ };
103
+ };
104
+ export {};
105
+ //# sourceMappingURL=routing2%20copy.d.ts.map