@effect-app/infra 4.0.0-beta.245 → 4.0.0-beta.247

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,19 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 4.0.0-beta.247
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [01bab22]
8
+ - effect-app@4.0.0-beta.247
9
+
10
+ ## 4.0.0-beta.246
11
+
12
+ ### Patch Changes
13
+
14
+ - f4b58cd: Add `cachedPerRequest` helper to `ContextMapContainer`. Runs a given Effect at most once per ContextMap (i.e. per request) and stores the result in the ContextMap under a fresh symbol, using the ContextMap's shared semaphore for safe single initialization. Use as a building block for any per-request memoized value (request resolver caches, per-request `Cache.make` instances, etc.).
15
+ - effect-app@4.0.0-beta.246
16
+
3
17
  ## 4.0.0-beta.245
4
18
 
5
19
  ### Patch Changes
@@ -1,8 +1,6 @@
1
1
  import * as Context from "effect-app/Context";
2
2
  import * as Effect from "effect-app/Effect";
3
3
  import * as Layer from "effect-app/Layer";
4
- import type * as Request from "effect/Request";
5
- import * as RequestResolver from "effect/RequestResolver";
6
4
  import { ContextMap } from "./service.js";
7
5
  declare const ContextMapContainer_base: Context.Reference<"root" | ContextMap>;
8
6
  export declare class ContextMapContainer extends ContextMapContainer_base {
@@ -15,19 +13,12 @@ export declare class ContextMapNotStartedError extends ContextMapNotStartedError
15
13
  }
16
14
  export declare const getContextMap: Effect.Effect<ContextMap, ContextMapNotStartedError, never>;
17
15
  /**
18
- * Uses the official `RequestResolver.withCache` internally,
19
- * creating one cached resolver per ContextMap (i.e. per request).
20
- * Uses a shared semaphore in the ContextMap to ensure safe single initialization.
16
+ * Runs `make` at most once per ContextMap (i.e. per request) and caches the
17
+ * resulting value in the ContextMap under a fresh symbol. Subsequent calls of
18
+ * the returned Effect within the same ContextMap return the cached value.
19
+ *
20
+ * Uses the ContextMap's shared semaphore for safe single initialization.
21
21
  */
22
- export declare const withRequestResolverCache: {
23
- <A extends Request.Request<any, any>>(options: {
24
- readonly capacity: number;
25
- readonly strategy?: "lru" | "fifo" | undefined;
26
- }): (self: RequestResolver.RequestResolver<A>) => Effect.Effect<RequestResolver.RequestResolver<A>, ContextMapNotStartedError>;
27
- <A extends Request.Request<any, any>>(self: RequestResolver.RequestResolver<A>, options: {
28
- readonly capacity: number;
29
- readonly strategy?: "lru" | "fifo" | undefined;
30
- }): Effect.Effect<RequestResolver.RequestResolver<A>, ContextMapNotStartedError>;
31
- };
22
+ export declare const cachedPerRequest: <A, E, R>(make: Effect.Effect<A, E, R>) => Effect.Effect<A, E | ContextMapNotStartedError, R>;
32
23
  export {};
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0NvbnRleHRNYXBDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFHekMsT0FBTyxLQUFLLEtBQUssT0FBTyxNQUFNLGdCQUFnQixDQUFBO0FBQzlDLE9BQU8sS0FBSyxlQUFlLE1BQU0sd0JBQXdCLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTs7QUFRekMscUJBQWEsbUJBQW9CLFNBQVEsd0JBRXZDO0lBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG1DQUFzRTtDQUM1Rjs7OztBQUVELHFCQUFhLHlCQUEwQixTQUFRLDhCQUE2QztDQUFHO0FBRS9GLGVBQU8sTUFBTSxhQUFhLDZEQUV6QixDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILGVBQU8sTUFBTSx3QkFBd0IsRUFBRTtJQUNyQyxDQUFDLENBQUMsU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUU7UUFDN0MsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUE7UUFDekIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFBO0tBQy9DLEdBQUcsQ0FDRixJQUFJLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUE7SUFDakYsQ0FBQyxDQUFDLFNBQVMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ2xDLElBQUksRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUN4QyxPQUFPLEVBQUU7UUFDUCxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQTtRQUN6QixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUE7S0FDL0MsR0FDQSxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtDQWlCL0UsQ0FBQSJ9
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0NvbnRleHRNYXBDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFFekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTs7QUFRekMscUJBQWEsbUJBQW9CLFNBQVEsd0JBRXZDO0lBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLG1DQUFzRTtDQUM1Rjs7OztBQUVELHFCQUFhLHlCQUEwQixTQUFRLDhCQUE2QztDQUFHO0FBRS9GLGVBQU8sTUFBTSxhQUFhLDZEQUV6QixDQUFBO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsZUFBTyxNQUFNLGdCQUFnQixHQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxDQUFDLENBS25ELENBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMapContainer.d.ts","sourceRoot":"","sources":["../../src/Store/ContextMapContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAGzC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;;AAQzC,qBAAa,mBAAoB,SAAQ,wBAEvC;IACA,MAAM,CAAC,QAAQ,CAAC,KAAK,mCAAsE;CAC5F;;;;AAED,qBAAa,yBAA0B,SAAQ,8BAA6C;CAAG;AAE/F,eAAO,MAAM,aAAa,6DAEzB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE;IACrC,CAAC,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;QAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;KAC/C,GAAG,CACF,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KACrC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAA;IACjF,CAAC,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAClC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EACxC,OAAO,EAAE;QACP,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAA;KAC/C,GACA,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAA;CAiB/E,CAAA"}
1
+ {"version":3,"file":"ContextMapContainer.d.ts","sourceRoot":"","sources":["../../src/Store/ContextMapContainer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;;AAQzC,qBAAa,mBAAoB,SAAQ,wBAEvC;IACA,MAAM,CAAC,QAAQ,CAAC,KAAK,mCAAsE;CAC5F;;;;AAED,qBAAa,yBAA0B,SAAQ,8BAA6C;CAAG;AAE/F,eAAO,MAAM,aAAa,6DAEzB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC,CAKnD,CAAA"}
@@ -2,8 +2,6 @@ import * as Context from "effect-app/Context";
2
2
  import * as Effect from "effect-app/Effect";
3
3
  import * as Layer from "effect-app/Layer";
4
4
  import * as Data from "effect/Data";
5
- import { dual } from "effect/Function";
6
- import * as RequestResolver from "effect/RequestResolver";
7
5
  import { ContextMap } from "./service.js";
8
6
  // TODO: we have to create a new contextmap on every request.
9
7
  // we want to share one map during startup
@@ -19,12 +17,14 @@ export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotSt
19
17
  }
20
18
  export const getContextMap = ContextMapContainer.pipe(Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError()));
21
19
  /**
22
- * Uses the official `RequestResolver.withCache` internally,
23
- * creating one cached resolver per ContextMap (i.e. per request).
24
- * Uses a shared semaphore in the ContextMap to ensure safe single initialization.
20
+ * Runs `make` at most once per ContextMap (i.e. per request) and caches the
21
+ * resulting value in the ContextMap under a fresh symbol. Subsequent calls of
22
+ * the returned Effect within the same ContextMap return the cached value.
23
+ *
24
+ * Uses the ContextMap's shared semaphore for safe single initialization.
25
25
  */
26
- export const withRequestResolverCache = dual(2, (self, options) => {
26
+ export const cachedPerRequest = (make) => {
27
27
  const cacheKey = Symbol();
28
- return getContextMap.pipe(Effect.flatMap((ctxMap) => ctxMap.getOrCreateStoreEffect(cacheKey, RequestResolver.withCache(self, options))));
29
- });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sYUFBYSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUV0QyxPQUFPLEtBQUssZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekMsNkRBQTZEO0FBQzdELDBDQUEwQztBQUMxQyx5RUFBeUU7QUFDekUsNEdBQTRHO0FBQzVHLHlGQUF5RjtBQUV6RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtJQUNoRixZQUFZLEVBQUUsR0FBd0IsRUFBRSxDQUFDLE1BQU07Q0FDaEQsQ0FBQztJQUNBLE1BQU0sQ0FBVSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzVGO0FBRUQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUM7Q0FBRztBQUUvRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUNuRCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUNoRixDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQWNqQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQ1YsSUFBd0MsRUFDeEMsT0FHQyxFQUM2RSxFQUFFO0lBQ2hGLE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ3hCLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDM0IsUUFBUSxFQUNSLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUN6QyxDQUNGLENBQ0YsQ0FBQTtBQUNILENBQUMsQ0FBQyxDQUFBIn0=
28
+ return getContextMap.pipe(Effect.flatMap((ctxMap) => ctxMap.getOrCreateStoreEffect(cacheKey, make)));
29
+ };
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sYUFBYSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekMsNkRBQTZEO0FBQzdELDBDQUEwQztBQUMxQyx5RUFBeUU7QUFDekUsNEdBQTRHO0FBQzVHLHlGQUF5RjtBQUV6RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtJQUNoRixZQUFZLEVBQUUsR0FBd0IsRUFBRSxDQUFDLE1BQU07Q0FDaEQsQ0FBQztJQUNBLE1BQU0sQ0FBVSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzVGO0FBRUQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUM7Q0FBRztBQUUvRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUNuRCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUNoRixDQUFBO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsSUFBNEIsRUFDd0IsRUFBRTtJQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEVBQUUsQ0FBQTtJQUN6QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FDMUUsQ0FBQTtBQUNILENBQUMsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "4.0.0-beta.245",
3
+ "version": "4.0.0-beta.247",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "8.4.0",
15
15
  "query-string": "^9.3.1",
16
- "effect-app": "4.0.0-beta.245"
16
+ "effect-app": "4.0.0-beta.247"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.9.3",
@@ -2,9 +2,6 @@ import * as Context from "effect-app/Context"
2
2
  import * as Effect from "effect-app/Effect"
3
3
  import * as Layer from "effect-app/Layer"
4
4
  import * as Data from "effect/Data"
5
- import { dual } from "effect/Function"
6
- import type * as Request from "effect/Request"
7
- import * as RequestResolver from "effect/RequestResolver"
8
5
  import { ContextMap } from "./service.js"
9
6
 
10
7
  // TODO: we have to create a new contextmap on every request.
@@ -26,38 +23,17 @@ export const getContextMap = ContextMapContainer.pipe(
26
23
  )
27
24
 
28
25
  /**
29
- * Uses the official `RequestResolver.withCache` internally,
30
- * creating one cached resolver per ContextMap (i.e. per request).
31
- * Uses a shared semaphore in the ContextMap to ensure safe single initialization.
26
+ * Runs `make` at most once per ContextMap (i.e. per request) and caches the
27
+ * resulting value in the ContextMap under a fresh symbol. Subsequent calls of
28
+ * the returned Effect within the same ContextMap return the cached value.
29
+ *
30
+ * Uses the ContextMap's shared semaphore for safe single initialization.
32
31
  */
33
- export const withRequestResolverCache: {
34
- <A extends Request.Request<any, any>>(options: {
35
- readonly capacity: number
36
- readonly strategy?: "lru" | "fifo" | undefined
37
- }): (
38
- self: RequestResolver.RequestResolver<A>
39
- ) => Effect.Effect<RequestResolver.RequestResolver<A>, ContextMapNotStartedError>
40
- <A extends Request.Request<any, any>>(
41
- self: RequestResolver.RequestResolver<A>,
42
- options: {
43
- readonly capacity: number
44
- readonly strategy?: "lru" | "fifo" | undefined
45
- }
46
- ): Effect.Effect<RequestResolver.RequestResolver<A>, ContextMapNotStartedError>
47
- } = dual(2, <A extends Request.Request<any, any>>(
48
- self: RequestResolver.RequestResolver<A>,
49
- options: {
50
- readonly capacity: number
51
- readonly strategy?: "lru" | "fifo" | undefined
52
- }
53
- ): Effect.Effect<RequestResolver.RequestResolver<A>, ContextMapNotStartedError> => {
32
+ export const cachedPerRequest = <A, E, R>(
33
+ make: Effect.Effect<A, E, R>
34
+ ): Effect.Effect<A, E | ContextMapNotStartedError, R> => {
54
35
  const cacheKey = Symbol()
55
36
  return getContextMap.pipe(
56
- Effect.flatMap((ctxMap) =>
57
- ctxMap.getOrCreateStoreEffect(
58
- cacheKey,
59
- RequestResolver.withCache(self, options)
60
- )
61
- )
37
+ Effect.flatMap((ctxMap) => ctxMap.getOrCreateStoreEffect(cacheKey, make))
62
38
  )
63
- })
39
+ }