@effect-app/infra 1.29.7 → 1.30.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 +12 -0
- package/_cjs/api/routing/DynamicMiddleware.cjs +1 -25
- package/_cjs/api/routing/DynamicMiddleware.cjs.map +1 -1
- package/_cjs/api/routing.cjs.map +1 -1
- package/dist/api/routing/DynamicMiddleware.d.ts +4 -67
- package/dist/api/routing/DynamicMiddleware.d.ts.map +1 -1
- package/dist/api/routing/DynamicMiddleware.js +1 -22
- package/dist/api/routing.d.ts +4 -3
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +1 -1
- package/package.json +3 -3
- package/src/api/routing/DynamicMiddleware.ts +4 -172
- package/src/api/routing.ts +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,36 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.makeRpc = void 0;
|
|
7
7
|
var _rpc = require("@effect/rpc");
|
|
8
|
-
var _effectApp = require("effect-app");
|
|
9
8
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
10
9
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
11
10
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
12
11
|
|
|
13
|
-
const merge = (a, b) =>
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
15
|
-
a !== undefined && b.length ? _effectApp.S.Union(a, ...b) : a !== undefined ? a : b.length ? _effectApp.S.Union(...b) : _effectApp.S.Never;
|
|
16
|
-
const makeRpcClient = (errors, generalErrors) => {
|
|
17
|
-
function TaggedRequest() {
|
|
18
|
-
// TODO: filter errors based on config + take care of inversion
|
|
19
|
-
const errorSchemas = Object.values(errors);
|
|
20
|
-
return (tag, fields, config) => {
|
|
21
|
-
const req = _effectApp.S.TaggedRequest()(tag, {
|
|
22
|
-
payload: fields,
|
|
23
|
-
failure: merge(config?.failure, [...errorSchemas, generalErrors].filter(Boolean)),
|
|
24
|
-
success: config?.success ?? _effectApp.S.Void
|
|
25
|
-
});
|
|
26
|
-
return Object.assign(req, {
|
|
27
|
-
config
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
TaggedRequest
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
exports.makeRpcClient = makeRpcClient;
|
|
36
12
|
const makeRpc = middleware => {
|
|
37
13
|
return {
|
|
38
14
|
effect: (schema, handler, moduleName) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicMiddleware.cjs","names":["_rpc","require","
|
|
1
|
+
{"version":3,"file":"DynamicMiddleware.cjs","names":["_rpc","require","makeRpc","middleware","effect","schema","handler","moduleName","Rpc","execute","exports"],"sources":["../../../src/api/routing/DynamicMiddleware.ts"],"sourcesContent":[null],"mappings":";;;;;;AAGA,IAAAA,IAAA,GAAAC,OAAA;AAHA;AACA;AACA;;AA8BO,MAAMC,OAAO,GAClBC,UAAuC,IACrC;EACF,OAAO;IACLC,MAAM,EAAEA,CACNC,MAAqC,EACrCC,OAMC,EACDC,UAAmB,KACjB;MACF,OAAOC,QAAG,CAACJ,MAAM,CACfC,MAAM,EACNF,UAAU,CAACM,OAAO,CAACJ,MAAM,EAAEC,OAAO,EAAEC,UAAU,CAAC,CAChD;IACH;GACD;AACH,CAAC;AAAAG,OAAA,CAAAR,OAAA,GAAAA,OAAA","ignoreList":[]}
|
package/_cjs/api/routing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.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","Chunk","toReadonlyArray","andThen","HttpServerResponse","orDie","exports","makeRouter","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","spanPrefix","uninterruptible","r","prev","svcOrFnOrEffect","fnOrNone","stack","split","slice","join","isEffect","_tag","matchAll","concat"],"sources":["../../src/api/routing.ts"],"sourcesContent":[null],"mappings":";;;;;;AAOA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAIA,IAAAE,IAAA,GAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;
|
|
1
|
+
{"version":3,"file":"routing.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","Chunk","toReadonlyArray","andThen","HttpServerResponse","orDie","exports","makeRouter","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","spanPrefix","uninterruptible","r","prev","svcOrFnOrEffect","fnOrNone","stack","split","slice","join","isEffect","_tag","matchAll","concat"],"sources":["../../src/api/routing.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,70 +1,8 @@
|
|
|
1
1
|
import { Rpc } from "@effect/rpc";
|
|
2
|
-
import type { Effect, Request } from "effect-app";
|
|
3
|
-
import {
|
|
2
|
+
import type { Effect, Request, S } from "effect-app";
|
|
3
|
+
import type { GetEffectContext, RPCContetMap } from "effect-app/client/req";
|
|
4
4
|
import type * as EffectRequest from "effect/Request";
|
|
5
|
-
|
|
6
|
-
* Middleware is inactivate by default, the Key is optional in route context, and the service is optionally provided as Effect Context.
|
|
7
|
-
* Unless configured as `true`
|
|
8
|
-
*/
|
|
9
|
-
export type ContextMap<Key, Service, E> = [Key, Service, E, true];
|
|
10
|
-
export declare namespace ContextMap {
|
|
11
|
-
type Custom<Key, Service, E, Custom> = [Key, Service, E, Custom];
|
|
12
|
-
/**
|
|
13
|
-
* Middleware is active by default, and provides the Service at Key in route context, and the Service is provided as Effect Context.
|
|
14
|
-
* Unless omitted
|
|
15
|
-
*/
|
|
16
|
-
type Inverted<Key, Service, E> = [Key, Service, E, false];
|
|
17
|
-
type Any = [string, any, S.Schema.All, any];
|
|
18
|
-
}
|
|
19
|
-
type Values<T extends Record<any, any>> = T[keyof T];
|
|
20
|
-
export type GetEffectContext<CTXMap extends Record<string, ContextMap.Any>, T> = Values<{
|
|
21
|
-
[key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof T ? T[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][1];
|
|
22
|
-
} & {
|
|
23
|
-
[key in keyof CTXMap as CTXMap[key][3] extends false ? never : key extends keyof T ? T[key] extends true ? CTXMap[key][0] : never : never]: CTXMap[key][1];
|
|
24
|
-
}>;
|
|
25
|
-
export type ValuesOrNeverSchema<T extends Record<any, any>> = Values<T> extends never ? typeof S.Never : Values<T>;
|
|
26
|
-
export type GetEffectError<CTXMap extends Record<string, ContextMap.Any>, T> = Values<{
|
|
27
|
-
[key in keyof CTXMap as CTXMap[key][3] extends true ? never : key extends keyof T ? T[key] extends true ? never : CTXMap[key][0] : CTXMap[key][0]]: CTXMap[key][2];
|
|
28
|
-
} & {
|
|
29
|
-
[key in keyof CTXMap as CTXMap[key][3] extends false ? never : key extends keyof T ? T[key] extends true ? CTXMap[key][0] : never : never]: CTXMap[key][2];
|
|
30
|
-
}>;
|
|
31
|
-
type JoinSchema<T> = T extends ReadonlyArray<S.Schema.All> ? S.Union<T> : typeof S.Never;
|
|
32
|
-
type ExcludeFromTuple<T extends readonly any[], E> = T extends [infer F, ...infer R] ? [F] extends [E] ? ExcludeFromTuple<R, E> : [F, ...ExcludeFromTuple<R, E>] : [];
|
|
33
|
-
export declare const makeRpcClient: <RequestConfig extends object, CTXMap extends Record<string, ContextMap.Any>, GeneralErrors extends S.Schema.All = never>(errors: { [K in keyof CTXMap]: CTXMap[K][2]; }, generalErrors?: GeneralErrors) => {
|
|
34
|
-
TaggedRequest: <Self>() => {
|
|
35
|
-
<Tag extends string, Payload extends S.Struct.Fields, C extends {
|
|
36
|
-
success: S.Schema.Any;
|
|
37
|
-
failure: S.Schema.Any;
|
|
38
|
-
}>(tag: Tag, fields: Payload, config: RequestConfig & C): S.TaggedRequestClass<Self, Tag, {
|
|
39
|
-
readonly _tag: S.tag<Tag>;
|
|
40
|
-
} & Payload, (typeof config)["success"], JoinSchema<ExcludeFromTuple<[(typeof config)["failure"] | GetEffectError<CTXMap, C> | GeneralErrors], never>>> & {
|
|
41
|
-
config: Omit<C, "success" | "failure">;
|
|
42
|
-
};
|
|
43
|
-
<Tag extends string, Payload_1 extends S.Struct.Fields, C_1 extends {
|
|
44
|
-
success: S.Schema.Any;
|
|
45
|
-
}>(tag: Tag, fields: Payload_1, config: RequestConfig & C_1): S.TaggedRequestClass<Self, Tag, {
|
|
46
|
-
readonly _tag: S.tag<Tag>;
|
|
47
|
-
} & Payload_1, (typeof config)["success"], JoinSchema<ExcludeFromTuple<[GetEffectError<CTXMap, C_1> | GeneralErrors], never>>> & {
|
|
48
|
-
config: Omit<C_1, "success" | "failure">;
|
|
49
|
-
};
|
|
50
|
-
<Tag extends string, Payload_2 extends S.Struct.Fields, C_2 extends {
|
|
51
|
-
failure: S.Schema.Any;
|
|
52
|
-
}>(tag: Tag, fields: Payload_2, config: RequestConfig & C_2): S.TaggedRequestClass<Self, Tag, {
|
|
53
|
-
readonly _tag: S.tag<Tag>;
|
|
54
|
-
} & Payload_2, typeof S.Void, JoinSchema<ExcludeFromTuple<[(typeof config)["failure"] | GetEffectError<CTXMap, C_2> | GeneralErrors], never>>> & {
|
|
55
|
-
config: Omit<C_2, "success" | "failure">;
|
|
56
|
-
};
|
|
57
|
-
<Tag extends string, Payload_3 extends S.Struct.Fields, C_3 extends Record<string, any>>(tag: Tag, fields: Payload_3, config: C_3 & RequestConfig): S.TaggedRequestClass<Self, Tag, {
|
|
58
|
-
readonly _tag: S.tag<Tag>;
|
|
59
|
-
} & Payload_3, typeof S.Void, JoinSchema<ExcludeFromTuple<[GetEffectError<CTXMap, C_3> | GeneralErrors], never>>> & {
|
|
60
|
-
config: Omit<C_3, "success" | "failure">;
|
|
61
|
-
};
|
|
62
|
-
<Tag extends string, Payload_4 extends S.Struct.Fields>(tag: Tag, fields: Payload_4): S.TaggedRequestClass<Self, Tag, {
|
|
63
|
-
readonly _tag: S.tag<Tag>;
|
|
64
|
-
} & Payload_4, typeof S.Void, GeneralErrors extends never ? typeof S.Never : GeneralErrors>;
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
export interface Middleware<Context, CTXMap extends Record<string, ContextMap.Any>> {
|
|
5
|
+
export interface Middleware<Context, CTXMap extends Record<string, RPCContetMap.Any>> {
|
|
68
6
|
contextMap: CTXMap;
|
|
69
7
|
context: Context;
|
|
70
8
|
execute: <T extends {
|
|
@@ -73,10 +11,9 @@ export interface Middleware<Context, CTXMap extends Record<string, ContextMap.An
|
|
|
73
11
|
};
|
|
74
12
|
}, Req extends S.TaggedRequest.All, R>(schema: T & S.Schema<Req, any, never>, handler: (request: Req) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>, moduleName?: string) => (req: Req) => Effect.Effect<Request.Request.Success<Req>, Request.Request.Error<Req>, any>;
|
|
75
13
|
}
|
|
76
|
-
export declare const makeRpc: <Context, CTXMap extends Record<string,
|
|
14
|
+
export declare const makeRpc: <Context, CTXMap extends Record<string, RPCContetMap.Any>>(middleware: Middleware<Context, CTXMap>) => {
|
|
77
15
|
effect: <T extends {
|
|
78
16
|
config?: { [K in keyof CTXMap]?: any; };
|
|
79
17
|
}, Req extends S.TaggedRequest.All, R>(schema: T & S.Schema<Req, any, never>, handler: (request: Req) => Effect.Effect<EffectRequest.Request.Success<Req>, EffectRequest.Request.Error<Req>, R>, moduleName?: string) => Rpc.Rpc<Req, Context | Exclude<R, GetEffectContext<CTXMap, T["config"]>>>;
|
|
80
18
|
};
|
|
81
|
-
export {};
|
|
82
19
|
//# sourceMappingURL=DynamicMiddleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/DynamicMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"DynamicMiddleware.d.ts","sourceRoot":"","sources":["../../../src/api/routing/DynamicMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,KAAK,KAAK,aAAa,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,UAAU,CAAC,OAAO,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC;IAClF,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,CACP,CAAC,SAAS;QACR,MAAM,CAAC,EAAE;aAAG,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,GAAG;SAAE,CAAA;KACvC,EACD,GAAG,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAC/B,CAAC,EAED,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EACrC,OAAO,EAAE,CACP,OAAO,EAAE,GAAG,KACT,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAC3F,UAAU,CAAC,EAAE,MAAM,KAChB,CACH,GAAG,EAAE,GAAG,KACL,MAAM,CAAC,MAAM,CAChB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAC5B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAC1B,GAAG,CACJ,CAAA;CACF;AAED,eAAO,MAAM,OAAO,GAAI,OAAO,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,cAClE,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;aAG5B,CAAC,SAAS;QAAE,MAAM,CAAC,EAAE,GAAG,CAAiB,IAAZ,MAAM,MAAM,CAAC,CAAC,EAAE,GAAG,GAAE,CAAA;KAAE,EAAE,GAAG,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,UACvF,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,WAC5B,CACP,OAAO,EAAE,GAAG,KACT,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAClC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAChC,CAAC,CACF,eACY,MAAM;CAQxB,CAAA"}
|
|
@@ -2,27 +2,6 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
4
|
import { Rpc } from "@effect/rpc";
|
|
5
|
-
import { S } from "effect-app";
|
|
6
|
-
const merge = (a, b) =>
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
8
|
-
a !== undefined && b.length ? S.Union(a, ...b) : a !== undefined ? a : b.length ? S.Union(...b) : S.Never;
|
|
9
|
-
export const makeRpcClient = (errors, generalErrors) => {
|
|
10
|
-
function TaggedRequest() {
|
|
11
|
-
// TODO: filter errors based on config + take care of inversion
|
|
12
|
-
const errorSchemas = Object.values(errors);
|
|
13
|
-
return ((tag, fields, config) => {
|
|
14
|
-
const req = S.TaggedRequest()(tag, {
|
|
15
|
-
payload: fields,
|
|
16
|
-
failure: merge(config?.failure, [...errorSchemas, generalErrors].filter(Boolean)),
|
|
17
|
-
success: config?.success ?? S.Void
|
|
18
|
-
});
|
|
19
|
-
return Object.assign(req, { config });
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
TaggedRequest
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
5
|
export const makeRpc = (middleware) => {
|
|
27
6
|
return {
|
|
28
7
|
effect: (schema, handler, moduleName) => {
|
|
@@ -30,4 +9,4 @@ export const makeRpc = (middleware) => {
|
|
|
30
9
|
}
|
|
31
10
|
};
|
|
32
11
|
};
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY01pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JvdXRpbmcvRHluYW1pY01pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNERBQTREO0FBQzVELHdEQUF3RDtBQUN4RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQTZCakMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQ3JCLFVBQXVDLEVBQ3ZDLEVBQUU7SUFDRixPQUFPO1FBQ0wsTUFBTSxFQUFFLENBQ04sTUFBcUMsRUFDckMsT0FNQyxFQUNELFVBQW1CLEVBQ25CLEVBQUU7WUFDRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQ2YsTUFBTSxFQUNOLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FDaEQsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBIn0=
|
package/dist/api/routing.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ import type { Rpc } from "@effect/rpc";
|
|
|
4
4
|
import { RpcRouter } from "@effect/rpc";
|
|
5
5
|
import type { S } from "effect-app";
|
|
6
6
|
import { Effect } from "effect-app";
|
|
7
|
+
import type { GetEffectContext, RPCContetMap } from "effect-app/client/req";
|
|
7
8
|
import type { HttpServerError } from "effect-app/http";
|
|
8
9
|
import { HttpRouter } from "effect-app/http";
|
|
9
|
-
import type {
|
|
10
|
+
import type { Middleware } from "./routing/DynamicMiddleware.js";
|
|
10
11
|
export type _R<T extends Effect<any, any, any>> = [T] extends [
|
|
11
12
|
Effect<any, any, infer R>
|
|
12
13
|
] ? R : never;
|
|
@@ -53,12 +54,12 @@ type Filter<T> = {
|
|
|
53
54
|
failure: S.Schema.Any;
|
|
54
55
|
} ? K : never]: T[K];
|
|
55
56
|
};
|
|
56
|
-
interface ExtendedMiddleware<Context, CTXMap extends Record<string,
|
|
57
|
+
interface ExtendedMiddleware<Context, CTXMap extends Record<string, RPCContetMap.Any>> extends Middleware<Context, CTXMap> {
|
|
57
58
|
makeContext: Effect<{
|
|
58
59
|
[K in keyof CTXMap as CTXMap[K][1] extends never ? never : CTXMap[K][0]]: CTXMap[K][1];
|
|
59
60
|
}, never, never>;
|
|
60
61
|
}
|
|
61
|
-
export declare const makeRouter: <Context, CTXMap extends Record<string,
|
|
62
|
+
export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContetMap.Any>>(middleware: ExtendedMiddleware<Context, CTXMap>) => {
|
|
62
63
|
matchAll: <T extends {
|
|
63
64
|
[key: string]: HttpRouter.HttpRouter<any, any>;
|
|
64
65
|
}>(handlers: T) => HttpRouter.HttpRouter<[T[keyof T]] extends [HttpRouter.HttpRouter<infer E, any>] ? E : never, [T[keyof T]] extends [HttpRouter.HttpRouter<any, infer R>] ? R : never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/api/routing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAG5F,OAAO,KAAK,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAkB,MAAM,EAA+B,MAAM,YAAY,CAAA;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAyC,MAAM,iBAAiB,CAAA;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/api/routing.ts"],"names":[],"mappings":"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"}
|
package/dist/api/routing.js
CHANGED
|
@@ -115,4 +115,4 @@ export const makeRouter = (middleware) => {
|
|
|
115
115
|
}
|
|
116
116
|
return { matchAll, matchFor };
|
|
117
117
|
};
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwREFBMEQ7QUFDMUQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RDs7O0VBR0U7QUFDRixPQUFPLEVBQUUsUUFBUSxFQUE0QyxNQUFNLHlCQUF5QixDQUFBO0FBQzVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUlwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdoRixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBZXhEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUEwQyxJQUFPLEVBQUUsT0FFM0UsRUFHQyxFQUFFO0lBQ0YsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbEQsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN2QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMxRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQy9FLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FDbkIsT0FBTyxDQUFDLElBQUksRUFDWixDQUFDLENBQUMsRUFBRSxFQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"proper-lockfile": "^4.1.2",
|
|
21
21
|
"pure-rand": "6.1.0",
|
|
22
22
|
"redlock": "^4.2.0",
|
|
23
|
+
"@effect-app/infra-adapters": "1.15.4",
|
|
23
24
|
"@effect-app/core": "1.12.0",
|
|
24
|
-
"@effect-app/infra-adapters": "1.15.3",
|
|
25
25
|
"@effect-app/schema": "1.15.0",
|
|
26
|
-
"effect-app": "1.
|
|
26
|
+
"effect-app": "1.23.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@babel/cli": "^7.25.7",
|
|
@@ -2,179 +2,11 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
4
|
import { Rpc } from "@effect/rpc"
|
|
5
|
-
import type { Effect, Request } from "effect-app"
|
|
6
|
-
import {
|
|
5
|
+
import type { Effect, Request, S } from "effect-app"
|
|
6
|
+
import type { GetEffectContext, RPCContetMap } from "effect-app/client/req"
|
|
7
7
|
import type * as EffectRequest from "effect/Request"
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
* Middleware is inactivate by default, the Key is optional in route context, and the service is optionally provided as Effect Context.
|
|
11
|
-
* Unless configured as `true`
|
|
12
|
-
*/
|
|
13
|
-
export type ContextMap<Key, Service, E> = [Key, Service, E, true]
|
|
14
|
-
|
|
15
|
-
export declare namespace ContextMap {
|
|
16
|
-
export type Custom<Key, Service, E, Custom> = [Key, Service, E, Custom]
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Middleware is active by default, and provides the Service at Key in route context, and the Service is provided as Effect Context.
|
|
20
|
-
* Unless omitted
|
|
21
|
-
*/
|
|
22
|
-
export type Inverted<Key, Service, E> = [Key, Service, E, false]
|
|
23
|
-
|
|
24
|
-
export type Any = [string, any, S.Schema.All, any]
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type Values<T extends Record<any, any>> = T[keyof T]
|
|
28
|
-
|
|
29
|
-
export type GetEffectContext<CTXMap extends Record<string, ContextMap.Any>, T> = Values<
|
|
30
|
-
// inverted
|
|
31
|
-
& {
|
|
32
|
-
[
|
|
33
|
-
key in keyof CTXMap as CTXMap[key][3] extends true ? never
|
|
34
|
-
: key extends keyof T ? T[key] extends true ? never : CTXMap[key][0]
|
|
35
|
-
: CTXMap[key][0]
|
|
36
|
-
]: // TODO: or as an Optional available?
|
|
37
|
-
CTXMap[key][1]
|
|
38
|
-
}
|
|
39
|
-
// normal
|
|
40
|
-
& {
|
|
41
|
-
[
|
|
42
|
-
key in keyof CTXMap as CTXMap[key][3] extends false ? never
|
|
43
|
-
: key extends keyof T ? T[key] extends true ? CTXMap[key][0] : never
|
|
44
|
-
: never
|
|
45
|
-
]: // TODO: or as an Optional available?
|
|
46
|
-
CTXMap[key][1]
|
|
47
|
-
}
|
|
48
|
-
>
|
|
49
|
-
export type ValuesOrNeverSchema<T extends Record<any, any>> = Values<T> extends never ? typeof S.Never : Values<T>
|
|
50
|
-
export type GetEffectError<CTXMap extends Record<string, ContextMap.Any>, T> = Values<
|
|
51
|
-
// inverted
|
|
52
|
-
& {
|
|
53
|
-
[
|
|
54
|
-
key in keyof CTXMap as CTXMap[key][3] extends true ? never
|
|
55
|
-
: key extends keyof T ? T[key] extends true ? never : CTXMap[key][0]
|
|
56
|
-
: CTXMap[key][0]
|
|
57
|
-
]: // TODO: or as an Optional available?
|
|
58
|
-
CTXMap[key][2]
|
|
59
|
-
}
|
|
60
|
-
// normal
|
|
61
|
-
& {
|
|
62
|
-
[
|
|
63
|
-
key in keyof CTXMap as CTXMap[key][3] extends false ? never
|
|
64
|
-
: key extends keyof T ? T[key] extends true ? CTXMap[key][0] : never
|
|
65
|
-
: never
|
|
66
|
-
]: // TODO: or as an Optional available?
|
|
67
|
-
CTXMap[key][2]
|
|
68
|
-
}
|
|
69
|
-
>
|
|
70
|
-
|
|
71
|
-
const merge = (a: any, b: Array<any>) =>
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
73
|
-
a !== undefined && b.length ? S.Union(a, ...b) : a !== undefined ? a : b.length ? S.Union(...b) : S.Never
|
|
74
|
-
|
|
75
|
-
// TODO: Fix error types...
|
|
76
|
-
type JoinSchema<T> = T extends ReadonlyArray<S.Schema.All> ? S.Union<T> : typeof S.Never
|
|
77
|
-
type ExcludeFromTuple<T extends readonly any[], E> = T extends [infer F, ...infer R]
|
|
78
|
-
? [F] extends [E] ? ExcludeFromTuple<R, E>
|
|
79
|
-
: [F, ...ExcludeFromTuple<R, E>]
|
|
80
|
-
: []
|
|
81
|
-
|
|
82
|
-
export const makeRpcClient = <
|
|
83
|
-
RequestConfig extends object,
|
|
84
|
-
CTXMap extends Record<string, ContextMap.Any>,
|
|
85
|
-
GeneralErrors extends S.Schema.All = never
|
|
86
|
-
>(
|
|
87
|
-
errors: { [K in keyof CTXMap]: CTXMap[K][2] },
|
|
88
|
-
generalErrors?: GeneralErrors
|
|
89
|
-
) => {
|
|
90
|
-
// Long way around Context/C extends etc to support actual jsdoc from passed in RequestConfig etc...
|
|
91
|
-
type Context = { success: S.Schema.Any; failure: S.Schema.Any }
|
|
92
|
-
function TaggedRequest<Self>(): {
|
|
93
|
-
<Tag extends string, Payload extends S.Struct.Fields, C extends Context>(
|
|
94
|
-
tag: Tag,
|
|
95
|
-
fields: Payload,
|
|
96
|
-
config: RequestConfig & C
|
|
97
|
-
):
|
|
98
|
-
& S.TaggedRequestClass<
|
|
99
|
-
Self,
|
|
100
|
-
Tag,
|
|
101
|
-
{ readonly _tag: S.tag<Tag> } & Payload,
|
|
102
|
-
typeof config["success"],
|
|
103
|
-
JoinSchema<ExcludeFromTuple<[typeof config["failure"] | GetEffectError<CTXMap, C> | GeneralErrors], never>>
|
|
104
|
-
>
|
|
105
|
-
& { config: Omit<C, "success" | "failure"> }
|
|
106
|
-
<Tag extends string, Payload extends S.Struct.Fields, C extends { success: S.Schema.Any }>(
|
|
107
|
-
tag: Tag,
|
|
108
|
-
fields: Payload,
|
|
109
|
-
config: RequestConfig & C
|
|
110
|
-
):
|
|
111
|
-
& S.TaggedRequestClass<
|
|
112
|
-
Self,
|
|
113
|
-
Tag,
|
|
114
|
-
{ readonly _tag: S.tag<Tag> } & Payload,
|
|
115
|
-
typeof config["success"],
|
|
116
|
-
JoinSchema<ExcludeFromTuple<[GetEffectError<CTXMap, C> | GeneralErrors], never>>
|
|
117
|
-
>
|
|
118
|
-
& { config: Omit<C, "success" | "failure"> }
|
|
119
|
-
<Tag extends string, Payload extends S.Struct.Fields, C extends { failure: S.Schema.Any }>(
|
|
120
|
-
tag: Tag,
|
|
121
|
-
fields: Payload,
|
|
122
|
-
config: RequestConfig & C
|
|
123
|
-
):
|
|
124
|
-
& S.TaggedRequestClass<
|
|
125
|
-
Self,
|
|
126
|
-
Tag,
|
|
127
|
-
{ readonly _tag: S.tag<Tag> } & Payload,
|
|
128
|
-
typeof S.Void,
|
|
129
|
-
JoinSchema<ExcludeFromTuple<[typeof config["failure"] | GetEffectError<CTXMap, C> | GeneralErrors], never>>
|
|
130
|
-
>
|
|
131
|
-
& { config: Omit<C, "success" | "failure"> }
|
|
132
|
-
<Tag extends string, Payload extends S.Struct.Fields, C extends Record<string, any>>(
|
|
133
|
-
tag: Tag,
|
|
134
|
-
fields: Payload,
|
|
135
|
-
config: C & RequestConfig
|
|
136
|
-
):
|
|
137
|
-
& S.TaggedRequestClass<
|
|
138
|
-
Self,
|
|
139
|
-
Tag,
|
|
140
|
-
{ readonly _tag: S.tag<Tag> } & Payload,
|
|
141
|
-
typeof S.Void,
|
|
142
|
-
JoinSchema<ExcludeFromTuple<[GetEffectError<CTXMap, C> | GeneralErrors], never>>
|
|
143
|
-
>
|
|
144
|
-
& { config: Omit<C, "success" | "failure"> }
|
|
145
|
-
<Tag extends string, Payload extends S.Struct.Fields>(
|
|
146
|
-
tag: Tag,
|
|
147
|
-
fields: Payload
|
|
148
|
-
): S.TaggedRequestClass<
|
|
149
|
-
Self,
|
|
150
|
-
Tag,
|
|
151
|
-
{ readonly _tag: S.tag<Tag> } & Payload,
|
|
152
|
-
typeof S.Void,
|
|
153
|
-
GeneralErrors extends never ? typeof S.Never : GeneralErrors
|
|
154
|
-
>
|
|
155
|
-
} {
|
|
156
|
-
// TODO: filter errors based on config + take care of inversion
|
|
157
|
-
const errorSchemas = Object.values(errors)
|
|
158
|
-
return (<Tag extends string, Fields extends S.Struct.Fields, C extends Context>(
|
|
159
|
-
tag: Tag,
|
|
160
|
-
fields: Fields,
|
|
161
|
-
config?: C
|
|
162
|
-
) => {
|
|
163
|
-
const req = S.TaggedRequest<Self>()(tag, {
|
|
164
|
-
payload: fields,
|
|
165
|
-
failure: merge(config?.failure, [...errorSchemas, generalErrors].filter(Boolean)),
|
|
166
|
-
success: config?.success ?? S.Void
|
|
167
|
-
})
|
|
168
|
-
return Object.assign(req, { config })
|
|
169
|
-
}) as any
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
return {
|
|
173
|
-
TaggedRequest
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export interface Middleware<Context, CTXMap extends Record<string, ContextMap.Any>> {
|
|
9
|
+
export interface Middleware<Context, CTXMap extends Record<string, RPCContetMap.Any>> {
|
|
178
10
|
contextMap: CTXMap
|
|
179
11
|
context: Context
|
|
180
12
|
execute: <
|
|
@@ -198,7 +30,7 @@ export interface Middleware<Context, CTXMap extends Record<string, ContextMap.An
|
|
|
198
30
|
>
|
|
199
31
|
}
|
|
200
32
|
|
|
201
|
-
export const makeRpc = <Context, CTXMap extends Record<string,
|
|
33
|
+
export const makeRpc = <Context, CTXMap extends Record<string, RPCContetMap.Any>>(
|
|
202
34
|
middleware: Middleware<Context, CTXMap>
|
|
203
35
|
) => {
|
|
204
36
|
return {
|
package/src/api/routing.ts
CHANGED
|
@@ -13,9 +13,10 @@ import type { Rpc } from "@effect/rpc"
|
|
|
13
13
|
import { RpcRouter } from "@effect/rpc"
|
|
14
14
|
import type { S } from "effect-app"
|
|
15
15
|
import { Chunk, Context, Effect, FiberRef, Predicate, Stream } from "effect-app"
|
|
16
|
+
import type { GetEffectContext, RPCContetMap } from "effect-app/client/req"
|
|
16
17
|
import type { HttpServerError } from "effect-app/http"
|
|
17
18
|
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http"
|
|
18
|
-
import type {
|
|
19
|
+
import type { Middleware } from "./routing/DynamicMiddleware.js"
|
|
19
20
|
import { makeRpc } from "./routing/DynamicMiddleware.js"
|
|
20
21
|
|
|
21
22
|
export type _R<T extends Effect<any, any, any>> = [T] extends [
|
|
@@ -59,7 +60,7 @@ export const toHttpApp = <R extends RpcRouter.RpcRouter<any, any>>(self: R, opti
|
|
|
59
60
|
})
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
type GetRouteContext<CTXMap extends Record<string,
|
|
63
|
+
type GetRouteContext<CTXMap extends Record<string, RPCContetMap.Any>, T> =
|
|
63
64
|
// & CTX
|
|
64
65
|
// inverted
|
|
65
66
|
& {
|
|
@@ -145,7 +146,7 @@ type Filter<T> = {
|
|
|
145
146
|
[K in keyof T as T[K] extends S.Schema.All & { success: S.Schema.Any; failure: S.Schema.Any } ? K : never]: T[K]
|
|
146
147
|
}
|
|
147
148
|
|
|
148
|
-
interface ExtendedMiddleware<Context, CTXMap extends Record<string,
|
|
149
|
+
interface ExtendedMiddleware<Context, CTXMap extends Record<string, RPCContetMap.Any>>
|
|
149
150
|
extends Middleware<Context, CTXMap>
|
|
150
151
|
{
|
|
151
152
|
// TODO
|
|
@@ -156,7 +157,7 @@ interface ExtendedMiddleware<Context, CTXMap extends Record<string, ContextMap.A
|
|
|
156
157
|
>
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
export const makeRouter = <Context, CTXMap extends Record<string,
|
|
160
|
+
export const makeRouter = <Context, CTXMap extends Record<string, RPCContetMap.Any>>(
|
|
160
161
|
middleware: ExtendedMiddleware<Context, CTXMap>
|
|
161
162
|
) => {
|
|
162
163
|
const rpc = makeRpc(middleware)
|