@effect-app/infra 2.9.1 → 2.9.3
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/QueueMaker/SQLQueue.cjs +3 -4
- package/_cjs/QueueMaker/SQLQueue.cjs.map +1 -1
- package/_cjs/Store/utils.cjs +3 -2
- package/_cjs/Store/utils.cjs.map +1 -1
- package/_cjs/adapters/SQL/Model.cjs +5 -4
- package/_cjs/adapters/SQL/Model.cjs.map +1 -1
- package/_cjs/api/routing4.cjs +190 -0
- package/_cjs/api/routing4.cjs.map +1 -0
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +4 -5
- package/dist/Store/utils.js +3 -3
- package/dist/adapters/SQL/Model.d.ts +18 -18
- package/dist/adapters/SQL/Model.js +5 -5
- package/dist/api/routing4.d.ts +104 -0
- package/dist/api/routing4.d.ts.map +1 -0
- package/dist/api/routing4.js +207 -0
- package/package.json +11 -1
- package/src/QueueMaker/SQLQueue.ts +3 -4
- package/src/Store/utils.ts +2 -2
- package/src/adapters/SQL/Model.ts +4 -4
- package/src/api/routing4.ts +510 -0
|
@@ -7,43 +7,43 @@ import * as Effect from "effect/Effect";
|
|
|
7
7
|
import * as Option from "effect/Option";
|
|
8
8
|
import * as Schema from "effect/Schema";
|
|
9
9
|
import type { Scope } from "effect/Scope";
|
|
10
|
-
declare const Class: <Self = never>(identifier: string) => <const Fields extends VariantSchema.Struct.Fields>(fields: Fields & VariantSchema.Struct.Validate<Fields, "select" | "
|
|
10
|
+
declare const Class: <Self = never>(identifier: string) => <const Fields extends VariantSchema.Struct.Fields>(fields: Fields & VariantSchema.Struct.Validate<Fields, "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">, annotations?: Schema.Annotations.Schema<Self, readonly []> | undefined) => [Self] extends [never] ? "Missing `Self` generic - use `class Self extends Class<Self>()({ ... })`" : VariantSchema.Class<Self, Fields, VariantSchema.ExtractFields<"select", Fields, true> extends infer T ? { [K in keyof T]: VariantSchema.ExtractFields<"select", Fields, true>[K]; } : never, Schema.Struct.Type<VariantSchema.ExtractFields<"select", Fields, true> extends infer T ? { [K in keyof T]: VariantSchema.ExtractFields<"select", Fields, true>[K]; } : never>, Schema.Struct.Encoded<VariantSchema.ExtractFields<"select", Fields, true> extends infer T ? { [K in keyof T]: VariantSchema.ExtractFields<"select", Fields, true>[K]; } : never>, Schema.Schema.Context<(VariantSchema.ExtractFields<"select", Fields, true> extends infer T ? { [K in keyof T]: VariantSchema.ExtractFields<"select", Fields, true>[K]; } : never)[keyof VariantSchema.ExtractFields<"select", Fields, true>]>, Schema.Struct.Constructor<VariantSchema.ExtractFields<"select", Fields, true> extends infer T ? { [K in keyof T]: VariantSchema.ExtractFields<"select", Fields, true>[K]; } : never>> & {
|
|
11
11
|
readonly select: Schema.Struct<VariantSchema.ExtractFields<"select", Fields, false> extends infer T_1 ? { [K_1 in keyof T_1]: VariantSchema.ExtractFields<"select", Fields, false>[K_1]; } : never>;
|
|
12
|
-
readonly
|
|
13
|
-
readonly
|
|
12
|
+
readonly insert: Schema.Struct<VariantSchema.ExtractFields<"insert", Fields, false> extends infer T_2 ? { [K_2 in keyof T_2]: VariantSchema.ExtractFields<"insert", Fields, false>[K_2]; } : never>;
|
|
13
|
+
readonly update: Schema.Struct<VariantSchema.ExtractFields<"update", Fields, false> extends infer T_3 ? { [K_3 in keyof T_3]: VariantSchema.ExtractFields<"update", Fields, false>[K_3]; } : never>;
|
|
14
14
|
readonly json: Schema.Struct<VariantSchema.ExtractFields<"json", Fields, false> extends infer T_4 ? { [K_4 in keyof T_4]: VariantSchema.ExtractFields<"json", Fields, false>[K_4]; } : never>;
|
|
15
15
|
readonly jsonCreate: Schema.Struct<VariantSchema.ExtractFields<"jsonCreate", Fields, false> extends infer T_5 ? { [K_5 in keyof T_5]: VariantSchema.ExtractFields<"jsonCreate", Fields, false>[K_5]; } : never>;
|
|
16
16
|
readonly jsonUpdate: Schema.Struct<VariantSchema.ExtractFields<"jsonUpdate", Fields, false> extends infer T_6 ? { [K_6 in keyof T_6]: VariantSchema.ExtractFields<"jsonUpdate", Fields, false>[K_6]; } : never>;
|
|
17
|
-
}, Field: <const A extends VariantSchema.Field.ConfigWithKeys<"select" | "
|
|
18
|
-
<V extends "select" | "
|
|
19
|
-
<V extends "select" | "
|
|
17
|
+
}, Field: <const A extends VariantSchema.Field.ConfigWithKeys<"select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">>(config: A & { readonly [K in Exclude<keyof A, "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">]: never; }) => VariantSchema.Field<A>, FieldExcept: <const Keys extends readonly ("select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate")[]>(...keys: Keys) => <S extends Schema.Schema.All | Schema.PropertySignature.All>(schema: S) => VariantSchema.Field<{ readonly [K in Exclude<"select", Keys[number]> | Exclude<"insert", Keys[number]> | Exclude<"update", Keys[number]> | Exclude<"json", Keys[number]> | Exclude<"jsonCreate", Keys[number]> | Exclude<"jsonUpdate", Keys[number]>]: S; }>, FieldOnly: <const Keys extends readonly ("select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate")[]>(...keys: Keys) => <S extends Schema.Schema.All | Schema.PropertySignature.All>(schema: S) => VariantSchema.Field<{ readonly [K in Keys[number]]: S; }>, Struct: <const A extends VariantSchema.Struct.Fields>(fields: A & VariantSchema.Struct.Validate<A, "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">) => VariantSchema.Struct<A>, Union: <const Members extends ReadonlyArray<VariantSchema.Struct<any>>>(...members: Members) => VariantSchema.Union<Members> & VariantSchema.Union.Variants<Members, "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">, extract: {
|
|
18
|
+
<V extends "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate">(variant: V): <A extends VariantSchema.Struct<any>>(self: A) => VariantSchema.Extract<V, A, V extends "select" ? true : false>;
|
|
19
|
+
<V extends "select" | "insert" | "update" | "json" | "jsonCreate" | "jsonUpdate", A extends VariantSchema.Struct<any>>(self: A, variant: V): VariantSchema.Extract<V, A, V extends "select" ? true : false>;
|
|
20
20
|
}, fieldEvolve: {
|
|
21
21
|
<Self extends VariantSchema.Field<any> | VariantSchema.Field.ValueAny, const Mapping extends Self extends VariantSchema.Field<infer S extends VariantSchema.Field.Config> ? { readonly [K in keyof S]?: (variant: S[K]) => VariantSchema.Field.ValueAny; } : {
|
|
22
22
|
readonly select?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
23
|
-
readonly update?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
24
23
|
readonly insert?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
24
|
+
readonly update?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
25
25
|
readonly json?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
26
26
|
readonly jsonCreate?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
27
27
|
readonly jsonUpdate?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
28
28
|
}>(f: Mapping): (self: Self) => VariantSchema.Field<Self extends VariantSchema.Field<infer S_1 extends VariantSchema.Field.Config> ? { readonly [K_1 in keyof S_1]: K_1 extends keyof Mapping ? Mapping[K_1] extends (arg: any) => any ? ReturnType<Mapping[K_1]> : S_1[K_1] : S_1[K_1]; } : {
|
|
29
29
|
readonly select: "select" extends infer T ? T extends "select" ? T extends keyof Mapping ? Mapping[T] extends (arg: any) => any ? ReturnType<Mapping[T]> : Self : Self : never : never;
|
|
30
|
-
readonly
|
|
31
|
-
readonly
|
|
30
|
+
readonly insert: "insert" extends infer T_1 ? T_1 extends "insert" ? T_1 extends keyof Mapping ? Mapping[T_1] extends (arg: any) => any ? ReturnType<Mapping[T_1]> : Self : Self : never : never;
|
|
31
|
+
readonly update: "update" extends infer T_2 ? T_2 extends "update" ? T_2 extends keyof Mapping ? Mapping[T_2] extends (arg: any) => any ? ReturnType<Mapping[T_2]> : Self : Self : never : never;
|
|
32
32
|
readonly json: "json" extends infer T_3 ? T_3 extends "json" ? T_3 extends keyof Mapping ? Mapping[T_3] extends (arg: any) => any ? ReturnType<Mapping[T_3]> : Self : Self : never : never;
|
|
33
33
|
readonly jsonCreate: "jsonCreate" extends infer T_4 ? T_4 extends "jsonCreate" ? T_4 extends keyof Mapping ? Mapping[T_4] extends (arg: any) => any ? ReturnType<Mapping[T_4]> : Self : Self : never : never;
|
|
34
34
|
readonly jsonUpdate: "jsonUpdate" extends infer T_5 ? T_5 extends "jsonUpdate" ? T_5 extends keyof Mapping ? Mapping[T_5] extends (arg: any) => any ? ReturnType<Mapping[T_5]> : Self : Self : never : never;
|
|
35
35
|
}>;
|
|
36
36
|
<Self extends VariantSchema.Field<any> | VariantSchema.Field.ValueAny, const Mapping_1 extends Self extends VariantSchema.Field<infer S extends VariantSchema.Field.Config> ? { readonly [K in keyof S]?: (variant: S[K]) => VariantSchema.Field.ValueAny; } : {
|
|
37
37
|
readonly select?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
38
|
-
readonly update?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
39
38
|
readonly insert?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
39
|
+
readonly update?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
40
40
|
readonly json?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
41
41
|
readonly jsonCreate?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
42
42
|
readonly jsonUpdate?: (variant: Self) => VariantSchema.Field.ValueAny;
|
|
43
43
|
}>(self: Self, f: Mapping_1): VariantSchema.Field<Self extends VariantSchema.Field<infer S_1 extends VariantSchema.Field.Config> ? { readonly [K_1 in keyof S_1]: K_1 extends keyof Mapping_1 ? Mapping_1[K_1] extends (arg: any) => any ? ReturnType<Mapping_1[K_1]> : S_1[K_1] : S_1[K_1]; } : {
|
|
44
44
|
readonly select: "select" extends infer T ? T extends "select" ? T extends keyof Mapping_1 ? Mapping_1[T] extends (arg: any) => any ? ReturnType<Mapping_1[T]> : Self : Self : never : never;
|
|
45
|
-
readonly
|
|
46
|
-
readonly
|
|
45
|
+
readonly insert: "insert" extends infer T_1 ? T_1 extends "insert" ? T_1 extends keyof Mapping_1 ? Mapping_1[T_1] extends (arg: any) => any ? ReturnType<Mapping_1[T_1]> : Self : Self : never : never;
|
|
46
|
+
readonly update: "update" extends infer T_2 ? T_2 extends "update" ? T_2 extends keyof Mapping_1 ? Mapping_1[T_2] extends (arg: any) => any ? ReturnType<Mapping_1[T_2]> : Self : Self : never : never;
|
|
47
47
|
readonly json: "json" extends infer T_3 ? T_3 extends "json" ? T_3 extends keyof Mapping_1 ? Mapping_1[T_3] extends (arg: any) => any ? ReturnType<Mapping_1[T_3]> : Self : Self : never : never;
|
|
48
48
|
readonly jsonCreate: "jsonCreate" extends infer T_4 ? T_4 extends "jsonCreate" ? T_4 extends keyof Mapping_1 ? Mapping_1[T_4] extends (arg: any) => any ? ReturnType<Mapping_1[T_4]> : Self : Self : never : never;
|
|
49
49
|
readonly jsonUpdate: "jsonUpdate" extends infer T_5 ? T_5 extends "jsonUpdate" ? T_5 extends keyof Mapping_1 ? Mapping_1[T_5] extends (arg: any) => any ? ReturnType<Mapping_1[T_5]> : Self : Self : never : never;
|
|
@@ -51,30 +51,30 @@ declare const Class: <Self = never>(identifier: string) => <const Fields extends
|
|
|
51
51
|
}, fieldFromKey: {
|
|
52
52
|
<Self extends VariantSchema.Field<any> | VariantSchema.Field.ValueAny, const Mapping_2 extends Self extends VariantSchema.Field<infer S extends VariantSchema.Field.Config> ? { readonly [K in keyof S]?: string; } : {
|
|
53
53
|
readonly select?: string;
|
|
54
|
-
readonly update?: string;
|
|
55
54
|
readonly insert?: string;
|
|
55
|
+
readonly update?: string;
|
|
56
56
|
readonly json?: string;
|
|
57
57
|
readonly jsonCreate?: string;
|
|
58
58
|
readonly jsonUpdate?: string;
|
|
59
59
|
}>(mapping: Mapping_2): (self: Self) => VariantSchema.Field<Self extends VariantSchema.Field<infer S_1 extends VariantSchema.Field.Config> ? { readonly [K_1 in keyof S_1]: K_1 extends keyof Mapping_2 ? Mapping_2[K_1] extends string ? VariantSchema.fromKey.Rename<S_1[K_1], Mapping_2[K_1]> : S_1[K_1] : S_1[K_1]; } : {
|
|
60
60
|
readonly select: "select" extends infer T ? T extends "select" ? T extends keyof Mapping_2 ? Mapping_2[T] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T]> : Self : Self : never : never;
|
|
61
|
-
readonly
|
|
62
|
-
readonly
|
|
61
|
+
readonly insert: "insert" extends infer T_1 ? T_1 extends "insert" ? T_1 extends keyof Mapping_2 ? Mapping_2[T_1] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T_1]> : Self : Self : never : never;
|
|
62
|
+
readonly update: "update" extends infer T_2 ? T_2 extends "update" ? T_2 extends keyof Mapping_2 ? Mapping_2[T_2] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T_2]> : Self : Self : never : never;
|
|
63
63
|
readonly json: "json" extends infer T_3 ? T_3 extends "json" ? T_3 extends keyof Mapping_2 ? Mapping_2[T_3] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T_3]> : Self : Self : never : never;
|
|
64
64
|
readonly jsonCreate: "jsonCreate" extends infer T_4 ? T_4 extends "jsonCreate" ? T_4 extends keyof Mapping_2 ? Mapping_2[T_4] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T_4]> : Self : Self : never : never;
|
|
65
65
|
readonly jsonUpdate: "jsonUpdate" extends infer T_5 ? T_5 extends "jsonUpdate" ? T_5 extends keyof Mapping_2 ? Mapping_2[T_5] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_2[T_5]> : Self : Self : never : never;
|
|
66
66
|
}>;
|
|
67
67
|
<Self extends VariantSchema.Field<any> | VariantSchema.Field.ValueAny, const Mapping_3 extends Self extends VariantSchema.Field<infer S extends VariantSchema.Field.Config> ? { readonly [K in keyof S]?: string; } : {
|
|
68
68
|
readonly select?: string;
|
|
69
|
-
readonly update?: string;
|
|
70
69
|
readonly insert?: string;
|
|
70
|
+
readonly update?: string;
|
|
71
71
|
readonly json?: string;
|
|
72
72
|
readonly jsonCreate?: string;
|
|
73
73
|
readonly jsonUpdate?: string;
|
|
74
74
|
}>(self: Self, mapping: Mapping_3): VariantSchema.Field<Self extends VariantSchema.Field<infer S_1 extends VariantSchema.Field.Config> ? { readonly [K_1 in keyof S_1]: K_1 extends keyof Mapping_3 ? Mapping_3[K_1] extends string ? VariantSchema.fromKey.Rename<S_1[K_1], Mapping_3[K_1]> : S_1[K_1] : S_1[K_1]; } : {
|
|
75
75
|
readonly select: "select" extends infer T ? T extends "select" ? T extends keyof Mapping_3 ? Mapping_3[T] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T]> : Self : Self : never : never;
|
|
76
|
-
readonly
|
|
77
|
-
readonly
|
|
76
|
+
readonly insert: "insert" extends infer T_1 ? T_1 extends "insert" ? T_1 extends keyof Mapping_3 ? Mapping_3[T_1] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T_1]> : Self : Self : never : never;
|
|
77
|
+
readonly update: "update" extends infer T_2 ? T_2 extends "update" ? T_2 extends keyof Mapping_3 ? Mapping_3[T_2] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T_2]> : Self : Self : never : never;
|
|
78
78
|
readonly json: "json" extends infer T_3 ? T_3 extends "json" ? T_3 extends keyof Mapping_3 ? Mapping_3[T_3] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T_3]> : Self : Self : never : never;
|
|
79
79
|
readonly jsonCreate: "jsonCreate" extends infer T_4 ? T_4 extends "jsonCreate" ? T_4 extends keyof Mapping_3 ? Mapping_3[T_4] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T_4]> : Self : Self : never : never;
|
|
80
80
|
readonly jsonUpdate: "jsonUpdate" extends infer T_5 ? T_5 extends "jsonUpdate" ? T_5 extends keyof Mapping_3 ? Mapping_3[T_5] extends string ? VariantSchema.fromKey.Rename<Self, Mapping_3[T_5]> : Self : Self : never : never;
|
|
@@ -12,7 +12,7 @@ import * as VariantSchema from "@effect/experimental/VariantSchema";
|
|
|
12
12
|
import { SqlClient } from "@effect/sql/SqlClient";
|
|
13
13
|
import * as SqlResolver from "@effect/sql/SqlResolver";
|
|
14
14
|
import * as SqlSchema from "@effect/sql/SqlSchema";
|
|
15
|
-
import
|
|
15
|
+
import crypto from "crypto"; // TODO
|
|
16
16
|
import * as DateTime from "effect/DateTime";
|
|
17
17
|
import * as Effect from "effect/Effect";
|
|
18
18
|
import * as Option from "effect/Option";
|
|
@@ -383,11 +383,11 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID(
|
|
|
383
383
|
Result: Model,
|
|
384
384
|
execute: versionColumn
|
|
385
385
|
? (request) => sql.onDialectOrElse({
|
|
386
|
-
mysql: () => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]};
|
|
386
|
+
mysql: () => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: crypto.randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]};
|
|
387
387
|
select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idColumn]};`
|
|
388
388
|
.unprepared
|
|
389
389
|
.pipe(Effect.map(([, results]) => results)),
|
|
390
|
-
orElse: () => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]} returning *`
|
|
390
|
+
orElse: () => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: crypto.randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]} returning *`
|
|
391
391
|
})
|
|
392
392
|
: (request) => sql.onDialectOrElse({
|
|
393
393
|
mysql: () => sql `update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]};
|
|
@@ -404,7 +404,7 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = ${request[idCol
|
|
|
404
404
|
const updateVoidSchema = SqlSchema.void({
|
|
405
405
|
Request: Model.update,
|
|
406
406
|
execute: versionColumn
|
|
407
|
-
? (request) => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]}`
|
|
407
|
+
? (request) => sql `update ${sql(options.tableName)} set ${sql.update({ ...request, [versionColumn]: crypto.randomUUID() }, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]} and ${sql(versionColumn)} = ${request[versionColumn]}`
|
|
408
408
|
: (request) => sql `update ${sql(options.tableName)} set ${sql.update(request, [idColumn])} where ${sql(idColumn)} = ${request[idColumn]}`
|
|
409
409
|
});
|
|
410
410
|
const updateVoid = (update) => updateVoidSchema(update).pipe(Effect.orDie, Effect.withSpan(`${options.spanPrefix}.updateVoid`, {
|
|
@@ -505,4 +505,4 @@ select * from ${sql(options.tableName)} where ${sql(idColumn)} = LAST_INSERT_ID(
|
|
|
505
505
|
}));
|
|
506
506
|
return { insert, insertVoid, findById, delete: delete_ };
|
|
507
507
|
});
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvU1FML01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCw0REFBNEQ7QUFDNUQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RCwwREFBMEQ7QUFDMUQsd0RBQXdEO0FBQ3hEOztHQUVHO0FBQ0gsT0FBTyxLQUFLLEdBQUcsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRCxPQUFPLEtBQUssYUFBYSxNQUFNLG9DQUFvQyxDQUFBO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQSxDQUFDLE9BQU87QUFFM0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzQyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssV0FBVyxNQUFNLG9CQUFvQixDQUFBO0FBQ2pELE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBR3ZDLE1BQU0sRUFDSixLQUFLLEVBQ0wsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxPQUFPLEVBQ1AsV0FBVyxFQUNYLFlBQVksRUFDYixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDckIsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDNUUsY0FBYyxFQUFFLFFBQVE7Q0FDekIsQ0FBQyxDQUFBO0FBd0NGLE9BQU87QUFD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
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvU1FML01vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtEQUErRDtBQUMvRCw0REFBNEQ7QUFDNUQsNERBQTREO0FBQzVELHVEQUF1RDtBQUN2RCwwREFBMEQ7QUFDMUQsd0RBQXdEO0FBQ3hEOztHQUVHO0FBQ0gsT0FBTyxLQUFLLEdBQUcsTUFBTSxzQ0FBc0MsQ0FBQTtBQUMzRCxPQUFPLEtBQUssYUFBYSxNQUFNLG9DQUFvQyxDQUFBO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNqRCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFBO0FBQ3RELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBLENBQUMsT0FBTztBQUVuQyxPQUFPLEtBQUssUUFBUSxNQUFNLGlCQUFpQixDQUFBO0FBRTNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFHdkMsTUFBTSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLE9BQU8sRUFDUCxXQUFXLEVBQ1gsWUFBWSxFQUNiLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztJQUNyQixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUM1RSxjQUFjLEVBQUUsUUFBUTtDQUN6QixDQUFDLENBQUE7QUF3Q0YsT0FBTztBQUNMOzs7Ozs7Ozs7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
|
|
@@ -0,0 +1,104 @@
|
|
|
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 GetSuccessShape<Action extends {
|
|
37
|
+
success?: S.Schema.Any;
|
|
38
|
+
}, RT extends "d" | "raw"> = RT extends "raw" ? S.Schema.Encoded<GetSuccess<Action>> : S.Schema.Type<GetSuccess<Action>>;
|
|
39
|
+
type GetFailure<T extends {
|
|
40
|
+
failure?: S.Schema.Any;
|
|
41
|
+
}> = T["failure"] extends never ? typeof S.Never : T["failure"];
|
|
42
|
+
type HandlerFull<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> = {
|
|
43
|
+
new (): {};
|
|
44
|
+
_tag: RT;
|
|
45
|
+
stack: string;
|
|
46
|
+
handler: (req: S.Schema.Type<Action>) => Effect<A, E, R>;
|
|
47
|
+
};
|
|
48
|
+
export interface Handler<Action extends AnyRequestModule, RT extends "raw" | "d", R> extends HandlerFull<Action, RT, GetSuccessShape<Action, RT>, S.Schema.Type<GetFailure<Action>> | S.ParseResult.ParseError, R> {
|
|
49
|
+
}
|
|
50
|
+
type AHandler<Action extends AnyRequestModule> = Handler<Action, any, any>;
|
|
51
|
+
type Filter<T> = {
|
|
52
|
+
[K in keyof T as T[K] extends S.Schema.All & {
|
|
53
|
+
success: S.Schema.Any;
|
|
54
|
+
failure: S.Schema.Any;
|
|
55
|
+
} ? K : never]: T[K];
|
|
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
|
+
type Match<Rsc extends Record<string, any>, CTXMap extends Record<string, any>, RT extends "raw" | "d", Key extends keyof Rsc, Context> = {
|
|
65
|
+
<A extends GetSuccessShape<Rsc[Key], RT>, R2 = never, E = never>(f: Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[Key], RT>, A, Handler<Rsc[Key], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
|
|
66
|
+
<A extends GetSuccessShape<Rsc[Key], RT>, R2 = never, E = never>(f: (req: S.Schema.Type<Rsc[Key]>) => Effect<A, E, R2>): HandleVoid<GetSuccessShape<Rsc[Key], RT>, A, Handler<Rsc[Key], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[Key]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
|
|
67
|
+
};
|
|
68
|
+
export type RouteMatcher<CTXMap extends Record<string, any>, Rsc extends Record<string, any>, Context> = {
|
|
69
|
+
[Key in keyof Filter<Rsc>]: Match<Rsc, CTXMap, "d", Key, Context> & {
|
|
70
|
+
success: Rsc[Key]["success"];
|
|
71
|
+
successRaw: S.SchemaClass<S.Schema.Encoded<Rsc[Key]["success"]>>;
|
|
72
|
+
failure: Rsc[Key]["failure"];
|
|
73
|
+
/**
|
|
74
|
+
* Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
|
|
75
|
+
*/
|
|
76
|
+
raw: Match<Rsc, CTXMap, "raw", Key, Context>;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
export declare const makeMiddleware: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends Array<Layer.Layer.Any>>(content: Middleware<Context, CTXMap, RMW, Layers>) => Middleware<Context, CTXMap, RMW, Layers>;
|
|
80
|
+
export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends Array<Layer.Layer.Any>>(middleware: Middleware<Context, CTXMap, RMW, Layers>, devMode: boolean) => {
|
|
81
|
+
matchAll: <T extends {
|
|
82
|
+
[key: string]: {
|
|
83
|
+
Router: {
|
|
84
|
+
router: Effect<HttpRouter.HttpRouter<any, any>, any, any>;
|
|
85
|
+
};
|
|
86
|
+
routes: Layer.Layer<any, any, any>;
|
|
87
|
+
moduleName: string;
|
|
88
|
+
};
|
|
89
|
+
}, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
|
|
90
|
+
layer: Layer.Layer<never, Layer.Layer.Error<(typeof handlers)[keyof typeof handlers]["routes"]>, Layer.Layer.Context<(typeof handlers)[keyof typeof handlers]["routes"]>>;
|
|
91
|
+
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>>;
|
|
92
|
+
};
|
|
93
|
+
matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
|
|
94
|
+
meta: {
|
|
95
|
+
moduleName: ModuleName;
|
|
96
|
+
};
|
|
97
|
+
}) => <E_1, R_1, THandlers extends { [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, TLayers extends NonEmptyArray<Layer.Layer.Any>>(layers: TLayers, make: (requests: RouteMatcher<CTXMap, Rsc, Context>) => Effect<THandlers, E_1, R_1>) => {
|
|
98
|
+
moduleName: ModuleName;
|
|
99
|
+
Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided> | Exclude<RPCRouteR<{ [K in keyof Filter<Rsc>]: Rpc.Rpc<Rsc[K], _R<ReturnType<THandlers[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
|
|
100
|
+
routes: Layer.Layer<RouterShape<Rsc>, E_1 | { [k in keyof TLayers]: Layer.Layer.Error<TLayers[k]>; }[number], { [k_1 in keyof TLayers]: Layer.Layer.Context<TLayers[k_1]>; }[number] | Exclude<RMW, { [k_2 in keyof Layers]: Layer.Layer.Success<Layers[k_2]>; }[number] | { [k_3 in keyof TLayers]: Layer.Layer.Success<TLayers[k_3]>; }[number]> | Exclude<R_1, { [k_2 in keyof Layers]: Layer.Layer.Success<Layers[k_2]>; }[number] | { [k_3 in keyof TLayers]: Layer.Layer.Success<TLayers[k_3]>; }[number]>>;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export {};
|
|
104
|
+
//# sourceMappingURL=routing4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing4.d.ts","sourceRoot":"","sources":["../../src/api/routing4.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Rpc, RpcRouter } from "@effect/rpc";
|
|
2
|
+
import { Cause, Chunk, Context, Effect, FiberRef, flow, Layer, Predicate, S, Schema, Stream } from "effect-app";
|
|
3
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
4
|
+
import { pretty, typedKeysOf, typedValuesOf } from "effect-app/utils";
|
|
5
|
+
import { logError, reportError } from "../errorReporter.js";
|
|
6
|
+
import { InfraLogger } from "../logger.js";
|
|
7
|
+
import { makeRpc } from "./routing/DynamicMiddleware.js";
|
|
8
|
+
const logRequestError = logError("Request");
|
|
9
|
+
const reportRequestError = reportError("Request");
|
|
10
|
+
/**
|
|
11
|
+
* Plain jane JSON version
|
|
12
|
+
* @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
|
|
13
|
+
*/
|
|
14
|
+
export const toHttpApp = (self, options) => {
|
|
15
|
+
const handler = RpcRouter.toHandler(self, options);
|
|
16
|
+
return Effect.withFiberRuntime((fiber) => {
|
|
17
|
+
const context = fiber.getFiberRef(FiberRef.currentContext);
|
|
18
|
+
const request = Context.unsafeGet(context, HttpServerRequest.HttpServerRequest);
|
|
19
|
+
return Effect.flatMap(request.json, (_) => handler(_).pipe(Stream.provideContext(context), Stream.runCollect, Effect.map((_) => Chunk.toReadonlyArray(_)), Effect.andThen((_) => {
|
|
20
|
+
let status = 200;
|
|
21
|
+
for (const r of _.flat()) {
|
|
22
|
+
if (typeof r === "number")
|
|
23
|
+
continue;
|
|
24
|
+
const results = Array.isArray(r) ? r : [r];
|
|
25
|
+
if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Die")) {
|
|
26
|
+
status = 500;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (results.some((_) => _._tag === "Failure" && _.cause._tag === "Fail")) {
|
|
30
|
+
status = 422; // 418
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return HttpServerResponse.json(_, { status });
|
|
35
|
+
}), Effect.orDie, Effect.tapDefect(reportError("RPCHttpApp"))));
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
export const RouterSymbol = Symbol();
|
|
39
|
+
// export interface RouteMatcher<
|
|
40
|
+
// Filtered extends Record<string, any>,
|
|
41
|
+
// CTXMap extends Record<string, any>,
|
|
42
|
+
// Rsc extends Filtered
|
|
43
|
+
// > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
|
|
44
|
+
export const makeMiddleware = (content) => content;
|
|
45
|
+
export const makeRouter = (middleware, devMode) => {
|
|
46
|
+
function matchFor(rsc) {
|
|
47
|
+
const meta = rsc.meta;
|
|
48
|
+
const filtered = typedKeysOf(rsc).reduce((acc, cur) => {
|
|
49
|
+
if (Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
|
|
50
|
+
acc[cur] = rsc[cur];
|
|
51
|
+
}
|
|
52
|
+
return acc;
|
|
53
|
+
}, {});
|
|
54
|
+
const items = typedKeysOf(filtered).reduce((prev, cur) => {
|
|
55
|
+
;
|
|
56
|
+
prev[cur] = Object.assign((fnOrEffect) => {
|
|
57
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
58
|
+
return Effect.isEffect(fnOrEffect)
|
|
59
|
+
? class {
|
|
60
|
+
static stack = stack;
|
|
61
|
+
static _tag = "d";
|
|
62
|
+
static handler = () => fnOrEffect;
|
|
63
|
+
}
|
|
64
|
+
: class {
|
|
65
|
+
static stack = stack;
|
|
66
|
+
static _tag = "d";
|
|
67
|
+
static handler = fnOrEffect;
|
|
68
|
+
};
|
|
69
|
+
}, {
|
|
70
|
+
success: rsc[cur].success,
|
|
71
|
+
successRaw: S.encodedSchema(rsc[cur].success),
|
|
72
|
+
failure: rsc[cur].failure,
|
|
73
|
+
raw: // "Raw" variations are for when you don't want to decode just to encode it again on the response
|
|
74
|
+
// e.g for direct projection from DB
|
|
75
|
+
// but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
|
|
76
|
+
(fnOrEffect) => {
|
|
77
|
+
const stack = new Error().stack?.split("\n").slice(2).join("\n");
|
|
78
|
+
return Effect.isEffect(fnOrEffect)
|
|
79
|
+
? class {
|
|
80
|
+
static stack = stack;
|
|
81
|
+
static _tag = "raw";
|
|
82
|
+
static handler = () => fnOrEffect;
|
|
83
|
+
}
|
|
84
|
+
: class {
|
|
85
|
+
static stack = stack;
|
|
86
|
+
static _tag = "raw";
|
|
87
|
+
static handler = (req, ctx) => fnOrEffect(req, { ...ctx, Response: rsc[cur].success });
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return prev;
|
|
92
|
+
}, {});
|
|
93
|
+
const effect = (layers, make) => {
|
|
94
|
+
const r = (class Router extends HttpRouter.Tag(`${meta.moduleName}Router`)() {
|
|
95
|
+
});
|
|
96
|
+
const layer = r.use((router) => Effect.gen(function* () {
|
|
97
|
+
const controllers = yield* make(items);
|
|
98
|
+
const rpc = yield* makeRpc(middleware);
|
|
99
|
+
// return make.pipe(Effect.map((c) => controllers(c, layers)))
|
|
100
|
+
const mapped = typedKeysOf(filtered).reduce((acc, cur) => {
|
|
101
|
+
const handler = controllers[cur];
|
|
102
|
+
const req = rsc[cur];
|
|
103
|
+
acc[cur] = rpc.effect(handler._tag === "raw"
|
|
104
|
+
? class extends req {
|
|
105
|
+
static success = S.encodedSchema(req.success);
|
|
106
|
+
get [Schema.symbolSerializable]() {
|
|
107
|
+
return this.constructor;
|
|
108
|
+
}
|
|
109
|
+
get [Schema.symbolWithResult]() {
|
|
110
|
+
return {
|
|
111
|
+
failure: req.failure,
|
|
112
|
+
success: S.encodedSchema(req.success)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
: req, (req) => Effect
|
|
117
|
+
.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
|
|
118
|
+
prev[key] = key === "password"
|
|
119
|
+
? "<redacted>"
|
|
120
|
+
: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
121
|
+
? typeof value === "string" && value.length > 256
|
|
122
|
+
? (value.substring(0, 253) + "...")
|
|
123
|
+
: value
|
|
124
|
+
: Array.isArray(value)
|
|
125
|
+
? `Array[${value.length}]`
|
|
126
|
+
: value === null || value === undefined
|
|
127
|
+
? `${value}`
|
|
128
|
+
: typeof value === "object" && value
|
|
129
|
+
? `Object[${Object.keys(value).length}]`
|
|
130
|
+
: typeof value;
|
|
131
|
+
return prev;
|
|
132
|
+
}, {}))
|
|
133
|
+
.pipe(
|
|
134
|
+
// can't use andThen due to some being a function and effect
|
|
135
|
+
Effect.zipRight(handler.handler(req)), Effect.tapErrorCause((cause) => Cause.isFailure(cause) ? logRequestError(cause) : Effect.void), Effect.tapDefect((cause) => Effect
|
|
136
|
+
.all([
|
|
137
|
+
reportRequestError(cause, {
|
|
138
|
+
action: `${meta.moduleName}.${req._tag}`
|
|
139
|
+
}),
|
|
140
|
+
Rpc.currentHeaders.pipe(Effect.andThen((headers) => {
|
|
141
|
+
return InfraLogger
|
|
142
|
+
.logError("Finished request", cause)
|
|
143
|
+
.pipe(Effect.annotateLogs({
|
|
144
|
+
action: `${meta.moduleName}.${req._tag}`,
|
|
145
|
+
req: pretty(req),
|
|
146
|
+
headers: pretty(headers)
|
|
147
|
+
// resHeaders: pretty(
|
|
148
|
+
// Object
|
|
149
|
+
// .entries(headers)
|
|
150
|
+
// .reduce((prev, [key, value]) => {
|
|
151
|
+
// prev[key] = value && typeof value === "string" ? snipString(value) : value
|
|
152
|
+
// return prev
|
|
153
|
+
// }, {} as Record<string, any>)
|
|
154
|
+
// )
|
|
155
|
+
}));
|
|
156
|
+
}))
|
|
157
|
+
])), devMode ? (_) => _ : Effect.catchAllDefect(() => Effect.die("Internal Server Error")), Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
|
|
158
|
+
captureStackTrace: () => handler.stack
|
|
159
|
+
})), meta.moduleName); // TODO
|
|
160
|
+
return acc;
|
|
161
|
+
}, {});
|
|
162
|
+
const rpcRouter = RpcRouter.make(...Object.values(mapped));
|
|
163
|
+
const httpApp = toHttpApp(rpcRouter, {
|
|
164
|
+
spanPrefix: rsc
|
|
165
|
+
.meta
|
|
166
|
+
.moduleName + "."
|
|
167
|
+
});
|
|
168
|
+
yield* router
|
|
169
|
+
.all("/", httpApp,
|
|
170
|
+
// TODO: not queries.
|
|
171
|
+
{ uninterruptible: true });
|
|
172
|
+
}));
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
174
|
+
const routes = layer.pipe(Layer.provideMerge(r.Live), layers ? Layer.provide(layers) : (_) => _,
|
|
175
|
+
// TODO: only provide to the middleware?
|
|
176
|
+
middleware.dependencies ? Layer.provide(middleware.dependencies) : (_) => _);
|
|
177
|
+
// Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
|
|
178
|
+
return {
|
|
179
|
+
moduleName: meta.moduleName,
|
|
180
|
+
Router: r,
|
|
181
|
+
routes
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
return effect;
|
|
185
|
+
}
|
|
186
|
+
function matchAll(handlers, requestLayer) {
|
|
187
|
+
const routers = typedValuesOf(handlers);
|
|
188
|
+
const rootRouter = class extends HttpRouter.Tag("RootRouter")() {
|
|
189
|
+
};
|
|
190
|
+
const r = rootRouter
|
|
191
|
+
.use((router) => Effect.gen(function* () {
|
|
192
|
+
for (const route of routers) {
|
|
193
|
+
yield* router.mount(("/rpc/" + route.moduleName), yield* route
|
|
194
|
+
.Router
|
|
195
|
+
.router
|
|
196
|
+
.pipe(Effect.map(HttpRouter.use(flow(Effect.provide(requestLayer))))));
|
|
197
|
+
}
|
|
198
|
+
}))
|
|
199
|
+
.pipe(Layer.provide(routers.map((r) => r.routes).flat()));
|
|
200
|
+
return {
|
|
201
|
+
layer: r,
|
|
202
|
+
Router: rootRouter
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return { matchAll, matchFor };
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZzQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3JvdXRpbmc0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRixPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBRXhELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUMzQyxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQWVqRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBMEMsSUFBTyxFQUFFLE9BRTNFLEVBR0MsRUFBRTtJQUNGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxR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
|