@effect-app/infra 1.28.0 → 1.28.2
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 +12 -0
- package/_cjs/api/routing2.cjs +14 -3
- package/_cjs/api/routing2.cjs.map +1 -1
- package/dist/api/routing2.d.ts +14 -5
- package/dist/api/routing2.d.ts.map +1 -1
- package/dist/api/routing2.js +15 -5
- package/package.json +3 -3
- package/src/api/routing2.ts +39 -7
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +0 -37
package/CHANGELOG.md
CHANGED
package/_cjs/api/routing2.cjs
CHANGED
|
@@ -3,11 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.makeRouter2 = void 0;
|
|
6
|
+
exports.toHttpApp = exports.makeRouter2 = void 0;
|
|
7
7
|
var _Effect = require("@effect-app/core/Effect");
|
|
8
8
|
var _utils = require("@effect-app/core/utils");
|
|
9
9
|
var _rpc = require("@effect/rpc");
|
|
10
|
-
var _rpcHttp = require("@effect/rpc-http");
|
|
11
10
|
var _effectApp = require("effect-app");
|
|
12
11
|
var _http = require("effect-app/http");
|
|
13
12
|
var _DynamicMiddleware = require("./routing2/DynamicMiddleware.cjs");
|
|
@@ -19,6 +18,18 @@ TODO: Effect.retry(r2, optimisticConcurrencySchedule) / was for PATCH only
|
|
|
19
18
|
TODO: uninteruptible commands! was for All except GET.
|
|
20
19
|
*/
|
|
21
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Plain jane JSON version
|
|
23
|
+
*/
|
|
24
|
+
const toHttpApp = (self, options) => {
|
|
25
|
+
const handler = _rpc.RpcRouter.toHandler(self, options);
|
|
26
|
+
return _effectApp.Effect.withFiberRuntime(fiber => {
|
|
27
|
+
const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
|
|
28
|
+
const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
|
|
29
|
+
return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => JSON.stringify(_effectApp.Chunk.toReadonlyArray(_))), _effectApp.Effect.andThen(_ => _http.HttpServerResponse.json(_)), _effectApp.Effect.orDie));
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
exports.toHttpApp = toHttpApp;
|
|
22
33
|
const makeRouter2 = middleware => {
|
|
23
34
|
const rpc = (0, _DynamicMiddleware.makeRpc)(middleware);
|
|
24
35
|
function matchFor(rsc) {
|
|
@@ -59,7 +70,7 @@ const makeRouter2 = middleware => {
|
|
|
59
70
|
return acc;
|
|
60
71
|
}, {});
|
|
61
72
|
const router = _rpc.RpcRouter.make(...Object.values(mapped));
|
|
62
|
-
return _http.HttpRouter.empty.pipe(_http.HttpRouter.all("/rpc/" + rsc.meta.moduleName,
|
|
73
|
+
return _http.HttpRouter.empty.pipe(_http.HttpRouter.all("/rpc/" + rsc.meta.moduleName, toHttpApp(router),
|
|
63
74
|
// TODO: not queries.
|
|
64
75
|
{
|
|
65
76
|
uninterruptible: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing2.cjs","names":["_Effect","require","_utils","_rpc","
|
|
1
|
+
{"version":3,"file":"routing2.cjs","names":["_Effect","require","_utils","_rpc","_effectApp","_http","_DynamicMiddleware","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","JSON","stringify","Chunk","toReadonlyArray","andThen","HttpServerResponse","orDie","exports","makeRouter2","middleware","rpc","makeRpc","matchFor","rsc","meta","Error","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","matchWithServices","action","services","f","req","all","svc","allLower","ctx","makeContext","Response","success","controllers","handlers","h","Request","mapped","effect","moduleName","router","make","Object","values","HttpRouter","empty","uninterruptible","r","prev","svcOrFnOrEffect","fnOrNone","stack","split","slice","join","isEffect","_tag","matchAll","concat"],"sources":["../../src/api/routing2.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/api/routing2.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { type EffectUnunified, type LowerServices } from "@effect-app/core/Effect";
|
|
2
2
|
import type { _R, EffectDeps } from "@effect-app/infra/api/routing";
|
|
3
|
+
import type * as HttpApp from "@effect/platform/HttpApp";
|
|
3
4
|
import type { Rpc } from "@effect/rpc";
|
|
5
|
+
import { RpcRouter } from "@effect/rpc";
|
|
4
6
|
import type { S } from "effect-app";
|
|
5
7
|
import { Effect } from "effect-app";
|
|
8
|
+
import type { HttpServerError } from "effect-app/http";
|
|
6
9
|
import { HttpRouter } from "effect-app/http";
|
|
7
10
|
import type { ContextMap, GetEffectContext, Middleware } from "./routing2/DynamicMiddleware.js";
|
|
11
|
+
/**
|
|
12
|
+
* Plain jane JSON version
|
|
13
|
+
*/
|
|
14
|
+
export declare const toHttpApp: <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
|
|
15
|
+
readonly spanPrefix?: string;
|
|
16
|
+
}) => HttpApp.Default<HttpServerError.RequestError, RpcRouter.RpcRouter.Context<R>>;
|
|
8
17
|
export interface Hint<Err extends string> {
|
|
9
18
|
Err: Err;
|
|
10
19
|
}
|
|
@@ -49,17 +58,17 @@ export declare const makeRouter2: <Context, CTXMap extends Record<string, Contex
|
|
|
49
58
|
moduleName: string;
|
|
50
59
|
};
|
|
51
60
|
}>(rsc: Rsc) => {
|
|
52
|
-
controllers: <THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }>(controllers: THandlers) => HttpRouter.HttpRouter<
|
|
61
|
+
controllers: <THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }>(controllers: THandlers) => HttpRouter.HttpRouter<HttpServerError.RequestError, Exclude<[(keyof Filter<Rsc> extends infer T extends keyof Filter<Rsc> ? { [K in T]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>>; } : never)[keyof Filter<Rsc>]] extends [Rpc.Rpc<any, infer R>] ? R : never, HttpRouter.HttpRouter.Provided> | Exclude<import("@effect/schema/Serializable").SerializableWithResult.Context<[(keyof Filter<Rsc> extends infer T extends keyof Filter<Rsc> ? { [K in T]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>>; } : never)[keyof Filter<Rsc>]] extends [Rpc.Rpc<infer Req extends S.TaggedRequest.All, any>] ? Req : never>, HttpRouter.HttpRouter.Provided>>;
|
|
53
62
|
} & { [Key in keyof Filter<Rsc>]: {
|
|
54
63
|
<R2, E, A>(f: Effect<A, E, R2>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A, Handler<Rsc[Key], "d", A, E, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, {
|
|
55
64
|
Response: Rsc[Key]["success"];
|
|
56
65
|
}>>;
|
|
57
|
-
<R2, E_1, A_1>(f: (req: S.Schema.Type<Rsc[Key]>, ctx: { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key] ? Rsc[Key][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key] ? Rsc[Key][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key] ? Rsc[Key][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key] ? Rsc[Key][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
66
|
+
<R2, E_1, A_1>(f: (req: S.Schema.Type<Rsc[Key]>, ctx: { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
58
67
|
Response: Rsc[Key]["success"];
|
|
59
68
|
}) => Effect<A_1, E_1, R2>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_1, Handler<Rsc[Key], "d", A_1, E_1, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, {
|
|
60
69
|
Response: Rsc[Key]["success"];
|
|
61
70
|
}>>;
|
|
62
|
-
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<Rsc[Key]>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key] ? Rsc[Key][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key] ? Rsc[Key][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key] ? Rsc[Key][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key] ? Rsc[Key][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
71
|
+
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<Rsc[Key]>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key]["config"] ? Rsc[Key]["config"][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
63
72
|
Response: Rsc[Key]["success"];
|
|
64
73
|
}>) => Effect<A_2, E_2, R2>): HandleVoid<S.Schema.Type<GetSuccess<Rsc[Key]>>, A_2, Handler<Rsc[Key], "d", A_2, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, {
|
|
65
74
|
Response: Rsc[Key]["success"];
|
|
@@ -68,12 +77,12 @@ export declare const makeRouter2: <Context, CTXMap extends Record<string, Contex
|
|
|
68
77
|
<R2_1, E, A>(f: Effect<A, E, R2_1>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A, Handler<Rsc[Key_1], "raw", A, E, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>, {
|
|
69
78
|
Response: Rsc[Key_1]["success"];
|
|
70
79
|
}>>;
|
|
71
|
-
<R2_1, E_1, A_1>(f: (req: S.Schema.Type<Rsc[Key_1]>, ctx: { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key_1] ? Rsc[Key_1][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
80
|
+
<R2_1, E_1, A_1>(f: (req: S.Schema.Type<Rsc[Key_1]>, ctx: { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
72
81
|
Response: Rsc[Key_1]["success"];
|
|
73
82
|
}) => Effect<A_1, E_1, R2_1>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_1, Handler<Rsc[Key_1], "raw", A_1, E_1, Exclude<R2_1, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>, {
|
|
74
83
|
Response: Rsc[Key_1]["success"];
|
|
75
84
|
}>>;
|
|
76
|
-
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<Rsc[Key_1]>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key_1] ? Rsc[Key_1][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key_1] ? Rsc[Key_1][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
85
|
+
<SVC extends Record<string, EffectUnunified<any, any, any>>, R2, E_2, A_2>(services: SVC, f: (req: S.Schema.Type<Rsc[Key_1]>, ctx: import("@effect-app/core/utils").ComputeFlat<LowerServices<EffectDeps<SVC>> & { [key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key] extends true ? CTXMap[key][0] : never : never]?: CTXMap[key][1]; } & { [key_1 in keyof CTXMap as CTXMap[key_1][3] extends true ? never : key_1 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_1] extends false ? CTXMap[key_1][0] : never : CTXMap[key_1][0]]: CTXMap[key_1][1]; } & { [key_2 in keyof CTXMap as CTXMap[key_2][3] extends false ? never : key_2 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_2] extends true ? CTXMap[key_2][0] : never : never]: CTXMap[key_2][1]; } & { [key_3 in keyof CTXMap as CTXMap[key_3][3] extends false ? never : key_3 extends keyof Rsc[Key_1]["config"] ? Rsc[Key_1]["config"][key_3] extends false ? CTXMap[key_3][0] : never : CTXMap[key_3][0]]?: CTXMap[key_3][1]; } & {
|
|
77
86
|
Response: Rsc[Key_1]["success"];
|
|
78
87
|
}>) => Effect<A_2, E_2, R2>): HandleVoid<S.Schema.Encoded<GetSuccess<Rsc[Key_1]>>, A_2, Handler<Rsc[Key_1], "raw", A_2, E_2, Exclude<R2, GetEffectContext<CTXMap, Rsc[Key_1]["config"]>>, {
|
|
79
88
|
Response: Rsc[Key_1]["success"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing2.d.ts","sourceRoot":"","sources":["../../src/api/routing2.ts"],"names":[],"mappings":"AAOA,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG5F,OAAO,KAAK,EAAM,EAAE,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"routing2.d.ts","sourceRoot":"","sources":["../../src/api/routing2.ts"],"names":[],"mappings":"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"}
|
package/dist/api/routing2.js
CHANGED
|
@@ -8,10 +8,20 @@ TODO: uninteruptible commands! was for All except GET.
|
|
|
8
8
|
import { allLower } from "@effect-app/core/Effect";
|
|
9
9
|
import { typedKeysOf } from "@effect-app/core/utils";
|
|
10
10
|
import { RpcRouter } from "@effect/rpc";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { HttpRouter } from "effect-app/http";
|
|
11
|
+
import { Chunk, Context, Effect, FiberRef, Predicate, Stream } from "effect-app";
|
|
12
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
14
13
|
import { makeRpc } from "./routing2/DynamicMiddleware.js";
|
|
14
|
+
/**
|
|
15
|
+
* Plain jane JSON version
|
|
16
|
+
*/
|
|
17
|
+
export const toHttpApp = (self, options) => {
|
|
18
|
+
const handler = RpcRouter.toHandler(self, options);
|
|
19
|
+
return Effect.withFiberRuntime((fiber) => {
|
|
20
|
+
const context = fiber.getFiberRef(FiberRef.currentContext);
|
|
21
|
+
const request = Context.unsafeGet(context, HttpServerRequest.HttpServerRequest);
|
|
22
|
+
return Effect.flatMap(request.json, (_) => handler(_).pipe(Stream.provideContext(context), Stream.runCollect, Effect.map((_) => JSON.stringify(Chunk.toReadonlyArray(_))), Effect.andThen((_) => HttpServerResponse.json(_)), Effect.orDie));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
15
25
|
export const makeRouter2 = (middleware) => {
|
|
16
26
|
const rpc = makeRpc(middleware);
|
|
17
27
|
function matchFor(rsc) {
|
|
@@ -43,7 +53,7 @@ export const makeRouter2 = (middleware) => {
|
|
|
43
53
|
return acc;
|
|
44
54
|
}, {});
|
|
45
55
|
const router = RpcRouter.make(...Object.values(mapped));
|
|
46
|
-
return HttpRouter.empty.pipe(HttpRouter.all(("/rpc/" + rsc.meta.moduleName),
|
|
56
|
+
return HttpRouter.empty.pipe(HttpRouter.all(("/rpc/" + rsc.meta.moduleName), toHttpApp(router),
|
|
47
57
|
// TODO: not queries.
|
|
48
58
|
{ uninterruptible: true }));
|
|
49
59
|
};
|
|
@@ -104,4 +114,4 @@ export const makeRouter2 = (middleware) => {
|
|
|
104
114
|
}
|
|
105
115
|
return { matchAll, matchFor };
|
|
106
116
|
};
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3JvdXRpbmcyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRDtBQUMxRCw0REFBNEQ7QUFDNUQsdURBQXVEO0FBQ3ZEOzs7RUFHRTtBQUNGLE9BQU8sRUFBRSxRQUFRLEVBQTRDLE1BQU0seUJBQXlCLENBQUE7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBS3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFdkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRWhGLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUVuRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFekQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBMEMsSUFBTyxFQUFFLE9BRTNFLEVBR0MsRUFBRTtJQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDMUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtRQUMvRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQ1osQ0FBQyxDQUFDLEVBQUUsRUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.28.
|
|
3
|
+
"version": "1.28.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"pure-rand": "6.1.0",
|
|
22
22
|
"redlock": "^4.2.0",
|
|
23
23
|
"@effect-app/core": "1.12.0",
|
|
24
|
+
"effect-app": "1.20.0",
|
|
24
25
|
"@effect-app/infra-adapters": "1.14.0",
|
|
25
|
-
"@effect-app/schema": "1.14.0"
|
|
26
|
-
"effect-app": "1.20.0"
|
|
26
|
+
"@effect-app/schema": "1.14.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@babel/cli": "^7.25.7",
|
package/src/api/routing2.ts
CHANGED
|
@@ -9,15 +9,43 @@ import { allLower, type EffectUnunified, type LowerServices } from "@effect-app/
|
|
|
9
9
|
import { typedKeysOf } from "@effect-app/core/utils"
|
|
10
10
|
import type { Compute } from "@effect-app/core/utils"
|
|
11
11
|
import type { _E, _R, EffectDeps } from "@effect-app/infra/api/routing"
|
|
12
|
+
import type * as HttpApp from "@effect/platform/HttpApp"
|
|
12
13
|
import type { Rpc } from "@effect/rpc"
|
|
13
14
|
import { RpcRouter } from "@effect/rpc"
|
|
14
|
-
import { HttpRpcRouter } from "@effect/rpc-http"
|
|
15
15
|
import type { S } from "effect-app"
|
|
16
|
-
import { Effect, Predicate } from "effect-app"
|
|
17
|
-
import {
|
|
16
|
+
import { Chunk, Context, Effect, FiberRef, Predicate, Stream } from "effect-app"
|
|
17
|
+
import type { HttpServerError } from "effect-app/http"
|
|
18
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http"
|
|
18
19
|
import type { ContextMap, GetEffectContext, Middleware } from "./routing2/DynamicMiddleware.js"
|
|
19
20
|
import { makeRpc } from "./routing2/DynamicMiddleware.js"
|
|
20
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Plain jane JSON version
|
|
24
|
+
*/
|
|
25
|
+
export const toHttpApp = <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
|
|
26
|
+
readonly spanPrefix?: string
|
|
27
|
+
}): HttpApp.Default<
|
|
28
|
+
HttpServerError.RequestError,
|
|
29
|
+
RpcRouter.RpcRouter.Context<R>
|
|
30
|
+
> => {
|
|
31
|
+
const handler = RpcRouter.toHandler(self, options)
|
|
32
|
+
return Effect.withFiberRuntime((fiber) => {
|
|
33
|
+
const context = fiber.getFiberRef(FiberRef.currentContext)
|
|
34
|
+
const request = Context.unsafeGet(context, HttpServerRequest.HttpServerRequest)
|
|
35
|
+
return Effect.flatMap(
|
|
36
|
+
request.json,
|
|
37
|
+
(_) =>
|
|
38
|
+
handler(_).pipe(
|
|
39
|
+
Stream.provideContext(context),
|
|
40
|
+
Stream.runCollect,
|
|
41
|
+
Effect.map((_) => JSON.stringify(Chunk.toReadonlyArray(_))),
|
|
42
|
+
Effect.andThen((_) => HttpServerResponse.json(_)),
|
|
43
|
+
Effect.orDie
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
21
49
|
type GetRouteContext<CTXMap extends Record<string, ContextMap.Any>, T> =
|
|
22
50
|
// & CTX
|
|
23
51
|
// inverted
|
|
@@ -147,7 +175,9 @@ export const makeRouter2 = <Context, CTXMap extends Record<string, ContextMap.An
|
|
|
147
175
|
f: (
|
|
148
176
|
req: S.Schema.Type<Rsc[Key]>,
|
|
149
177
|
ctx: Compute<
|
|
150
|
-
LowerServices<EffectDeps<SVC>> & GetRouteContext<CTXMap, Rsc[Key]> & {
|
|
178
|
+
LowerServices<EffectDeps<SVC>> & GetRouteContext<CTXMap, Rsc[Key]["config"]> & {
|
|
179
|
+
Response: Rsc[Key]["success"]
|
|
180
|
+
},
|
|
151
181
|
"flat"
|
|
152
182
|
>
|
|
153
183
|
) => Effect<A, E, R2>
|
|
@@ -178,7 +208,7 @@ export const makeRouter2 = <Context, CTXMap extends Record<string, ContextMap.An
|
|
|
178
208
|
<R2, E, A>(
|
|
179
209
|
f: (
|
|
180
210
|
req: S.Schema.Type<Rsc[Key]>,
|
|
181
|
-
ctx: GetRouteContext<CTXMap, Rsc[Key]> & { Response: Rsc[Key]["success"] }
|
|
211
|
+
ctx: GetRouteContext<CTXMap, Rsc[Key]["config"]> & { Response: Rsc[Key]["success"] }
|
|
182
212
|
) => Effect<A, E, R2>
|
|
183
213
|
): HandleVoid<
|
|
184
214
|
GetSuccessShape<Rsc[Key], RT>,
|
|
@@ -206,7 +236,9 @@ export const makeRouter2 = <Context, CTXMap extends Record<string, ContextMap.An
|
|
|
206
236
|
f: (
|
|
207
237
|
req: S.Schema.Type<Rsc[Key]>,
|
|
208
238
|
ctx: Compute<
|
|
209
|
-
LowerServices<EffectDeps<SVC>> & GetRouteContext<CTXMap, Rsc[Key]> & {
|
|
239
|
+
LowerServices<EffectDeps<SVC>> & GetRouteContext<CTXMap, Rsc[Key]["config"]> & {
|
|
240
|
+
Response: Rsc[Key]["success"]
|
|
241
|
+
},
|
|
210
242
|
"flat"
|
|
211
243
|
>
|
|
212
244
|
) => Effect<A, E, R2>
|
|
@@ -288,7 +320,7 @@ export const makeRouter2 = <Context, CTXMap extends Record<string, ContextMap.An
|
|
|
288
320
|
return HttpRouter.empty.pipe(
|
|
289
321
|
HttpRouter.all(
|
|
290
322
|
("/rpc/" + rsc.meta.moduleName) as any,
|
|
291
|
-
|
|
323
|
+
toHttpApp(router),
|
|
292
324
|
// TODO: not queries.
|
|
293
325
|
{ uninterruptible: true }
|
|
294
326
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
// packages/infra/vitest.config.ts
|
|
2
|
-
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
-
|
|
4
|
-
// vite.config.base.ts
|
|
5
|
-
import path from "path";
|
|
6
|
-
import fs from "fs";
|
|
7
|
-
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
-
function makeConfig(dirName) {
|
|
9
|
-
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
-
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
-
const cfg = {
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
-
//plugins: [autoImport],
|
|
14
|
-
test: {
|
|
15
|
-
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
-
reporters: "verbose",
|
|
17
|
-
globals: true
|
|
18
|
-
},
|
|
19
|
-
resolve: {
|
|
20
|
-
alias: packages.reduce((acc, cur) => {
|
|
21
|
-
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
-
return acc;
|
|
23
|
-
}, {})
|
|
24
|
-
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
console.log(cfg);
|
|
28
|
-
return cfg;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// packages/infra/vitest.config.ts
|
|
32
|
-
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
33
|
-
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
-
export {
|
|
35
|
-
vitest_config_default as default
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=
|