@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 +17 -0
- package/dist/QueueMaker/errors.d.ts +1 -1
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.d.ts +13 -2
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +63 -2
- package/dist/Store/service.d.ts +3 -0
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +11 -3
- package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
- package/dist/api/setupRequest.js +4 -4
- package/package.json +2 -2
- package/src/Store/ContextMapContainer.ts +97 -1
- package/src/Store/service.ts +11 -2
- package/src/api/setupRequest.ts +3 -3
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
|
|
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,
|
|
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"
|
|
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,
|
|
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
|
-
|
|
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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
|
package/dist/Store/service.d.ts
CHANGED
|
@@ -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"}
|
package/dist/Store/service.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
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
|
package/dist/api/setupRequest.js
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
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
|
+
})
|
package/src/Store/service.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
package/src/api/setupRequest.ts
CHANGED
|
@@ -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
|
}
|