@effect-app/infra 3.0.3 → 3.0.5

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/Emailer/service.d.ts +1 -1
  3. package/dist/MainFiberSet.d.ts +1 -1
  4. package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
  5. package/dist/Model/Repository/internal/internal.js +2 -2
  6. package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
  7. package/dist/Operations.d.ts +1 -1
  8. package/dist/QueueMaker/errors.d.ts +1 -1
  9. package/dist/QueueMaker/errors.d.ts.map +1 -1
  10. package/dist/RequestFiberSet.d.ts +1 -1
  11. package/dist/Store/service.d.ts +2 -2
  12. package/dist/adapters/SQL/Model.d.ts +6 -6
  13. package/dist/adapters/ServiceBus.d.ts +2 -2
  14. package/dist/adapters/memQueue.d.ts +1 -1
  15. package/dist/api/routing/middleware/RouterMiddleware.d.ts +2 -3
  16. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  17. package/dist/api/routing/middleware/middleware.d.ts +5 -5
  18. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  19. package/dist/api/routing/middleware/middleware.js +6 -6
  20. package/dist/api/routing.d.ts +2 -2
  21. package/dist/api/routing.d.ts.map +1 -1
  22. package/dist/api/routing.js +2 -3
  23. package/package.json +6 -6
  24. package/src/Model/Repository/internal/internal.ts +1 -2
  25. package/src/api/routing/middleware/RouterMiddleware.ts +2 -3
  26. package/src/api/routing/middleware/middleware.ts +5 -5
  27. package/src/api/routing.ts +5 -6
  28. package/test/controller.test.ts +73 -63
  29. package/test/dist/controller.test.d.ts.map +1 -1
  30. package/test/dist/fixtures.d.ts +11 -10
  31. package/test/dist/fixtures.d.ts.map +1 -1
  32. package/test/dist/fixtures.js +6 -6
  33. package/test/dist/requires.test.d.ts.map +1 -1
  34. package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
  35. package/test/fixtures.ts +5 -5
  36. package/test/rawQuery.test.ts +4 -4
  37. package/test/requires.test.ts +6 -5
  38. package/test/rpc-multi-middleware.test.ts +29 -35
  39. package/wallaby.cjs +0 -1
@@ -3,13 +3,12 @@
3
3
  /* eslint-disable @typescript-eslint/no-explicit-any */
4
4
  import { type RpcMiddleware } from "@effect/rpc"
5
5
  import { type Context, type Layer } from "effect-app"
6
- import type { GetContextConfig, RPCContextMap } from "effect-app/client/req"
7
- import { type MiddlewareMakerId } from "effect-app/rpc"
6
+ import { type GetContextConfig, type MiddlewareMakerId, type RpcContextMap } from "effect-app/rpc"
8
7
  // module:
9
8
  //
10
9
 
11
10
  export type RouterMiddleware<
12
- RequestContextMap extends Record<string, RPCContextMap.Any>, // what services will the middlware provide dynamically to the next, or raise errors.
11
+ RequestContextMap extends Record<string, RpcContextMap.Any>, // what services will the middlware provide dynamically to the next, or raise errors.
13
12
  MakeMiddlewareE, // what the middleware construction can fail with
14
13
  MakeMiddlewareR, // what the middlware requires to be constructed
15
14
  ContextProviderA, // what the context provider provides
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Cause, Duration, Effect, Layer, ParseResult, Request, Schedule, type Schema } from "effect"
3
- import * as MiddlewareNative from "effect-app/rpc/middleware-native"
3
+ import { ConfigureInterruptibilityMiddleware, DevMode, LoggerMiddleware, RequestCacheMiddleware } from "effect-app/middleware"
4
4
  import { pretty } from "effect-app/utils"
5
5
  import { logError, reportError } from "../../../errorReporter.js"
6
6
  import { InfraLogger } from "../../../logger.js"
@@ -18,7 +18,7 @@ export const RequestCacheLayers = Layer.mergeAll(
18
18
  )
19
19
 
20
20
  export const RequestCacheMiddlewareLive = Layer.succeed(
21
- MiddlewareNative.RequestCacheMiddleware,
21
+ RequestCacheMiddleware,
22
22
  (effect) => effect.pipe(Effect.provide(RequestCacheLayers))
23
23
  )
24
24
 
@@ -28,7 +28,7 @@ const optimisticConcurrencySchedule = Schedule.once.pipe(
28
28
  )
29
29
 
30
30
  export const ConfigureInterruptibilityMiddlewareLive = Layer.effect(
31
- MiddlewareNative.ConfigureInterruptibilityMiddleware,
31
+ ConfigureInterruptibilityMiddleware,
32
32
  Effect.gen(function*() {
33
33
  const cache = new Map()
34
34
  const getCached = (key: string, schema: Schema.Schema.Any) => {
@@ -51,9 +51,9 @@ export const ConfigureInterruptibilityMiddlewareLive = Layer.effect(
51
51
  )
52
52
 
53
53
  export const LoggerMiddlewareLive = Layer.effect(
54
- MiddlewareNative.LoggerMiddleware,
54
+ LoggerMiddleware,
55
55
  Effect.gen(function*() {
56
- const devMode = yield* MiddlewareNative.DevMode
56
+ const devMode = yield* DevMode
57
57
  return (effect, { headers, payload, rpc }) =>
58
58
  Effect
59
59
  .annotateCurrentSpan({
@@ -4,9 +4,9 @@
4
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
5
5
  import { Rpc, RpcGroup, type RpcSerialization, RpcServer } from "@effect/rpc"
6
6
  import { type Array, Effect, Layer, type NonEmptyReadonlyArray, Predicate, S, Schema, type Scope } from "effect-app"
7
- import type { GetEffectContext, GetEffectError, RPCContextMap } from "effect-app/client/req"
8
7
  import { type HttpHeaders } from "effect-app/http"
9
- import { DevMode } from "effect-app/rpc"
8
+ import { DevMode } from "effect-app/middleware"
9
+ import { type GetEffectContext, type GetEffectError, type RpcContextMap } from "effect-app/rpc"
10
10
  import { type TypeTestId } from "effect-app/TypeTest"
11
11
  import { typedKeysOf, typedValuesOf } from "effect-app/utils"
12
12
  import { type Service } from "effect/Effect"
@@ -93,7 +93,7 @@ type FilterRequestModules<T> = {
93
93
  [K in keyof T as T[K] extends AnyRequestModule ? K : never]: T[K]
94
94
  }
95
95
 
96
- type RPCRouteR<
96
+ type RpcRouteR<
97
97
  T extends [any, (req: any, headers: HttpHeaders.Headers) => Effect<any, any, any>]
98
98
  > = T extends [
99
99
  any,
@@ -153,7 +153,7 @@ export type RouteMatcher<
153
153
  }
154
154
 
155
155
  export const makeRouter = <
156
- RequestContextMap extends Record<string, RPCContextMap.Any>,
156
+ RequestContextMap extends Record<string, RpcContextMap.Any>,
157
157
  MakeMiddlewareE,
158
158
  MakeMiddlewareR,
159
159
  ContextProviderA,
@@ -347,7 +347,6 @@ export const makeRouter = <
347
347
  match: any
348
348
  ) => Effect<THandlers, MakeE, MakeR> | Generator<YieldWrap<Effect<any, MakeE, MakeR>>, THandlers, any>
349
349
  ) => {
350
- console.log({ dependencies, make })
351
350
  const dependenciesL = (dependencies ? Layer.mergeAll(...dependencies as any) : Layer.empty) as Layer.Layer<
352
351
  LayerUtils.GetLayersSuccess<MakeDependencies>,
353
352
  LayerUtils.GetLayersError<MakeDependencies>,
@@ -428,7 +427,7 @@ export const makeRouter = <
428
427
  })) as unknown as Layer<
429
428
  { [K in keyof RequestModules]: Rpc.Handler<K> },
430
429
  MakeE,
431
- RPCRouteR<typeof mapped[keyof typeof mapped]>
430
+ RpcRouteR<typeof mapped[keyof typeof mapped]>
432
431
  >
433
432
 
434
433
  return RpcServer
@@ -5,91 +5,101 @@ import { type RpcSerialization } from "@effect/rpc"
5
5
  import { expect, expectTypeOf, it } from "@effect/vitest"
6
6
  import { Context, Effect, Layer, S, Scope } from "effect-app"
7
7
  import { InvalidStateError, makeRpcClient, NotLoggedInError, UnauthorizedError } from "effect-app/client"
8
- import { DefaultGenericMiddlewares, makeMiddleware, TagService } from "effect-app/rpc"
8
+ import { DefaultGenericMiddlewares } from "effect-app/middleware"
9
+ import { makeMiddleware, Tag } from "effect-app/rpc"
9
10
  import { TypeTestId } from "effect-app/TypeTest"
10
11
  import { DefaultGenericMiddlewaresLive } from "../src/api/routing/middleware.js"
11
12
  import { sort } from "../src/api/routing/tsort.js"
12
13
  import { AllowAnonymous, AllowAnonymousLive, CustomError1, RequestContextMap, RequireRoles, RequireRolesLive, Some, SomeElse, SomeService, Test, TestLive } from "./fixtures.js"
13
14
 
14
15
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
15
- class MyContextProvider extends TagService<MyContextProvider, {
16
- provides: Some
17
- requires: SomeElse
18
- }>()("MyContextProvider", {})({
19
- effect: Effect.gen(function*() {
20
- yield* SomeService
21
- if (Math.random() > 0.5) return yield* new CustomError1()
22
-
23
- return Effect.fnUntraced(function*(effect) {
24
- yield* SomeElse
25
- // the only requirements you can have are the one provided by HttpLayerRouter.Provided
26
- yield* Scope.Scope
27
-
28
- yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
29
- yield* Effect.succeed("this is a generator")
30
-
31
- // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
32
- // yield* SomeElse
33
-
34
- // currently the effectful context provider cannot trigger an error when building the per request context
35
- // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
36
- // if (Math.random() > 0.5) return yield* new CustomError2()
37
-
38
- return yield* Effect.provideService(effect, Some, new Some({ a: 1 }))
16
+ class MyContextProvider extends Context.DefineService(
17
+ Tag<MyContextProvider, {
18
+ provides: Some
19
+ requires: SomeElse
20
+ }>()("MyContextProvider", {}),
21
+ {
22
+ effect: Effect.gen(function*() {
23
+ yield* SomeService
24
+ if (Math.random() > 0.5) return yield* new CustomError1()
25
+
26
+ return Effect.fnUntraced(function*(effect) {
27
+ yield* SomeElse
28
+ // the only requirements you can have are the one provided by HttpLayerRouter.Provided
29
+ yield* Scope.Scope
30
+
31
+ yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
32
+ yield* Effect.succeed("this is a generator")
33
+
34
+ // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
35
+ // yield* SomeElse
36
+
37
+ // currently the effectful context provider cannot trigger an error when building the per request context
38
+ // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
39
+ // if (Math.random() > 0.5) return yield* new CustomError2()
40
+
41
+ return yield* Effect.provideService(effect, Some, new Some({ a: 1 }))
42
+ })
39
43
  })
40
- })
41
- }) {}
44
+ }
45
+ ) {}
42
46
 
43
47
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
44
- class MyContextProvider3 extends TagService<MyContextProvider3, {
45
- provides: Some
46
- requires: SomeElse
47
- }>()("MyContextProvider3", {})({
48
- dependencies: [Layer.effect(SomeService, SomeService.make)],
49
- effect: Effect.gen(function*() {
50
- yield* SomeService
51
- if (Math.random() > 0.5) return yield* new CustomError1()
52
-
53
- return Effect.fnUntraced(function*(effect) {
54
- yield* SomeElse
55
- // the only requirements you can have are the one provided by HttpLayerRouter.Provided
56
- yield* Scope.Scope
57
-
58
- yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
59
- yield* Effect.succeed("this is a generator")
60
-
61
- // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
62
- // yield* SomeElse
63
-
64
- // currently the effectful context provider cannot trigger an error when building the per request context
65
- // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
66
- // if (Math.random() > 0.5) return yield* new CustomError2()
67
-
68
- return yield* Effect.provideService(effect, Some, new Some({ a: 1 }))
48
+ class MyContextProvider3 extends Context.DefineService(
49
+ Tag<MyContextProvider3, {
50
+ provides: Some
51
+ requires: SomeElse
52
+ }>()("MyContextProvider3", {}),
53
+ {
54
+ dependencies: [Layer.effect(SomeService, SomeService.make)],
55
+ effect: Effect.gen(function*() {
56
+ yield* SomeService
57
+ if (Math.random() > 0.5) return yield* new CustomError1()
58
+
59
+ return Effect.fnUntraced(function*(effect) {
60
+ yield* SomeElse
61
+ // the only requirements you can have are the one provided by HttpLayerRouter.Provided
62
+ yield* Scope.Scope
63
+
64
+ yield* Effect.logInfo("MyContextProviderGen", "this is a generator")
65
+ yield* Effect.succeed("this is a generator")
66
+
67
+ // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
68
+ // yield* SomeElse
69
+
70
+ // currently the effectful context provider cannot trigger an error when building the per request context
71
+ // this is allowed here but mergeContextProviders/MergedContextProvider will trigger an error
72
+ // if (Math.random() > 0.5) return yield* new CustomError2()
73
+
74
+ return yield* Effect.provideService(effect, Some, new Some({ a: 1 }))
75
+ })
69
76
  })
70
- })
71
- }) {}
77
+ }
78
+ ) {}
72
79
 
73
80
  expectTypeOf(MyContextProvider3.Default).toEqualTypeOf<Layer.Layer<MyContextProvider3, CustomError1, never>>()
74
81
 
75
82
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
76
- class MyContextProvider2 extends TagService<MyContextProvider2, { provides: SomeElse }>()("MyContextProvider2", {})({
77
- effect: Effect.gen(function*() {
78
- if (Math.random() > 0.5) return yield* new CustomError1()
83
+ class MyContextProvider2 extends Context.DefineService(
84
+ Tag<MyContextProvider2, { provides: SomeElse }>()("MyContextProvider2", {}),
85
+ {
86
+ effect: Effect.gen(function*() {
87
+ if (Math.random() > 0.5) return yield* new CustomError1()
79
88
 
80
- return Effect.fnUntraced(function*(effect) {
81
- // we test without dependencies, so that we end up with an R of never.
89
+ return Effect.fnUntraced(function*(effect) {
90
+ // we test without dependencies, so that we end up with an R of never.
82
91
 
83
- return yield* Effect.provideService(effect, SomeElse, new SomeElse({ b: 2 }))
92
+ return yield* Effect.provideService(effect, SomeElse, new SomeElse({ b: 2 }))
93
+ })
84
94
  })
85
- })
86
- }) {}
95
+ }
96
+ ) {}
87
97
 
88
98
  //
89
99
 
90
100
  const Str = Context.GenericTag<"str", "str">("str")
91
101
 
92
- export class BogusMiddleware extends TagService<BogusMiddleware>()("BogusMiddleware", {})({
102
+ export class BogusMiddleware extends Context.DefineService(Tag<BogusMiddleware>()("BogusMiddleware", {}), {
93
103
  effect: Effect.gen(function*() {
94
104
  yield* Str
95
105
  // yield* Effect.context<"test-dep">()
@@ -1 +1 @@
1
- {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAC7F,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,EAAW,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAM7D,OAAO,EAAE,cAAc,EAAsB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAoB,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAY,MAAM,eAAe,CAAA;;cAgEpG,QAAQ;;;;AAApF,cAAM,kBAAmB,SAAQ,uBAU/B;CAAG;;;;;;;AAML,qBAAa,eAAgB,SAAQ,oBAUnC;CACD;AAgED,eAAO,MAAM,WAAW;;;;;;YAIM,CAAA;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI/B,CAAA;;;;;;;;;;AAEF,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;AACtE,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;;;AAEtE,qBAAa,WAAY,SAAQ,gBAEV;CAAG;;;;;;;;;;;;AAgB1B,qBAAa,YAAa,SAAQ,iBAET;CAAG;;;;;;;;;;;;AAE5B,qBAAa,aAAc,SAAQ,kBAEA;CAAG;;;;;AAItC,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAUL,eAAO,MAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAE,QAAQ;;qGAK9B,CAAA;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGd,CAAA"}
1
+ {"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAC7F,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,EAAW,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAO7D,OAAO,EAAE,cAAc,EAAsB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAoB,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAY,MAAM,eAAe,CAAA;;cAuE1I,QAAQ;;;;AAD9C,cAAM,kBAAmB,SAAQ,uBAahC;CAAG;;;;;;;AAMJ,qBAAa,eAAgB,SAAQ,oBAUnC;CACD;AAgED,eAAO,MAAM,WAAW;;;;;;YAIM,CAAA;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,IAAI,CAAA;IACrB,iEAAiE;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B,CAAA;AACD,eAAO,MAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAI/B,CAAA;;;;;;;;;;AAEF,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;AACtE,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;;;AAEtE,qBAAa,WAAY,SAAQ,gBAEV;CAAG;;;;;;;;;;;;AAgB1B,qBAAa,YAAa,SAAQ,iBAET;CAAG;;;;;;;;;;;;AAE5B,qBAAa,aAAc,SAAQ,kBAEA;CAAG;;;;;AAItC,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG;;;;;AASL,qBAAa,aAAc,SAAQ,kBAOjC;CAAG;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAKrC;CAAG;AAUL,eAAO,MAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAE,QAAQ;;qGAK9B,CAAA;AAED,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGd,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { Context, Effect, Layer, S, Scope } from "effect-app";
2
- import { NotLoggedInError, RPCContextMap, UnauthorizedError } from "effect-app/client";
2
+ import { NotLoggedInError, UnauthorizedError } from "effect-app/client";
3
+ import { RpcContextMap } from "effect-app/rpc";
3
4
  declare const UserProfile_base: S.EnhancedClass<UserProfile, {
4
5
  id: typeof S.String;
5
6
  roles: S.Array$<typeof S.String> & {
@@ -36,7 +37,7 @@ declare const Some_base: (abstract new (service: {
36
37
  } & {
37
38
  use: <X>(body: (_: {
38
39
  a: number;
39
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, Some | R_4> : Effect.Effect<X, never, Some>;
40
+ }) => X) => X extends Effect.Effect<infer A, infer E_1, infer R_3> ? Effect.Effect<A, E_1, Some | R_3> : Effect.Effect<X, never, Some>;
40
41
  };
41
42
  export declare class Some extends Some_base {
42
43
  }
@@ -62,7 +63,7 @@ declare const SomeElse_base: (abstract new (service: {
62
63
  } & {
63
64
  use: <X>(body: (_: {
64
65
  b: number;
65
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | SomeElse> : Effect.Effect<X, never, SomeElse>;
66
+ }) => X) => X extends Effect.Effect<infer A, infer E_1, infer R_3> ? Effect.Effect<A, E_1, R_3 | SomeElse> : Effect.Effect<X, never, SomeElse>;
66
67
  };
67
68
  export declare class SomeElse extends SomeElse_base {
68
69
  }
@@ -88,7 +89,7 @@ declare const SomeService_base: (abstract new (service: {
88
89
  } & {
89
90
  use: <X>(body: (_: {
90
91
  a: number;
91
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | SomeService> : Effect.Effect<X, never, SomeService>;
92
+ }) => X) => X extends Effect.Effect<infer A, infer E_1, infer R_3> ? Effect.Effect<A, E_1, R_3 | SomeService> : Effect.Effect<X, never, SomeService>;
92
93
  };
93
94
  export declare class SomeService extends SomeService_base {
94
95
  }
@@ -105,15 +106,15 @@ export declare class SomeElseMiddleware extends SomeElseMiddleware_base {
105
106
  }
106
107
  export declare const SomeElseMiddlewareLive: Layer.Layer<SomeElseMiddleware, never, never>;
107
108
  export declare const RequestContextMap: {
108
- readonly allowAnonymous: RPCContextMap.Inverted<[typeof UserProfile], typeof NotLoggedInError>;
109
- readonly requireRoles: RPCContextMap.Custom<never, typeof UnauthorizedError, string[]>;
110
- readonly test: RPCContextMap.RPCContextMap<never, typeof S.Never>;
109
+ readonly allowAnonymous: RpcContextMap.Inverted<[typeof UserProfile], typeof NotLoggedInError>;
110
+ readonly requireRoles: RpcContextMap.Custom<never, typeof UnauthorizedError, string[]>;
111
+ readonly test: RpcContextMap.RpcContextMap<never, typeof S.Never>;
111
112
  };
112
113
  type _RequestContextMap = typeof RequestContextMap;
113
114
  export interface RequestContextMap extends _RequestContextMap {
114
115
  }
115
116
  declare const AllowAnonymous_base: import("effect-app/rpc").TagClass<AllowAnonymous, "AllowAnonymous", {
116
- readonly dynamic: import("effect-app/rpc").RpcDynamic<"allowAnonymous", RPCContextMap.Inverted<[typeof UserProfile], typeof NotLoggedInError>>;
117
+ readonly dynamic: import("effect-app/rpc").RpcDynamic<"allowAnonymous", RpcContextMap.Inverted<[typeof UserProfile], typeof NotLoggedInError>>;
117
118
  }, {
118
119
  requires: SomeElse;
119
120
  }>;
@@ -121,7 +122,7 @@ export declare class AllowAnonymous extends AllowAnonymous_base {
121
122
  }
122
123
  export declare const AllowAnonymousLive: Layer.Layer<AllowAnonymous, never, never>;
123
124
  declare const RequireRoles_base: import("effect-app/rpc").TagClass<RequireRoles, "RequireRoles", {
124
- readonly dynamic: import("effect-app/rpc").RpcDynamic<"requireRoles", RPCContextMap.Custom<never, typeof UnauthorizedError, string[]>>;
125
+ readonly dynamic: import("effect-app/rpc").RpcDynamic<"requireRoles", RpcContextMap.Custom<never, typeof UnauthorizedError, string[]>>;
125
126
  readonly dependsOn: readonly [typeof AllowAnonymous];
126
127
  }, {
127
128
  requires: never;
@@ -131,7 +132,7 @@ export declare class RequireRoles extends RequireRoles_base {
131
132
  }
132
133
  export declare const RequireRolesLive: Layer.Layer<RequireRoles, never, SomeService>;
133
134
  declare const Test_base: import("effect-app/rpc").TagClass<Test, "Test", {
134
- readonly dynamic: import("effect-app/rpc").RpcDynamic<"test", RPCContextMap.RPCContextMap<never, typeof S.Never>>;
135
+ readonly dynamic: import("effect-app/rpc").RpcDynamic<"test", RpcContextMap.RpcContextMap<never, typeof S.Never>>;
135
136
  }, {
136
137
  requires: never;
137
138
  provides: never;
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;;;;;;;;;;;;;AAItF,qBAAa,WAAY,SAAQ,gBAKhC;CACA;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,IAAK,SAAQ,SAA2D;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;AACxF,qBAAa,QAAS,SAAQ,aAAmE;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;AAEpG,qBAAa,WAAY,SAAQ,gBAAgE;CAAG;;cAGhC,IAAI;;AAAxE,qBAAa,cAAe,SAAQ,mBAA+D;CAClG;AAED,eAAO,MAAM,kBAAkB,2CAM9B,CAAA;;cAE2E,QAAQ;;AAApF,qBAAa,kBAAmB,SAAQ,uBAA2E;CAAG;AAEtH,eAAO,MAAM,sBAAsB,+CAUlC,CAAA;AASD,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAA;AAEV,KAAK,kBAAkB,GAAG,OAAO,iBAAiB,CAAA;AAClD,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;CAAG;;;;cAEI,QAAQ;;AAA5E,qBAAa,cAAe,SAAQ,mBAElC;CAAG;AAEL,eAAO,MAAM,kBAAkB,2CAyB9B,CAAA;;;;;;;;AAID,qBAAa,YAAa,SAAQ,iBAKhC;CAAG;AAEL,eAAO,MAAM,gBAAgB,+CAuB5B,CAAA;;;;;;;AAGD,qBAAa,IAAK,SAAQ,SAExB;CAAG;AAEL,eAAO,MAAM,QAAQ,iCAOpB,CAAA;;;;AAED,qBAAa,YAAa,SAAQ,iBAAmD;CAAG;;;;AACxF,qBAAa,YAAa,SAAQ,iBAAmD;CAAG"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAyB,aAAa,EAAO,MAAM,gBAAgB,CAAA;;;;;;;;;;;;;AAG1E,qBAAa,WAAY,SAAQ,gBAKhC;CACA;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,IAAK,SAAQ,SAA2D;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;AACxF,qBAAa,QAAS,SAAQ,aAAmE;CAAG;;;;;;;;;;;;;;;;;;;;;;;;;AAEpG,qBAAa,WAAY,SAAQ,gBAAgE;CAAG;;cAGhC,IAAI;;AAAxE,qBAAa,cAAe,SAAQ,mBAA+D;CAClG;AAED,eAAO,MAAM,kBAAkB,2CAM9B,CAAA;;cAE2E,QAAQ;;AAApF,qBAAa,kBAAmB,SAAQ,uBAA2E;CAAG;AAEtH,eAAO,MAAM,sBAAsB,+CAUlC,CAAA;AASD,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAA;AAEV,KAAK,kBAAkB,GAAG,OAAO,iBAAiB,CAAA;AAClD,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;CAAG;;;;cAEI,QAAQ;;AAA5E,qBAAa,cAAe,SAAQ,mBAElC;CAAG;AAEL,eAAO,MAAM,kBAAkB,2CAyB9B,CAAA;;;;;;;;AAID,qBAAa,YAAa,SAAQ,iBAKhC;CAAG;AAEL,eAAO,MAAM,gBAAgB,+CAuB5B,CAAA;;;;;;;AAGD,qBAAa,IAAK,SAAQ,SAExB;CAAG;AAEL,eAAO,MAAM,QAAQ,iCAOpB,CAAA;;;;AAED,qBAAa,YAAa,SAAQ,iBAAmD;CAAG;;;;AACxF,qBAAa,YAAa,SAAQ,iBAAmD;CAAG"}
@@ -1,6 +1,6 @@
1
1
  import { Context, Effect, Layer, S, Scope } from "effect-app";
2
- import { NotLoggedInError, RPCContextMap, UnauthorizedError } from "effect-app/client";
3
- import { contextMap, getConfig, Tag } from "effect-app/rpc";
2
+ import { NotLoggedInError, UnauthorizedError } from "effect-app/client";
3
+ import { contextMap, getConfig, RpcContextMap, Tag } from "effect-app/rpc";
4
4
  import { TaggedError } from "effect-app/Schema";
5
5
  export class UserProfile extends Context.assignTag("UserProfile")(S.Class("UserProfile")({
6
6
  id: S.String,
@@ -37,9 +37,9 @@ const requestConfig = getConfig();
37
37
  //
38
38
  // consider if we want to support Context of one Service
39
39
  export const RequestContextMap = {
40
- allowAnonymous: RPCContextMap.makeInverted([UserProfile], NotLoggedInError),
41
- requireRoles: RPCContextMap.makeCustom(null, UnauthorizedError, Array()),
42
- test: RPCContextMap.make(null, S.Never)
40
+ allowAnonymous: RpcContextMap.makeInverted([UserProfile], NotLoggedInError),
41
+ requireRoles: RpcContextMap.makeCustom(null, UnauthorizedError, Array()),
42
+ test: RpcContextMap.make(null, S.Never)
43
43
  };
44
44
  export class AllowAnonymous extends Tag()("AllowAnonymous", {
45
45
  dynamic: contextMap(RequestContextMap, "allowAnonymous")
@@ -101,4 +101,4 @@ export class CustomError1 extends TaggedError()("CustomError1", {}) {
101
101
  }
102
102
  export class CustomError2 extends TaggedError()("CustomError1", {}) {
103
103
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRS9DLE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBMkIsYUFBYSxDQUFDLENBQ3pGLENBQUMsQ0FBQyxLQUFLLENBQWMsYUFBYSxDQUFDLENBQUM7SUFDbEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixDQUFDLENBQ0g7Q0FDQTtBQUVELE1BQU0sT0FBTyxJQUFLLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQVE7Q0FBRztBQUN4RixNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFZO0NBQUc7QUFDcEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2hELE1BQU0sT0FBTyxXQUFZLFNB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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRS9DLE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBMkIsYUFBYSxDQUFDLENBQ3pGLENBQUMsQ0FBQyxLQUFLLENBQWMsYUFBYSxDQUFDLENBQUM7SUFDbEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixDQUFDLENBQ0g7Q0FDQTtBQUVELE1BQU0sT0FBTyxJQUFLLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQVE7Q0FBRztBQUN4RixNQUFNLE9BQU8sUUFBUyxTQUFRLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFZO0NBQUc7QUFDcEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ2hELE1BQU0sT0FBTyxXQUFZLFNB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
@@ -1 +1 @@
1
- {"version":3,"file":"requires.test.d.ts","sourceRoot":"","sources":["../requires.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGvE,OAAO,EAAE,cAAc,EAAyC,YAAY,EAAoB,IAAI,EAAE,kBAAkB,EAA0B,cAAc,EAAmC,IAAI,EAAY,MAAM,eAAe,CAAA;;cAG/K,IAAI;;;;AAD7D,qBAAa,sBACX,SAAQ,2BASN;CAEH;AAkBD,eAAO,MAAM,eAAe;;;;;;;;;;SAKK,CAAA"}
1
+ {"version":3,"file":"requires.test.d.ts","sourceRoot":"","sources":["../requires.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGvE,OAAO,EAAE,cAAc,EAAyC,YAAY,EAAoB,IAAI,EAAE,kBAAkB,EAA0B,cAAc,EAAmC,IAAI,EAAY,MAAM,eAAe,CAAA;;cAG9L,IAAI;;;;AAD9C,qBAAa,sBAAuB,SAAQ,2BAY3C;CACA;AAkBD,eAAO,MAAM,eAAe;;;;;;;;;;SAKK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-multi-middleware.test.d.ts","sourceRoot":"","sources":["../rpc-multi-middleware.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkD,MAAM,aAAa,CAAA;AAEvF,OAAO,EAA2B,KAAK,EAAE,MAAM,QAAQ,CAAA;AAOvD,OAAO,EAA4M,WAAW,EAAE,MAAM,eAAe,CAAA;AA8CrP,eAAO,MAAM,OAAO,uFAWO,CAAA;AAiB3B,eAAO,MAAM,YAAY,yKAItB,CAAA;AAEH,eAAO,MAAM,YAAY,+FAgByB,CAAA"}
1
+ {"version":3,"file":"rpc-multi-middleware.test.d.ts","sourceRoot":"","sources":["../rpc-multi-middleware.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkD,MAAM,aAAa,CAAA;AAEvF,OAAO,EAA2B,KAAK,EAAE,MAAM,QAAQ,CAAA;AAQvD,OAAO,EAA4M,WAAW,EAAE,MAAM,eAAe,CAAA;AA4CrP,eAAO,MAAM,OAAO,uFAMhB,CAAA;AAiBJ,eAAO,MAAM,YAAY,yKAItB,CAAA;AAEH,eAAO,MAAM,YAAY,+FAgByB,CAAA"}
package/test/fixtures.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Context, Effect, Layer, S, Scope } from "effect-app"
2
- import { NotLoggedInError, RPCContextMap, UnauthorizedError } from "effect-app/client"
3
- import { contextMap, getConfig, Tag } from "effect-app/rpc"
2
+ import { NotLoggedInError, UnauthorizedError } from "effect-app/client"
3
+ import { contextMap, getConfig, RpcContextMap, Tag } from "effect-app/rpc"
4
4
  import { TaggedError } from "effect-app/Schema"
5
5
 
6
6
  export class UserProfile extends Context.assignTag<UserProfile, UserProfile>("UserProfile")(
@@ -50,9 +50,9 @@ const requestConfig = getConfig<RequestContextMap>()
50
50
  //
51
51
  // consider if we want to support Context of one Service
52
52
  export const RequestContextMap = {
53
- allowAnonymous: RPCContextMap.makeInverted([UserProfile], NotLoggedInError),
54
- requireRoles: RPCContextMap.makeCustom(null as never, UnauthorizedError, Array<string>()),
55
- test: RPCContextMap.make(null as never, S.Never)
53
+ allowAnonymous: RpcContextMap.makeInverted([UserProfile], NotLoggedInError),
54
+ requireRoles: RpcContextMap.makeCustom(null as never, UnauthorizedError, Array<string>()),
55
+ test: RpcContextMap.make(null as never, S.Never)
56
56
  } as const
57
57
 
58
58
  type _RequestContextMap = typeof RequestContextMap
@@ -137,7 +137,7 @@ describe("select first-level array fields", () => {
137
137
  })
138
138
  .pipe(setupRequestContextFromCurrent())
139
139
 
140
- it("works well in CosmosDB", () =>
140
+ it.skipIf(!process.env["STORAGE_URL"])("works well in CosmosDB", () =>
141
141
  test
142
142
  .pipe(Effect.provide(SomethingRepo.TestCosmos), rt.runPromise))
143
143
 
@@ -232,7 +232,7 @@ describe("filter first-level array fields as groups", () => {
232
232
  })
233
233
  .pipe(setupRequestContextFromCurrent())
234
234
 
235
- it("works well in CosmosDB", () =>
235
+ it.skipIf(!process.env["STORAGE_URL"])("works well in CosmosDB", () =>
236
236
  test
237
237
  .pipe(Effect.provide(SomethingRepo.TestCosmos), rt.runPromise))
238
238
 
@@ -302,7 +302,7 @@ describe("1", () => {
302
302
  })
303
303
  .pipe(setupRequestContextFromCurrent())
304
304
 
305
- it("works well in CosmosDB", () =>
305
+ it.skipIf(!process.env["STORAGE_URL"])("works well in CosmosDB", () =>
306
306
  test
307
307
  .pipe(Effect.provide(SomethingRepo.TestCosmos), rt.runPromise))
308
308
 
@@ -330,7 +330,7 @@ describe("multi-level", () => {
330
330
  })
331
331
  .pipe(setupRequestContextFromCurrent())
332
332
 
333
- it("works well in CosmosDB", () =>
333
+ it.skipIf(!process.env["STORAGE_URL"])("works well in CosmosDB", () =>
334
334
  test
335
335
  .pipe(Effect.provide(SomethingRepo.TestCosmos), rt.runPromise))
336
336
 
@@ -4,11 +4,12 @@ import { describe, expect, expectTypeOf, it } from "@effect/vitest"
4
4
  import { Context, Effect, Either, Layer, S } from "effect-app"
5
5
  import { NotLoggedInError, UnauthorizedError } from "effect-app/client"
6
6
  import { HttpHeaders } from "effect-app/http"
7
- import { makeMiddleware, TagService } from "effect-app/rpc"
7
+ import { makeMiddleware, Tag } from "effect-app/rpc"
8
8
  import { AllowAnonymous, AllowAnonymousLive, RequestContextMap, RequireRoles, RequireRolesLive, Some, SomeElseMiddleware, SomeElseMiddlewareLive, SomeMiddleware, SomeMiddlewareLive, SomeService, Test, TestLive } from "./fixtures.js"
9
9
 
10
- export class RequiresSomeMiddleware
11
- extends TagService<RequiresSomeMiddleware, { requires: Some }>()("RequiresSomeMiddleware", {})({
10
+ export class RequiresSomeMiddleware extends Context.DefineService(
11
+ Tag<RequiresSomeMiddleware, { requires: Some }>()("RequiresSomeMiddleware", {}),
12
+ {
12
13
  effect: Effect.gen(function*() {
13
14
  // yield* Effect.context<"test-dep">()
14
15
  return Effect.fnUntraced(function*(effect) {
@@ -17,8 +18,8 @@ export class RequiresSomeMiddleware
17
18
  return yield* effect
18
19
  })
19
20
  })
20
- })
21
- {
21
+ }
22
+ ) {
22
23
  }
23
24
 
24
25
  const middleware3 = makeMiddleware(RequestContextMap)
@@ -6,7 +6,8 @@ import { Console, Effect, Either, Layer } from "effect"
6
6
  import { S } from "effect-app"
7
7
  import { NotLoggedInError } from "effect-app/client"
8
8
  import { HttpLayerRouter } from "effect-app/http"
9
- import { DefaultGenericMiddlewares, makeMiddleware, middlewareGroup } from "effect-app/rpc"
9
+ import { DefaultGenericMiddlewares } from "effect-app/middleware"
10
+ import { makeMiddleware, middlewareGroup } from "effect-app/rpc"
10
11
  import { createServer } from "http"
11
12
  import { DefaultGenericMiddlewaresLive } from "../src/api/routing.js"
12
13
  import { AllowAnonymous, AllowAnonymousLive, RequestContextMap, RequireRoles, RequireRolesLive, Some, SomeElseMiddleware, SomeElseMiddlewareLive, SomeMiddleware, SomeMiddlewareLive, SomeService, Test, TestLive, UserProfile } from "./fixtures.js"
@@ -17,56 +18,49 @@ const middleware = makeMiddleware(RequestContextMap)
17
18
  .middleware(SomeElseMiddleware, SomeMiddleware)
18
19
  .middleware(...DefaultGenericMiddlewares)
19
20
 
20
- const UserRpcs = middlewareGroup(middleware)(RpcGroup
21
- .make(
21
+ const UserRpcs = middlewareGroup(middleware)(
22
+ RpcGroup.make(
22
23
  middleware.rpc("getUser", {
23
24
  success: S.Literal("awesome")
24
25
  }),
25
26
  middleware.rpc("doSomething", {
26
27
  success: S.Literal("also-awesome"),
27
- config: { allowAnonymous: true }
28
+ config: { allowAnonymous: true } // type safe config based on `RequestContextMap`
28
29
  })
29
- ))
30
+ )
31
+ )
30
32
 
31
- const impl = Effect
32
- .gen(function*() {
33
- const impl = UserRpcs
34
- .toLayerDynamic({
35
- getUser: Effect.fn(function*(_payload, _headers) {
36
- yield* Some
37
- yield* UserProfile // we only access it while protected by allowAnonymous: false
38
- return "awesome" as const
39
- }),
40
- doSomething: Effect.fn(function*() {
41
- console.log(yield* Effect.serviceOption(UserProfile)) // we access it optionally, while allowAnonymous: true
42
- return "also-awesome" as const
43
- })
44
- })
45
- return impl
33
+ const impl = UserRpcs
34
+ .toLayerDynamic({
35
+ getUser: Effect.fn(function*(_payload, _headers) {
36
+ yield* Some
37
+ yield* UserProfile // we only access it while protected by allowAnonymous: false
38
+ return "awesome" as const
39
+ }),
40
+ doSomething: Effect.fn(function*() {
41
+ console.log(yield* Effect.serviceOption(UserProfile)) // we access it optionally, while allowAnonymous: true
42
+ return "also-awesome" as const
43
+ })
46
44
  })
47
- .pipe(Layer.unwrapEffect)
48
45
 
49
46
  expectTypeOf<Layer.Layer.Context<typeof impl>>().toEqualTypeOf<never>()
50
47
 
51
- const UserRpcsBad = middlewareGroup(middleware)(RpcGroup
52
- .make(
48
+ const UserRpcsBad = middlewareGroup(middleware)(
49
+ RpcGroup.make(
53
50
  middleware.rpc("doSomethingElse", {
54
51
  success: S.Literal("also-awesome2"),
55
52
  config: { allowAnonymous: true }
56
53
  })
57
- ))
58
- export const badImpl = Effect
59
- .gen(function*() {
60
- const impl = UserRpcsBad
61
- .toLayerDynamic({
62
- doSomethingElse: Effect.fn(function*() {
63
- console.log(yield* UserProfile) // bad boy! allowAnonymous: false, so `UserProfile` must fall through to the Layer R.
64
- return "also-awesome2" as const
65
- })
66
- })
67
- return impl
54
+ )
55
+ )
56
+
57
+ export const badImpl = UserRpcsBad
58
+ .toLayerDynamic({
59
+ doSomethingElse: Effect.fn(function*() {
60
+ console.log(yield* UserProfile) // bad boy! allowAnonymous: false, so `UserProfile` must fall through to the Layer R.
61
+ return "also-awesome2" as const
62
+ })
68
63
  })
69
- .pipe(Layer.unwrapEffect)
70
64
 
71
65
  expectTypeOf<Layer.Layer.Context<typeof badImpl>>().toEqualTypeOf<UserProfile>()
72
66
 
package/wallaby.cjs DELETED
@@ -1 +0,0 @@
1
- module.exports = require("../../wallaby.base.cjs")