@effect-app/infra 2.20.1 → 2.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 2.21.1
4
+
5
+ ### Patch Changes
6
+
7
+ - c971d73: update packages
8
+ - f86ebc5: fix E/R
9
+ - Updated dependencies [c971d73]
10
+ - effect-app@2.11.1
11
+
12
+ ## 2.21.0
13
+
14
+ ### Minor Changes
15
+
16
+ - 67f43cc: feat: add routing6
17
+
3
18
  ## 2.20.1
4
19
 
5
20
  ### Patch Changes
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.toHttpApp = exports.makeRouter = exports.makeMiddleware = exports.RouterSymbol = void 0;
7
+ var _rpc = require("@effect/rpc");
8
+ var _effectApp = require("effect-app");
9
+ var _http = require("effect-app/http");
10
+ var _utils = require("effect-app/utils");
11
+ var _errorReporter = require("../errorReporter.cjs");
12
+ var _logger = require("../logger.cjs");
13
+ var _DynamicMiddleware = require("./routing/DynamicMiddleware.cjs");
14
+ const logRequestError = (0, _errorReporter.logError)("Request");
15
+ const reportRequestError = (0, _errorReporter.reportError)("Request");
16
+ /**
17
+ * Plain jane JSON version
18
+ * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
19
+ */
20
+ const toHttpApp = (self, options) => {
21
+ const handler = _rpc.RpcRouter.toHandler(self, options);
22
+ return _effectApp.Effect.withFiberRuntime(fiber => {
23
+ const context = fiber.getFiberRef(_effectApp.FiberRef.currentContext);
24
+ const request = _effectApp.Context.unsafeGet(context, _http.HttpServerRequest.HttpServerRequest);
25
+ return _effectApp.Effect.flatMap(request.json, _ => handler(_).pipe(_effectApp.Stream.provideContext(context), _effectApp.Stream.runCollect, _effectApp.Effect.map(_ => _effectApp.Chunk.toReadonlyArray(_)), _effectApp.Effect.andThen(_ => {
26
+ let status = 200;
27
+ for (const r of _.flat()) {
28
+ if (typeof r === "number") continue;
29
+ const results = _effectApp.Array.isArray(r) ? r : [r];
30
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Die")) {
31
+ status = 500;
32
+ break;
33
+ }
34
+ if (results.some(_ => _._tag === "Failure" && _.cause._tag === "Fail")) {
35
+ status = 422; // 418
36
+ break;
37
+ }
38
+ }
39
+ return _http.HttpServerResponse.json(_, {
40
+ status
41
+ });
42
+ }), _effectApp.Effect.orDie, _effectApp.Effect.tapDefect((0, _errorReporter.reportError)("RPCHttpApp"))));
43
+ });
44
+ };
45
+ exports.toHttpApp = toHttpApp;
46
+ const RouterSymbol = exports.RouterSymbol = Symbol();
47
+ // export interface RouteMatcher<
48
+ // Filtered extends Record<string, any>,
49
+ // CTXMap extends Record<string, any>,
50
+ // Rsc extends Filtered
51
+ // > extends RouteMatcherInt<Filtered, CTXMap, Rsc> {}
52
+ const makeMiddleware = content => content;
53
+ exports.makeMiddleware = makeMiddleware;
54
+ const makeRouter = (middleware, devMode) => {
55
+ function matchFor(rsc) {
56
+ const meta = rsc.meta;
57
+ const filtered = (0, _utils.typedKeysOf)(rsc).reduce((acc, cur) => {
58
+ if (_effectApp.Predicate.isObject(rsc[cur]) && rsc[cur]["success"]) {
59
+ acc[cur] = rsc[cur];
60
+ }
61
+ return acc;
62
+ }, {});
63
+ const items = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
64
+ ;
65
+ prev[cur] = Object.assign(fnOrEffect => {
66
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
67
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
68
+ static request = rsc[cur];
69
+ static stack = stack;
70
+ static _tag = "d";
71
+ static handler = () => fnOrEffect;
72
+ } : class {
73
+ static request = rsc[cur];
74
+ static stack = stack;
75
+ static _tag = "d";
76
+ static handler = fnOrEffect;
77
+ };
78
+ }, {
79
+ success: rsc[cur].success,
80
+ successRaw: _effectApp.S.encodedSchema(rsc[cur].success),
81
+ failure: rsc[cur].failure,
82
+ raw:
83
+ // "Raw" variations are for when you don't want to decode just to encode it again on the response
84
+ // e.g for direct projection from DB
85
+ // but more importantly, to skip Effectful decoders, like to resolve relationships from the database or remote client.
86
+ fnOrEffect => {
87
+ const stack = new Error().stack?.split("\n").slice(2).join("\n");
88
+ return _effectApp.Effect.isEffect(fnOrEffect) ? class {
89
+ static request = rsc[cur];
90
+ static stack = stack;
91
+ static _tag = "raw";
92
+ static handler = () => fnOrEffect;
93
+ } : class {
94
+ static request = rsc[cur];
95
+ static stack = stack;
96
+ static _tag = "raw";
97
+ static handler = (req, ctx) => fnOrEffect(req, {
98
+ ...ctx,
99
+ Response: rsc[cur].success
100
+ });
101
+ };
102
+ }
103
+ });
104
+ return prev;
105
+ }, {});
106
+ const f = (layers, make) => {
107
+ const r = class Router extends _http.HttpRouter.Tag(`${meta.moduleName}Router`)() {};
108
+ const layer = r.use(router => _effectApp.Effect.gen(function* () {
109
+ const controllers = yield* make;
110
+ const rpc = yield* (0, _DynamicMiddleware.makeRpc)(middleware);
111
+ // return make.pipe(Effect.map((c) => controllers(c, layers)))
112
+ const mapped = (0, _utils.typedKeysOf)(filtered).reduce((acc, cur) => {
113
+ const handler = controllers[cur];
114
+ const req = rsc[cur];
115
+ acc[cur] = rpc.effect(handler._tag === "raw" ? class extends req {
116
+ static success = _effectApp.S.encodedSchema(req.success);
117
+ get [_effectApp.Schema.symbolSerializable]() {
118
+ return this.constructor;
119
+ }
120
+ get [_effectApp.Schema.symbolWithResult]() {
121
+ return {
122
+ failure: req.failure,
123
+ success: _effectApp.S.encodedSchema(req.success)
124
+ };
125
+ }
126
+ } : req, req =>
127
+ // TODO: render more data... similar to console?
128
+ _effectApp.Effect.annotateCurrentSpan("requestInput", Object.entries(req).reduce((prev, [key, value]) => {
129
+ prev[key] = key === "password" ? "<redacted>" : typeof value === "string" || typeof value === "number" || typeof value === "boolean" ? typeof value === "string" && value.length > 256 ? value.substring(0, 253) + "..." : value : _effectApp.Array.isArray(value) ? `Array[${value.length}]` : value === null || value === undefined ? `${value}` : typeof value === "object" && value ? `Object[${Object.keys(value).length}]` : typeof value;
130
+ return prev;
131
+ }, {})).pipe(
132
+ // can't use andThen due to some being a function and effect
133
+ _effectApp.Effect.zipRight(handler.handler(req)), _effectApp.Effect.tapErrorCause(cause => _effectApp.Cause.isFailure(cause) ? logRequestError(cause) : _effectApp.Effect.void), _effectApp.Effect.tapDefect(cause => _effectApp.Effect.all([reportRequestError(cause, {
134
+ action: `${meta.moduleName}.${req._tag}`
135
+ }), _rpc.Rpc.currentHeaders.pipe(_effectApp.Effect.andThen(headers => {
136
+ return _logger.InfraLogger.logError("Finished request", cause).pipe(_effectApp.Effect.annotateLogs({
137
+ action: `${meta.moduleName}.${req._tag}`,
138
+ req: (0, _utils.pretty)(req),
139
+ headers: (0, _utils.pretty)(headers)
140
+ // resHeaders: pretty(
141
+ // Object
142
+ // .entries(headers)
143
+ // .reduce((prev, [key, value]) => {
144
+ // prev[key] = value && typeof value === "string" ? snipString(value) : value
145
+ // return prev
146
+ // }, {} as Record<string, any>)
147
+ // )
148
+ }));
149
+ }))])), devMode ? _ => _ : _effectApp.Effect.catchAllDefect(() => _effectApp.Effect.die("Internal Server Error")), _effectApp.Effect.withSpan("Request." + meta.moduleName + "." + req._tag, {
150
+ captureStackTrace: () => handler.stack
151
+ })), meta.moduleName); // TODO
152
+ return acc;
153
+ }, {});
154
+ const rpcRouter = _rpc.RpcRouter.make(...Object.values(mapped));
155
+ const httpApp = toHttpApp(rpcRouter, {
156
+ spanPrefix: rsc.meta.moduleName + "."
157
+ });
158
+ yield* router.all("/", httpApp,
159
+ // TODO: not queries.
160
+ {
161
+ uninterruptible: true
162
+ });
163
+ }));
164
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
165
+ const routes = layer.pipe(_effectApp.Layer.provideMerge(r.Live), layers && _effectApp.Array.isNonEmptyReadonlyArray(layers) ? _effectApp.Layer.provide(layers) : _ => _,
166
+ // TODO: only provide to the middleware?
167
+ middleware.dependencies ? _effectApp.Layer.provide(middleware.dependencies) : _ => _);
168
+ // Effect.Effect<HttpRouter.HttpRouter<unknown, HttpRouter.HttpRouter.DefaultServices>, never, UserRouter>
169
+ return {
170
+ moduleName: meta.moduleName,
171
+ Router: r,
172
+ routes
173
+ };
174
+ };
175
+ const effect = m => f(m.dependencies, m.effect);
176
+ const total = Object.keys(filtered).length;
177
+ // TODO
178
+ const accum = {};
179
+ const router2 = (0, _utils.typedKeysOf)(filtered).reduce((prev, cur) => {
180
+ prev[cur] = Object.assign(it => {
181
+ accum[cur] = items[cur](it);
182
+ if (Object.keys(accum).length === total) return accum;
183
+ return router2;
184
+ }, {
185
+ raw: it => {
186
+ accum[cur] = items[cur](it);
187
+ if (Object.keys(accum).length === total) return accum;
188
+ return router2;
189
+ }
190
+ });
191
+ return prev;
192
+ }, {});
193
+ return Object.assign(effect, router2);
194
+ }
195
+ function matchAll(handlers, requestLayer) {
196
+ const routers = (0, _utils.typedValuesOf)(handlers);
197
+ const rootRouter = class extends _http.HttpRouter.Tag("RootRouter")() {};
198
+ const r = rootRouter.use(router => _effectApp.Effect.gen(function* () {
199
+ for (const route of routers) {
200
+ yield* router.mount("/rpc/" + route.moduleName, yield* route.Router.router.pipe(_effectApp.Effect.map(_http.HttpRouter.use((0, _effectApp.flow)(_effectApp.Effect.provide(requestLayer))))));
201
+ }
202
+ })).pipe(_effectApp.Layer.provide(routers.map(r => r.routes).flat()));
203
+ return {
204
+ layer: r,
205
+ Router: rootRouter
206
+ };
207
+ }
208
+ return {
209
+ matchAll,
210
+ matchFor
211
+ };
212
+ };
213
+ exports.makeRouter = makeRouter;
214
+ //# sourceMappingURL=routing6.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing6.cjs","names":["_rpc","require","_effectApp","_http","_utils","_errorReporter","_logger","_DynamicMiddleware","logRequestError","logError","reportRequestError","reportError","toHttpApp","self","options","handler","RpcRouter","toHandler","Effect","withFiberRuntime","fiber","context","getFiberRef","FiberRef","currentContext","request","Context","unsafeGet","HttpServerRequest","flatMap","json","_","pipe","Stream","provideContext","runCollect","map","Chunk","toReadonlyArray","andThen","status","r","flat","results","Array","isArray","some","_tag","cause","HttpServerResponse","orDie","tapDefect","exports","RouterSymbol","Symbol","makeMiddleware","content","makeRouter","middleware","devMode","matchFor","rsc","meta","filtered","typedKeysOf","reduce","acc","cur","Predicate","isObject","items","prev","Object","assign","fnOrEffect","stack","Error","split","slice","join","isEffect","success","successRaw","S","encodedSchema","failure","raw","req","ctx","Response","f","layers","make","Router","HttpRouter","Tag","moduleName","layer","use","router","gen","controllers","rpc","makeRpc","mapped","effect","Schema","symbolSerializable","constructor","symbolWithResult","annotateCurrentSpan","entries","key","value","length","substring","undefined","keys","zipRight","tapErrorCause","Cause","isFailure","void","all","action","Rpc","currentHeaders","headers","InfraLogger","annotateLogs","pretty","catchAllDefect","die","withSpan","captureStackTrace","rpcRouter","values","httpApp","spanPrefix","uninterruptible","routes","Layer","provideMerge","Live","isNonEmptyReadonlyArray","provide","dependencies","m","total","accum","router2","it","matchAll","handlers","requestLayer","routers","typedValuesOf","rootRouter","route","mount","flow"],"sources":["../../src/api/routing6.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -19,7 +19,7 @@ declare const Emailer_base: (abstract new (service: {
19
19
  } & {
20
20
  use: <X>(body: (_: {
21
21
  sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, Error | ResponseError>;
22
- }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, R_3 | Emailer> : Effect.Effect<X, never, Emailer>;
22
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, Emailer | R_3> : Effect.Effect<X, never, Emailer>;
23
23
  };
24
24
  /**
25
25
  * @tsplus type Emailer
@@ -44,7 +44,7 @@ declare const MainFiberSet_base: (abstract new (service: {
44
44
  run: <R_1, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R_1>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R_1>;
45
45
  add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
46
46
  addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
47
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, MainFiberSet | R_4> : Effect.Effect<X, never, MainFiberSet>;
47
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | MainFiberSet> : Effect.Effect<X, never, MainFiberSet>;
48
48
  };
49
49
  /**
50
50
  * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
@@ -22,12 +22,12 @@ export declare function makeRepoInternal<Evt = never>(): <ItemType extends strin
22
22
  config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
23
23
  partitionValue?: (a: Encoded) => string;
24
24
  };
25
- }) => Effect.Effect<Repository<T, Encoded, Evt, ItemType, IdKey, Exclude<R, RCtx>, RPublish>, E, R | RInitial | StoreMaker>;
25
+ }) => Effect.Effect<Repository<T, Encoded, Evt, ItemType, IdKey, Exclude<R, RCtx>, RPublish>, E, StoreMaker | R | RInitial>;
26
26
  Q: Q.Query<Encoded>;
27
27
  };
28
28
  export declare function makeStore<Encoded extends FieldValues>(): <ItemType extends string, R, E, T, IdKey extends keyof Encoded>(name: ItemType, schema: S.Schema<T, E, R>, mapTo: (e: E, etag: string | undefined) => Encoded, idKey: IdKey) => <RInitial = never, EInitial = never>(makeInitial?: Effect<readonly T[], EInitial, RInitial>, config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
29
29
  partitionValue?: (a: Encoded) => string;
30
- }) => Effect.Effect<import("../../../Store.js").Store<IdKey, Encoded, PersistenceModelType<Encoded>>, EInitial, R | RInitial | StoreMaker>;
30
+ }) => Effect.Effect<import("../../../Store.js").Store<IdKey, Encoded, PersistenceModelType<Encoded>>, EInitial, StoreMaker | R | RInitial>;
31
31
  export interface Repos<T, Encoded extends {
32
32
  id: string;
33
33
  }, RSchema, Evt, ItemType extends string, IdKey extends keyof T, RPublish> {
@@ -56,15 +56,15 @@ declare const Operations_base: (abstract new (service: {
56
56
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
57
57
  }>) & {
58
58
  toLayer: {
59
- (): Layer.Layer<Operations, never, OperationsRepo | RequestFiberSet>;
59
+ (): Layer.Layer<Operations, never, RequestFiberSet | OperationsRepo>;
60
60
  <E_1, R_1>(eff: Effect.Effect<Omit<Operations, keyof Context.TagClassShape<any, any>>, E_1, R_1>): Layer.Layer<Operations, E_1, R_1>;
61
61
  };
62
62
  toLayerScoped: {
63
- (): Layer.Layer<Operations, never, OperationsRepo | RequestFiberSet>;
63
+ (): Layer.Layer<Operations, never, RequestFiberSet | OperationsRepo>;
64
64
  <E_1, R_2>(eff: Effect.Effect<Context.TagClassShape<any, any>, E_1, R_2>): Layer.Layer<Operations, E_1, Exclude<R_2, Scope.Scope>>;
65
65
  };
66
66
  of: (service: Context.TagClassShape<any, any>) => Operations;
67
- make: Effect.Effect<Operations, never, OperationsRepo | RequestFiberSet>;
67
+ make: Effect.Effect<Operations, never, RequestFiberSet | OperationsRepo>;
68
68
  } & Context.Tag<Operations, Operations> & {
69
69
  cleanup: Effect.Effect<void[], never, Operations>;
70
70
  register: (title: S.NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope | Operations>;
@@ -14,9 +14,9 @@ export declare function makeServiceBusQueue<Evt extends {
14
14
  }, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
15
15
  drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("effect/Scope").Scope | Exclude<Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, never>, Tracer.ParentSpan>, ServiceBusReceiverFactory>>;
16
16
  publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
17
- }, never, ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender>;
17
+ }, never, import("@azure/service-bus").ServiceBusSender | ServiceBusReceiverFactory>;
18
18
  /**
19
19
  * @tsplus static QueueMaker.Ops makeServiceBusLayers
20
20
  */
21
- export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender, never, never>;
21
+ export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<import("@azure/service-bus").ServiceBusSender | ServiceBusReceiverFactory, never, never>;
22
22
  //# sourceMappingURL=sbqueue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAIxC,eAAO,MAAM,MAAM,yBAAwB,CAAA;AAC3C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,SAAS,gCAAoC,CAAA;;;;;;;;;;;;;IAmBxD,kBAAkB;;;;yBAkBH,EAAG,iBAElB;;;yBAe6B,EAAI,iBAAgB;;;;;;;;;;;;;;;;;AApDnD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAelC;IAGA,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;CAMrD;AAED,eAAO,MAAM,cAAc,QAAS,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;;;;;;;CAgBxG,CAAA;AAKF,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACtF"}
1
+ {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAIxC,eAAO,MAAM,MAAM,yBAAwB,CAAA;AAC3C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,SAAS,gCAAoC,CAAA;;;;;;;;;;;;;IAmBxD,kBAAkB;;;;2BAkBA,iBAElB;;;2BAeiC,iBAAgB;;;;;;;;;;;;;;;;;AApDnD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAelC;IAGA,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;CAMrD;AAED,eAAO,MAAM,cAAc,QAAS,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;;;;;;;CAgBxG,CAAA;AAKF,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,OAAQ,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACtF"}
@@ -88,7 +88,7 @@ declare const StoreMaker_base: (abstract new (service: {
88
88
  } & Context.Tag<StoreMaker, StoreMaker> & {} & {
89
89
  use: <X>(body: (_: {
90
90
  make: <IdKey extends keyof Encoded, Encoded extends FieldValues, R = never, E = never>(name: string, idKey: IdKey, seed?: Effect<Iterable<Encoded>, E, R>, config?: StoreConfig<Encoded>) => Effect<Store<IdKey, Encoded>, E, R>;
91
- }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, StoreMaker | R_3> : Effect.Effect<X, never, StoreMaker>;
91
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_1, infer R_3> ? Effect.Effect<A_1, E_1, R_3 | StoreMaker> : Effect.Effect<X, never, StoreMaker>;
92
92
  };
93
93
  /**
94
94
  * @tsplus type StoreMaker
@@ -127,7 +127,7 @@ declare const ContextMap_base: (abstract new (service: {
127
127
  use: <X>(body: (_: {
128
128
  get: (id: string) => string | undefined;
129
129
  set: (id: string, eTag: string | undefined) => void;
130
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | ContextMap> : Effect.Effect<X, never, ContextMap>;
130
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, ContextMap | R_4> : Effect.Effect<X, never, ContextMap>;
131
131
  };
132
132
  /**
133
133
  * @tsplus type ContextMap
@@ -31,7 +31,7 @@ export declare class ServiceBusReceiverFactory extends ServiceBusReceiverFactory
31
31
  static readonly Live: (queueName: string) => Layer.Layer<ServiceBusReceiverFactory, never, ServiceBusClient>;
32
32
  }
33
33
  export declare function sendMessages(messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: OperationOptionsBase): Effect.Effect<void, never, ServiceBusSender>;
34
- export declare function subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | RMsg | RErr | ServiceBusReceiverFactory>;
34
+ export declare function subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | ServiceBusReceiverFactory | RMsg | RErr>;
35
35
  export interface MessageHandlers<RMsg, RErr> {
36
36
  /**
37
37
  * Handler that processes messages from service bus.
@@ -0,0 +1,216 @@
1
+ import type * as HttpApp from "@effect/platform/HttpApp";
2
+ import { Rpc, RpcRouter } from "@effect/rpc";
3
+ import type { NonEmptyReadonlyArray } from "effect-app";
4
+ import { Array, 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 { Contravariant } from "effect/Types";
9
+ import type { Middleware } from "./routing/DynamicMiddleware.js";
10
+ export type _R<T extends Effect<any, any, any>> = [T] extends [
11
+ Effect<any, any, infer R>
12
+ ] ? R : never;
13
+ export type _E<T extends Effect<any, any, any>> = [T] extends [
14
+ Effect<any, infer E, any>
15
+ ] ? E : never;
16
+ export type EffectDeps<A> = {
17
+ [K in keyof A as A[K] extends Effect<any, any, any> ? K : never]: A[K] extends Effect<any, any, any> ? A[K] : never;
18
+ };
19
+ /**
20
+ * Plain jane JSON version
21
+ * @deprecated use HttpRpcRouterNoStream.toHttpApp once support options
22
+ */
23
+ export declare const toHttpApp: <R extends RpcRouter.RpcRouter<any, any>>(self: R, options?: {
24
+ readonly spanPrefix?: string;
25
+ }) => HttpApp.Default<HttpServerError.RequestError, RpcRouter.RpcRouter.Context<R>>;
26
+ export interface Hint<Err extends string> {
27
+ Err: Err;
28
+ }
29
+ 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;
30
+ export type AnyRequestModule = S.Schema.Any & {
31
+ _tag: string;
32
+ config?: any;
33
+ success?: S.Schema.Any;
34
+ failure?: S.Schema.Any;
35
+ };
36
+ export interface AddAction<Actions extends AnyRequestModule, Accum extends Record<string, any> = {}> {
37
+ accum: Accum;
38
+ add<A extends Handler<Actions, any, any>>(a: A): Exclude<Actions, A extends Handler<infer M, any, any> ? M : never> extends never ? Accum & {
39
+ [K in A extends Handler<infer M, any, any> ? M extends AnyRequestModule ? M["_tag"] : never : never]: A;
40
+ } : AddAction<Exclude<Actions, A extends Handler<infer M, any, any> ? M : never>, Accum & {
41
+ [K in A extends Handler<infer M, any, any> ? M extends AnyRequestModule ? M["_tag"] : never : never]: A;
42
+ }> & Accum & {
43
+ [K in A extends Handler<infer M, any, any> ? M extends AnyRequestModule ? M["_tag"] : never : never]: A;
44
+ };
45
+ }
46
+ export interface Method<Rsc extends Record<string, AnyRequestModule>, K extends keyof Rsc, RT extends "d" | "raw", CTXMap extends Record<string, any>, Context, Accum> {
47
+ <A extends GetSuccessShape<Rsc[K], RT>, R2 = never, E = never>(f: Effect<A, E, R2>): keyof {
48
+ [k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
49
+ } extends never ? {
50
+ [k in K]: HandleVoid<GetSuccessShape<Rsc[K], RT>, A, Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
51
+ } & Accum : RRouter<{
52
+ [k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
53
+ }, CTXMap, Context, {
54
+ [k in K]: HandleVoid<GetSuccessShape<Rsc[K], RT>, A, Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
55
+ } & Accum>;
56
+ <A extends GetSuccessShape<Rsc[K], RT>, R2 = never, E = never>(f: (req: S.Schema.Type<Rsc[K]>) => Effect<A, E, R2>): keyof {
57
+ [k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
58
+ } extends never ? {
59
+ [k in K]: HandleVoid<GetSuccessShape<Rsc[K], RT>, A, Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
60
+ } & Accum : RRouter<{
61
+ [k in keyof Rsc as k extends K | keyof Accum ? never : k]: Rsc[k];
62
+ }, CTXMap, Context, {
63
+ [k in K]: HandleVoid<GetSuccessShape<Rsc[K], RT>, A, Handler<Rsc[K], RT, Exclude<Context | Exclude<R2, GetEffectContext<CTXMap, Rsc[K]["config"]>>, HttpRouter.HttpRouter.Provided>>>;
64
+ } & Accum>;
65
+ }
66
+ type RRouter<Rsc extends Record<string, AnyRequestModule>, CTXMap extends Record<string, any>, Context, Accum = {}> = {
67
+ [K in keyof Rsc]: (Method<Rsc, K, "d", CTXMap, Context, Accum>) & {
68
+ raw: Method<Rsc, K, "raw", CTXMap, Context, Accum>;
69
+ };
70
+ };
71
+ type GetSuccess<T> = T extends {
72
+ success: S.Schema.Any;
73
+ } ? T["success"] : typeof S.Void;
74
+ type GetSuccessShape<Action extends {
75
+ success?: S.Schema.Any;
76
+ }, RT extends "d" | "raw"> = RT extends "raw" ? S.Schema.Encoded<GetSuccess<Action>> : S.Schema.Type<GetSuccess<Action>>;
77
+ type GetFailure<T extends {
78
+ failure?: S.Schema.Any;
79
+ }> = T["failure"] extends never ? typeof S.Never : T["failure"];
80
+ type HandlerFull<Action extends AnyRequestModule, RT extends "raw" | "d", A, E, R> = {
81
+ new (): {};
82
+ _tag: RT;
83
+ stack: string;
84
+ handler: (req: S.Schema.Type<Action>) => Effect<A, E, R>;
85
+ };
86
+ 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> {
87
+ }
88
+ type AHandler<Action extends AnyRequestModule> = Handler<Action, any, any>;
89
+ type Filter<T> = {
90
+ [K in keyof T as T[K] extends AnyRequestModule ? K : never]: T[K];
91
+ };
92
+ export declare const RouterSymbol: unique symbol;
93
+ export interface RouterShape<Rsc> {
94
+ [RouterSymbol]: Rsc;
95
+ }
96
+ type RPCRouteR<T extends Rpc.Rpc<any, any>> = [T] extends [
97
+ Rpc.Rpc<any, infer R>
98
+ ] ? R : never;
99
+ type Match<Rsc extends Record<string, any>, CTXMap extends Record<string, any>, RT extends "raw" | "d", Key extends keyof Rsc, Context> = {
100
+ <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>>>;
101
+ <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>>>;
102
+ };
103
+ export type RouteMatcher<CTXMap extends Record<string, any>, Rsc extends Record<string, any>, Context> = {
104
+ [Key in keyof Filter<Rsc>]: Match<Rsc, CTXMap, "d", Key, Context> & {
105
+ success: Rsc[Key]["success"];
106
+ successRaw: S.SchemaClass<S.Schema.Encoded<Rsc[Key]["success"]>>;
107
+ failure: Rsc[Key]["failure"];
108
+ /**
109
+ * Requires the Encoded shape (e.g directly undecoded from DB, so that we don't do multiple Decode/Encode)
110
+ */
111
+ raw: Match<Rsc, CTXMap, "raw", Key, Context>;
112
+ };
113
+ };
114
+ export declare const makeMiddleware: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]>(content: Middleware<Context, CTXMap, RMW, Layers>) => Middleware<Context, CTXMap, RMW, Layers>;
115
+ export declare const makeRouter: <Context, CTXMap extends Record<string, RPCContextMap.Any>, RMW, Layers extends NonEmptyReadonlyArray<Layer.Layer.Any> | never[]>(middleware: Middleware<Context, CTXMap, RMW, Layers>, devMode: boolean) => {
116
+ matchAll: <T extends {
117
+ [key: string]: {
118
+ Router: {
119
+ router: Effect<HttpRouter.HttpRouter<any, any>, any, any>;
120
+ };
121
+ routes: Layer.Layer<any, any, any>;
122
+ moduleName: string;
123
+ };
124
+ }, A, E, R>(handlers: T, requestLayer: Layer.Layer<A, E, R>) => {
125
+ layer: Layer.Layer<never, Layer.Layer.Error<(typeof handlers)[keyof typeof handlers]["routes"]>, Layer.Layer.Context<(typeof handlers)[keyof typeof handlers]["routes"]>>;
126
+ 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>>;
127
+ };
128
+ matchFor: <const ModuleName extends string, const Rsc extends Record<string, any>>(rsc: Rsc & {
129
+ meta: {
130
+ moduleName: ModuleName;
131
+ };
132
+ }) => {
133
+ <const Make extends {
134
+ dependencies: Array<Layer.Layer.Any>;
135
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
136
+ strict?: boolean;
137
+ /** @deprecated */
138
+ readonly ಠ_ಠ: never;
139
+ }>(make: Make): {
140
+ moduleName: ModuleName;
141
+ 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<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
142
+ routes: Layer.Layer<RouterShape<Rsc>, MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<MakeContext<Make> | RMW, (Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof Layers]: Layer.Layer.Success<Layers[k_3]>; }[number] : never)>>;
143
+ };
144
+ <const Make extends {
145
+ dependencies: Array<Layer.Layer.Any>;
146
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
147
+ strict?: boolean;
148
+ /** @deprecated */
149
+ readonly ಠ_ಠ: never;
150
+ }>(make: Make): {
151
+ moduleName: ModuleName;
152
+ 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<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
153
+ routes: Layer.Layer<RouterShape<Rsc>, MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<MakeContext<Make> | RMW, (Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof Layers]: Layer.Layer.Success<Layers[k_3]>; }[number] : never)>>;
154
+ };
155
+ <const Make extends {
156
+ dependencies: Array<Layer.Layer.Any>;
157
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, Make["strict"] extends false ? any : Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
158
+ strict?: boolean;
159
+ /** @deprecated */
160
+ readonly ಠ_ಠ: never;
161
+ }>(make: Make): {
162
+ moduleName: ModuleName;
163
+ 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<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
164
+ routes: Layer.Layer<RouterShape<Rsc>, MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<MakeContext<Make> | RMW, (Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof Layers]: Layer.Layer.Success<Layers[k_3]>; }[number] : never)>>;
165
+ };
166
+ <const Make extends {
167
+ dependencies: Array<Layer.Layer.Any>;
168
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
169
+ strict?: boolean;
170
+ /** @deprecated */
171
+ readonly ಠ_ಠ: never;
172
+ }>(make: Make): {
173
+ moduleName: ModuleName;
174
+ 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<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
175
+ routes: Layer.Layer<RouterShape<Rsc>, MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<MakeContext<Make> | RMW, (Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof Layers]: Layer.Layer.Success<Layers[k_3]>; }[number] : never)>>;
176
+ };
177
+ <const Make extends {
178
+ dependencies: Array<Layer.Layer.Any>;
179
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never>;
180
+ strict?: boolean;
181
+ }>(make: Make): {
182
+ moduleName: ModuleName;
183
+ 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<MakeHandlers<Make, Filter<Rsc>>[K]["handler"]>>>; }[keyof Filter<Rsc>]>, HttpRouter.HttpRouter.Provided>>;
184
+ routes: Layer.Layer<RouterShape<Rsc>, MakeErrors<Make> | (Make["dependencies"] extends infer T_1 ? T_1 extends Make["dependencies"] ? T_1 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_1 in keyof T_1]: Layer.Layer.Error<T_1[k_1]>; }[number] : never : never : never), (Make["dependencies"] extends infer T_2 ? T_2 extends Make["dependencies"] ? T_2 extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_2 in keyof T_2]: Layer.Layer.Context<T_2[k_2]>; }[number] : never : never : never) | Exclude<MakeContext<Make> | RMW, (Make["dependencies"] extends infer T ? T extends Make["dependencies"] ? T extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k in keyof T]: Layer.Layer.Success<T[k]>; }[number] : never : never : never) | (Layers extends readonly [Layer.Layer.Any, ...Layer.Layer.Any[]] ? { [k_3 in keyof Layers]: Layer.Layer.Success<Layers[k_3]>; }[number] : never)>>;
185
+ };
186
+ <const Make extends {
187
+ dependencies: [...Make["dependencies"], ...Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>> extends never ? [] : [Layer.Layer<Exclude<Effect.Context<Make["effect"]>, MakeDepsOut<Make>>, never, never>]];
188
+ effect: Effect<{ [K in keyof Filter<Rsc>]: AHandler<Rsc[K]>; }, any, any>;
189
+ strict?: boolean;
190
+ }>(make: Make): {
191
+ moduleName: ModuleName;
192
+ Router: HttpRouter.HttpRouter.TagClass<RouterShape<Rsc>, `${ModuleName}Router`, never, Exclude<Context, HttpRouter.HttpRouter.Provided>>;
193
+ routes: any;
194
+ };
195
+ } & RRouter<Filter<Rsc>, CTXMap, Context, {}>;
196
+ };
197
+ export type MakeDeps<Make> = Make extends {
198
+ readonly dependencies: ReadonlyArray<Layer.Layer.Any>;
199
+ } ? Make["dependencies"][number] : never;
200
+ export type MakeErrors<Make> = Make extends {
201
+ readonly effect: Effect<any, infer E, any>;
202
+ } ? E : never;
203
+ export type MakeContext<Make> = Make extends {
204
+ readonly effect: Effect<any, any, infer R>;
205
+ } ? R : never;
206
+ export type MakeHandlers<Make, Handlers extends Record<string, any>> = Make extends {
207
+ readonly effect: Effect<{
208
+ [K in keyof Handlers]: AHandler<Handlers[K]>;
209
+ }, any, any>;
210
+ } ? Effect.Success<Make["effect"]> : never;
211
+ /**
212
+ * @since 3.9.0
213
+ */
214
+ export type MakeDepsOut<Make> = Contravariant.Type<MakeDeps<Make>[Layer.LayerTypeId]["_ROut"]>;
215
+ export {};
216
+ //# sourceMappingURL=routing6.d.ts.map