@effect-app/infra 4.0.0-beta.79 → 4.0.0-beta.81

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,22 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 4.0.0-beta.81
4
+
5
+ ### Minor Changes
6
+
7
+ - fd67f0b: Add `withRequestResolverCache` to scope RequestResolver cache to the ContextMap (request-scoped). Add `getOrCreateStore` to ContextMap for generic scoped storage.
8
+
9
+ ### Patch Changes
10
+
11
+ - effect-app@4.0.0-beta.81
12
+
13
+ ## 4.0.0-beta.80
14
+
15
+ ### Patch Changes
16
+
17
+ - eaf0115: enforce local
18
+ - effect-app@4.0.0-beta.80
19
+
3
20
  ## 4.0.0-beta.79
4
21
 
5
22
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import { Cause, Effect, Exit } from "effect-app";
2
- export declare const reportQueueError: <E>(cause: Cause.Cause<E>, extras?: Record<string, unknown>) => Effect.Effect<import("effect-app/client/errors").CauseException<unknown> | undefined, never, never>;
2
+ export declare const reportQueueError: <E>(cause: Cause.Cause<E>, extras?: Record<string, unknown>) => Effect.Effect<import("effect-app/client").CauseException<unknown> | undefined, never, never>;
3
3
  export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <A, E, R>(inp: Effect.Effect<A, E, R>) => Effect.Effect<Exit.Exit<A, E>, never, R>;
4
4
  export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: Cause.Cause<E>) => Effect.Effect<void>;
5
5
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,wGACzD,CAAA;AAElC,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAEnE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAUxF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACxE,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAMvD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iGACzD,CAAA;AAElC,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAEnE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAUxF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACxE,CAAC,EAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAMvD"}
@@ -1,6 +1,7 @@
1
- import { Context, Effect, Layer } from "effect-app";
1
+ import { Context, Effect, Layer, RequestResolver } from "effect-app";
2
+ import type * as Request from "effect/Request";
2
3
  import { ContextMap } from "./service.js";
3
- declare const ContextMapContainer_base: Context.Reference<"root" | ContextMap>;
4
+ declare const ContextMapContainer_base: Context.Reference<ContextMap | "root">;
4
5
  export declare class ContextMapContainer extends ContextMapContainer_base {
5
6
  static readonly layer: Layer.Layer<never, never, never>;
6
7
  }
@@ -10,5 +11,15 @@ declare const ContextMapNotStartedError_base: new <A extends Record<string, any>
10
11
  export declare class ContextMapNotStartedError extends ContextMapNotStartedError_base {
11
12
  }
12
13
  export declare const getContextMap: Effect.Effect<ContextMap, ContextMapNotStartedError, never>;
14
+ export declare const withRequestResolverCache: {
15
+ <A extends Request.Request<any, any>>(options: {
16
+ readonly capacity: number;
17
+ readonly strategy?: "lru" | "fifo" | undefined;
18
+ }): (self: RequestResolver.RequestResolver<A>) => RequestResolver.RequestResolver<A>;
19
+ <A extends Request.Request<any, any>>(self: RequestResolver.RequestResolver<A>, options: {
20
+ readonly capacity: number;
21
+ readonly strategy?: "lru" | "fifo" | undefined;
22
+ }): RequestResolver.RequestResolver<A>;
23
+ };
13
24
  export {};
14
25
  //# sourceMappingURL=ContextMapContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMapContainer.d.ts","sourceRoot":"","sources":["../../src/Store/ContextMapContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,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"}
1
+ {"version":3,"file":"ContextMapContainer.d.ts","sourceRoot":"","sources":["../../src/Store/ContextMapContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAa,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIrF,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAC9C,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,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,CAAC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACpF,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,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;CA+ErC,CAAA"}
@@ -1,4 +1,6 @@
1
- import { Context, Data, Effect, Layer } from "effect-app";
1
+ import { Context, Data, Effect, Layer, RequestResolver } from "effect-app";
2
+ import { dual } from "effect/Function";
3
+ import * as MutableHashMap from "effect/MutableHashMap";
2
4
  import { ContextMap } from "./service.js";
3
5
  // TODO: we have to create a new contextmap on every request.
4
6
  // we want to share one map during startup
@@ -13,4 +15,63 @@ export class ContextMapContainer extends Context.Reference("ContextMapContainer"
13
15
  export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotStartedError") {
14
16
  }
15
17
  export const getContextMap = ContextMapContainer.asEffect().pipe(Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError()));
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV6Qyw2REFBNkQ7QUFDN0QsMENBQTBDO0FBQzFDLHlFQUF5RTtBQUN6RSw0R0FBNEc7QUFDNUcseUZBQXlGO0FBRXpGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFO0lBQ2hGLFlBQVksRUFBRSxHQUF3QixFQUFFLENBQUMsTUFBTTtDQUNoRCxDQUFDO0lBQ0EsTUFBTSxDQUFVLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7O0FBRzdGLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO0NBQUc7QUFFL0YsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FDOUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLHlCQUF5QixFQUFFLENBQUMsQ0FDaEYsQ0FBQSJ9
18
+ export const withRequestResolverCache = dual(2, (self, options) => {
19
+ const cacheKey = Symbol();
20
+ const strategy = options.strategy ?? "lru";
21
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
22
+ return RequestResolver.makeWith({
23
+ ...self,
24
+ runAll(entries, key) {
25
+ return Effect.flatMap(getContextMap.pipe(Effect.orDie), (contextMap) => {
26
+ const cache = contextMap.getOrCreateStore(cacheKey, () => MutableHashMap.empty());
27
+ const uncached = [];
28
+ for (const entry of entries) {
29
+ const ocached = MutableHashMap.get(cache, entry.request);
30
+ if (ocached._tag === "None") {
31
+ const cached = { entry, exit: undefined };
32
+ MutableHashMap.set(cache, entry.request, cached);
33
+ const prevComplete = entry.completeUnsafe.bind(entry);
34
+ entry.completeUnsafe = (exit) => {
35
+ cached.exit = exit;
36
+ prevComplete(exit);
37
+ };
38
+ uncached.push(entry);
39
+ }
40
+ else {
41
+ const cached = ocached.value;
42
+ if (cached.exit) {
43
+ if (strategy === "lru") {
44
+ MutableHashMap.remove(cache, cached.entry.request);
45
+ MutableHashMap.set(cache, cached.entry.request, cached);
46
+ }
47
+ entry.completeUnsafe(cached.exit);
48
+ }
49
+ else {
50
+ cached.entry.uninterruptible = true;
51
+ const prevComplete = cached.entry.completeUnsafe.bind(cached.entry);
52
+ cached.entry.completeUnsafe = (exit) => {
53
+ prevComplete(exit);
54
+ entry.completeUnsafe(exit);
55
+ };
56
+ }
57
+ }
58
+ }
59
+ if (uncached.length === 0)
60
+ return Effect.void;
61
+ return Effect.onExit(self.runAll(uncached, key), () => {
62
+ let toRemove = MutableHashMap.size(cache) - options.capacity;
63
+ if (toRemove <= 0)
64
+ return Effect.void;
65
+ for (const k of MutableHashMap.keys(cache)) {
66
+ MutableHashMap.remove(cache, k);
67
+ toRemove--;
68
+ if (toRemove <= 0)
69
+ break;
70
+ }
71
+ return Effect.void;
72
+ });
73
+ });
74
+ }
75
+ });
76
+ });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBYSxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXJGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLEtBQUssY0FBYyxNQUFNLHVCQUF1QixDQUFBO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekMsNkRBQTZEO0FBQzdELDBDQUEwQztBQUMxQyx5RUFBeUU7QUFDekUsNEdBQTRHO0FBQzVHLHlGQUF5RjtBQUV6RixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtJQUNoRixZQUFZLEVBQUUsR0FBd0IsRUFBRSxDQUFDLE1BQU07Q0FDaEQsQ0FBQztJQUNBLE1BQU0sQ0FBVSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBOztBQUc3RixNQUFNLE9BQU8seUJBQTBCLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztDQUFHO0FBRS9GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQzlELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQ2hGLENBQUE7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
@@ -84,14 +84,17 @@ export declare class StoreMaker extends StoreMaker_base {
84
84
  export declare const makeContextMap: () => {
85
85
  get: (id: string) => string | undefined;
86
86
  set: (id: string, eTag: string | undefined) => void;
87
+ getOrCreateStore: <T>(key: symbol, make: () => T) => T;
87
88
  };
88
89
  declare const ContextMap_base: Context.OpaqueClass<ContextMap, "effect-app/ContextMap", {
89
90
  get: (id: string) => string | undefined;
90
91
  set: (id: string, eTag: string | undefined) => void;
92
+ getOrCreateStore: <T>(key: symbol, make: () => T) => T;
91
93
  }> & {
92
94
  readonly make: Effect.Effect<{
93
95
  get: (id: string) => string | undefined;
94
96
  set: (id: string, eTag: string | undefined) => void;
97
+ getOrCreateStore: <T>(key: symbol, make: () => T) => T;
95
98
  }, never, never>;
96
99
  };
97
100
  export declare class ContextMap extends ContextMap_base {
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Store/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Store/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,qBAAqB,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AACpG,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AACpE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/C;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAE1B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;AAC9D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAGxD,MAAM,MAAM,KAAK,GACb;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,GAC5D;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GACxE;IACA,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,eAAe,CAAA;IAClG,KAAK,EAAE,MAAM,CAAA;CACd,GACC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9D;IACA,GAAG,EAAE,MAAM,CAAA;IACX,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAA;IAClB,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE,CAAA;CACpC,CAAA;AAEH,MAAM,MAAM,MAAM,GAAG,SAAS,YAAY,EAAE,CAAA;AAE5C,MAAM,WAAW,CAAC,CAAC,YAAY,SAAS,WAAW;IACjD,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;IAC5B,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,UAAU,CAAC,OAAO,SAAS,WAAW,EAAE,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK;IACtF,CAAC,EAAE,OAAO,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,CAAC,EAAE,qBAAqB,CAAC,CAAC,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC,GAAG,SAAS,CAAA;IAC3F,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC1B;AAED,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,WAAW,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,GAAG,KAAK,EACpF,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,KACzB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,SAAS,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAExE,MAAM,WAAW,KAAK,CACpB,KAAK,SAAS,MAAM,OAAO,EAC3B,OAAO,SAAS,WAAW,EAC3B,EAAE,SAAS,oBAAoB,CAAC,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAExE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;IACxB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9D,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,8BAA8B,CAAC,CAAA;IACjE,QAAQ,EAAE,CACR,KAAK,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAA;IAC7E,OAAO,EAAE,CACP,KAAK,EAAE,qBAAqB,CAAC,EAAE,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAA;IAC7E,WAAW,EAAE,CAAC,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACvG,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;CAChF;;UAGO,CAAC,KAAK,SAAS,MAAM,OAAO,EAAE,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EACnF,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7C,MAAM,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AANjD,qBAAa,UAAW,SAAQ,eAOH;CAC5B;AAED,eAAO,MAAM,cAAc;cAEJ,MAAM;cACN,MAAM,QAAQ,MAAM,GAAG,SAAS;uBAgEhC,CAAC,OAAO,MAAM,QAAQ,MAAM,CAAC,KAAG,CAAC;CASvD,CAAA;;cA1EsB,MAAM;cACN,MAAM,QAAQ,MAAM,GAAG,SAAS;uBAgEhC,CAAC,OAAO,MAAM,QAAQ,MAAM,CAAC,KAAG,CAAC;;;kBAjEjC,MAAM;kBACN,MAAM,QAAQ,MAAM,GAAG,SAAS;2BAgEhC,CAAC,OAAO,MAAM,QAAQ,MAAM,CAAC,KAAG,CAAC;;;AAaxD,qBAAa,UAAW,SAAQ,eAAwE;CACvG;AAED,MAAM,MAAM,oBAAoB,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,GAAG;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf"}
@@ -59,13 +59,21 @@ export const makeContextMap = () => {
59
59
  // }
60
60
  // }
61
61
  // }
62
+ const store = new Map();
62
63
  return {
63
64
  get: getEtag,
64
- set: setEtag
65
- // parserEnv
65
+ set: setEtag,
66
+ getOrCreateStore: (key, make) => {
67
+ let value = store.get(key);
68
+ if (value === undefined) {
69
+ value = make();
70
+ store.set(key, value);
71
+ }
72
+ return value;
73
+ }
66
74
  };
67
75
  };
68
76
  const makeMap = Effect.sync(() => makeContextMap());
69
77
  export class ContextMap extends Context.Opaque()("effect-app/ContextMap", { make: makeMap }) {
70
78
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUEwRCxNQUFNLFlBQVksQ0FBQTtBQXlGcEcsTUFBTSxPQUFPLFVBQVcsU0FBUSxPQUFPLENBQUMsTUFBTSxFQU8xQyxDQUFDLHVCQUF1QixDQUFDO0NBQzVCO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtJQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxJQUF3QixFQUFFLEVBQUU7UUFDdkQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsMkJBQTJCO0lBQzNCLGdEQUFnRDtJQUNoRCxNQUFNO0lBRU4sK0JBQStCO0lBQy9CLDJCQUEyQjtJQUMzQixzQ0FBc0M7SUFDdEMsTUFBTTtJQUVOLGtDQUFrQztJQUNsQyx3QkFBd0I7SUFDeEIsb0NBQW9DO0lBQ3BDLFNBQVM7SUFDVCwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLElBQUk7SUFFSixpQ0FBaUM7SUFDakMsb0ZBQW9GO0lBQ3BGLG9JQUFvSTtJQUNwSSxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLDRHQUE0RztJQUM1RyxzQ0FBc0M7SUFDdEMsa0VBQWtFO0lBQ2xFLHVEQUF1RDtJQUN2RCxzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLFNBQVM7SUFDVCxxQ0FBcUM7SUFDckMseUNBQXlDO0lBQ3pDLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLCtDQUErQztJQUMvQyxxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDJDQUEyQztJQUMzQyx5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLFlBQVk7SUFDWixpQkFBaUI7SUFDakIseUNBQXlDO0lBQ3pDLHFEQUFxRDtJQUNyRCxvQkFBb0I7SUFDcEIsVUFBVTtJQUNWLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUVKLE9BQU87UUFDTCxHQUFHLEVBQUUsT0FBTztRQUNaLEdBQUcsRUFBRSxPQUFPO1FBQ1osWUFBWTtLQUNiLENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7QUFFbkQsTUFBTSxPQUFPLFVBQVcsU0FBUSxPQUFPLENBQUMsTUFBTSxFQUFjLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Q0FDdkcifQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUEwRCxNQUFNLFlBQVksQ0FBQTtBQXlGcEcsTUFBTSxPQUFPLFVBQVcsU0FBUSxPQUFPLENBQUMsTUFBTSxFQU8xQyxDQUFDLHVCQUF1QixDQUFDO0NBQzVCO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLEdBQUcsRUFBRTtJQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxJQUF3QixFQUFFLEVBQUU7UUFDdkQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCwrQkFBK0I7SUFDL0IsMkJBQTJCO0lBQzNCLGdEQUFnRDtJQUNoRCxNQUFNO0lBRU4sK0JBQStCO0lBQy9CLDJCQUEyQjtJQUMzQixzQ0FBc0M7SUFDdEMsTUFBTTtJQUVOLGtDQUFrQztJQUNsQyx3QkFBd0I7SUFDeEIsb0NBQW9DO0lBQ3BDLFNBQVM7SUFDVCwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLElBQUk7SUFFSixpQ0FBaUM7SUFDakMsb0ZBQW9GO0lBQ3BGLG9JQUFvSTtJQUNwSSxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLDRHQUE0RztJQUM1RyxzQ0FBc0M7SUFDdEMsa0VBQWtFO0lBQ2xFLHVEQUF1RDtJQUN2RCxzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLFNBQVM7SUFDVCxxQ0FBcUM7SUFDckMseUNBQXlDO0lBQ3pDLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLCtDQUErQztJQUMvQyxxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDJDQUEyQztJQUMzQyx5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLFlBQVk7SUFDWixpQkFBaUI7SUFDakIseUNBQXlDO0lBQ3pDLHFEQUFxRDtJQUNyRCxvQkFBb0I7SUFDcEIsVUFBVTtJQUNWLFFBQVE7SUFDUixNQUFNO0lBQ04sSUFBSTtJQUVKLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFBO0lBRXhDLE9BQU87UUFDTCxHQUFHLEVBQUUsT0FBTztRQUNaLEdBQUcsRUFBRSxPQUFPO1FBQ1osZ0JBQWdCLEVBQUUsQ0FBSSxHQUFXLEVBQUUsSUFBYSxFQUFLLEVBQUU7WUFDckQsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQWtCLENBQUE7WUFDM0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQTtnQkFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN2QixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtBQUVuRCxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQWMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztDQUN2RyJ9
@@ -1,5 +1,5 @@
1
1
  import { Effect } from "effect-app";
2
2
  import { HttpServerRequest, HttpServerResponse } from "effect-app/http";
3
3
  import { Locale } from "../../RequestContext.js";
4
- export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never>>;
4
+ export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: Effect.Effect<HttpServerResponse.HttpServerResponse, E, R | HttpServerRequest.HttpServerRequest>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never>>;
5
5
  //# sourceMappingURL=RequestContextMiddleware.d.ts.map
@@ -29,16 +29,16 @@ const withRequestSpan = (name = "request", options) => (f) => Effect.andThen(get
29
29
  // request context info is picked up directly in the logger for annotations.
30
30
  Effect.withLogSpan(name)));
31
31
  export const setupRequestContextFromCurrent = (name = "request", options) => (self) => self
32
- .pipe(withRequestSpan(name, options), Effect.provide(ContextMapContainer.layer));
32
+ .pipe(withRequestSpan(name, options), Effect.provide(ContextMapContainer.layer, { local: true }));
33
33
  // TODO: consider integrating Effect.withParentSpan
34
34
  export function setupRequestContext(self, requestContext) {
35
35
  const layer = Layer.mergeAll(ContextMapContainer.layer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
36
36
  return self
37
- .pipe(withRequestSpan(requestContext.name), Effect.provide(layer));
37
+ .pipe(withRequestSpan(requestContext.name), Effect.provide(layer, { local: true }));
38
38
  }
39
39
  export function setupRequestContextWithCustomSpan(self, requestContext, name, options) {
40
40
  const layer = Layer.mergeAll(ContextMapContainer.layer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
41
41
  return self
42
- .pipe(withRequestSpan(name, options), Effect.provide(layer));
42
+ .pipe(withRequestSpan(name, options), Effect.provide(layer, { local: true }));
43
43
  }
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZXR1cFJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNO0tBQ3BDLEdBQUcsQ0FBQztJQUNILElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO0lBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQ3pDLElBQUksY0FBYyxDQUFDO0lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNO0lBQ04sU0FBUztJQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ25DLENBQUMsQ0FDSCxDQUNGLENBQUE7QUFFSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtJQUM1QixTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRTtDQUM5QixDQUFDLENBQUE7QUFFRixNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLEVBQUUsT0FBNEIsRUFBRSxFQUFFLENBQUMsQ0FBVSxDQUF5QixFQUFFLEVBQUUsQ0FDakgsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFLLEVBQ0wsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLENBQUMsQ0FBQyxJQUFJLENBQ0osTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7SUFDcEIsR0FBRyxPQUFPO0lBQ1YsVUFBVSxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRTtDQUNyRyxFQUFFO0lBQ0QsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixJQUFJLEtBQUs7Q0FDdkQsQ0FBQztBQUNGLGNBQWM7QUFDZCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FDekIsQ0FDSixDQUFBO0FBRUgsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQ3pDLENBQUMsSUFBSSxHQUFHLFNBQVMsRUFBRSxPQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFVLElBQTRCLEVBQUUsRUFBRSxDQUM1RixJQUFJO0tBQ0QsSUFBSSxDQUNILGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQzFDLENBQUE7QUFFUCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLG1CQUFtQixDQUFVLElBQTRCLEVBQUUsY0FBOEI7SUFDdkcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FDMUIsbUJBQW1CLENBQUMsS0FBSyxFQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQy9DLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FDakQsQ0FBQTtJQUNELE9BQU8sSUFBSTtTQUNSLElBQUksQ0FDSCxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUN0QixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxpQ0FBaUMsQ0FDL0MsSUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsSUFBWSxFQUNaLE9BQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQzFCLG1CQUFtQixDQUFDLEtBQUssRUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUMvQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQ2pELENBQUE7SUFDRCxPQUFPLElBQUk7U0FDUixJQUFJLENBQ0gsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FDdEIsQ0FBQTtBQUNMLENBQUMifQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zZXR1cFJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUU1QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNO0tBQ3BDLEdBQUcsQ0FBQztJQUNILElBQUksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNDLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO0lBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQ3pDLElBQUksY0FBYyxDQUFDO0lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUMvQixNQUFNO0lBQ04sU0FBUztJQUNULElBQUksRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ25DLENBQUMsQ0FDSCxDQUNGLENBQUE7QUFFSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUM5QixNQUFNLEVBQUUsU0FBUyxDQUFD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "4.0.0-beta.79",
3
+ "version": "4.0.0-beta.81",
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": "7.0.1",
15
15
  "query-string": "^9.3.1",
16
- "effect-app": "4.0.0-beta.79"
16
+ "effect-app": "4.0.0-beta.81"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.9.2",
@@ -1,4 +1,8 @@
1
- import { Context, Data, Effect, Layer } from "effect-app"
1
+ import { Context, Data, Effect, type Exit, Layer, RequestResolver } from "effect-app"
2
+ import type { NonEmptyArray } from "effect/Array"
3
+ import { dual } from "effect/Function"
4
+ import * as MutableHashMap from "effect/MutableHashMap"
5
+ import type * as Request from "effect/Request"
2
6
  import { ContextMap } from "./service.js"
3
7
 
4
8
  // TODO: we have to create a new contextmap on every request.
@@ -18,3 +22,95 @@ export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotSt
18
22
  export const getContextMap = ContextMapContainer.asEffect().pipe(
19
23
  Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError())
20
24
  )
25
+
26
+ export const withRequestResolverCache: {
27
+ <A extends Request.Request<any, any>>(options: {
28
+ readonly capacity: number
29
+ readonly strategy?: "lru" | "fifo" | undefined
30
+ }): (self: RequestResolver.RequestResolver<A>) => RequestResolver.RequestResolver<A>
31
+ <A extends Request.Request<any, any>>(
32
+ self: RequestResolver.RequestResolver<A>,
33
+ options: {
34
+ readonly capacity: number
35
+ readonly strategy?: "lru" | "fifo" | undefined
36
+ }
37
+ ): RequestResolver.RequestResolver<A>
38
+ } = dual(2, <A extends Request.Request<any, any>>(
39
+ self: RequestResolver.RequestResolver<A>,
40
+ options: {
41
+ readonly capacity: number
42
+ readonly strategy?: "lru" | "fifo" | undefined
43
+ }
44
+ ): RequestResolver.RequestResolver<A> => {
45
+ const cacheKey = Symbol()
46
+ const strategy = options.strategy ?? "lru"
47
+ type CacheEntry = {
48
+ readonly entry: Request.Entry<A>
49
+ exit: Exit.Exit<Request.Success<A>, Request.Error<A>> | undefined
50
+ }
51
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
52
+ return RequestResolver.makeWith({
53
+ ...(self as any),
54
+ runAll(
55
+ entries: NonEmptyArray<Request.Entry<A>>,
56
+ key: unknown
57
+ ) {
58
+ return Effect.flatMap(
59
+ getContextMap.pipe(Effect.orDie),
60
+ (contextMap) => {
61
+ const cache = contextMap.getOrCreateStore<MutableHashMap.MutableHashMap<A, CacheEntry>>(
62
+ cacheKey,
63
+ () => MutableHashMap.empty()
64
+ )
65
+
66
+ const uncached: Array<Request.Entry<A>> = []
67
+ for (const entry of entries) {
68
+ const ocached = MutableHashMap.get(cache, entry.request)
69
+ if (ocached._tag === "None") {
70
+ const cached: CacheEntry = { entry, exit: undefined }
71
+ MutableHashMap.set(cache, entry.request, cached)
72
+ const prevComplete = entry.completeUnsafe.bind(entry)
73
+ entry.completeUnsafe = (exit) => {
74
+ cached.exit = exit
75
+ prevComplete(exit)
76
+ }
77
+ uncached.push(entry)
78
+ } else {
79
+ const cached = ocached.value
80
+ if (cached.exit) {
81
+ if (strategy === "lru") {
82
+ MutableHashMap.remove(cache, cached.entry.request)
83
+ MutableHashMap.set(cache, cached.entry.request, cached)
84
+ }
85
+ entry.completeUnsafe(cached.exit as any)
86
+ } else {
87
+ cached.entry.uninterruptible = true
88
+ const prevComplete = cached.entry.completeUnsafe.bind(cached.entry)
89
+ cached.entry.completeUnsafe = (exit) => {
90
+ prevComplete(exit)
91
+ entry.completeUnsafe(exit)
92
+ }
93
+ }
94
+ }
95
+ }
96
+
97
+ if (uncached.length === 0) return Effect.void
98
+
99
+ return Effect.onExit(
100
+ (self as any).runAll(uncached, key),
101
+ () => {
102
+ let toRemove = MutableHashMap.size(cache) - options.capacity
103
+ if (toRemove <= 0) return Effect.void
104
+ for (const k of MutableHashMap.keys(cache)) {
105
+ MutableHashMap.remove(cache, k)
106
+ toRemove--
107
+ if (toRemove <= 0) break
108
+ }
109
+ return Effect.void
110
+ }
111
+ )
112
+ }
113
+ )
114
+ }
115
+ })
116
+ })
@@ -161,10 +161,19 @@ export const makeContextMap = () => {
161
161
  // }
162
162
  // }
163
163
 
164
+ const store = new Map<symbol, unknown>()
165
+
164
166
  return {
165
167
  get: getEtag,
166
- set: setEtag
167
- // parserEnv
168
+ set: setEtag,
169
+ getOrCreateStore: <T>(key: symbol, make: () => T): T => {
170
+ let value = store.get(key) as T | undefined
171
+ if (value === undefined) {
172
+ value = make()
173
+ store.set(key, value)
174
+ }
175
+ return value
176
+ }
168
177
  }
169
178
  }
170
179
 
@@ -48,7 +48,7 @@ export const setupRequestContextFromCurrent =
48
48
  self
49
49
  .pipe(
50
50
  withRequestSpan(name, options),
51
- Effect.provide(ContextMapContainer.layer)
51
+ Effect.provide(ContextMapContainer.layer, { local: true })
52
52
  )
53
53
 
54
54
  // TODO: consider integrating Effect.withParentSpan
@@ -61,7 +61,7 @@ export function setupRequestContext<R, E, A>(self: Effect.Effect<A, E, R>, reque
61
61
  return self
62
62
  .pipe(
63
63
  withRequestSpan(requestContext.name),
64
- Effect.provide(layer)
64
+ Effect.provide(layer, { local: true })
65
65
  )
66
66
  }
67
67
 
@@ -79,6 +79,6 @@ export function setupRequestContextWithCustomSpan<R, E, A>(
79
79
  return self
80
80
  .pipe(
81
81
  withRequestSpan(name, options),
82
- Effect.provide(layer)
82
+ Effect.provide(layer, { local: true })
83
83
  )
84
84
  }