@effect-app/infra 4.0.0-beta.249 → 4.0.0-beta.250
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 +8 -0
- package/dist/internal/RequestContextMiddleware.js +2 -2
- package/dist/setupRequest.d.ts +1 -1
- package/dist/setupRequest.d.ts.map +1 -1
- package/dist/setupRequest.js +2 -2
- package/package.json +2 -6
- package/src/internal/RequestContextMiddleware.ts +1 -1
- package/src/setupRequest.ts +1 -1
- package/test/rpc-context-map-streaming.test.ts +1 -1
- package/dist/Store/ContextMapContainer.d.ts +0 -24
- package/dist/Store/ContextMapContainer.d.ts.map +0 -1
- package/dist/Store/ContextMapContainer.js +0 -30
- package/src/Store/ContextMapContainer.ts +0 -39
package/CHANGELOG.md
CHANGED
|
@@ -3,8 +3,8 @@ import { HttpMiddleware, HttpServerRequest, HttpServerResponse } from "effect-ap
|
|
|
3
3
|
import * as Layer from "effect-app/Layer";
|
|
4
4
|
import { Locale, LocaleRef, RequestContext, spanAttributes } from "effect-app/RequestContext";
|
|
5
5
|
import { NonEmptyString255 } from "effect-app/Schema";
|
|
6
|
+
import { ContextMapContainer } from "effect-app/Store";
|
|
6
7
|
import { provideOnRequestScope } from "../setupRequest.js";
|
|
7
|
-
import { ContextMapContainer } from "../Store/ContextMapContainer.js";
|
|
8
8
|
import { storeId } from "../Store/Memory.js";
|
|
9
9
|
export const RequestContextMiddleware = (defaultLocale = "en") => HttpMiddleware.make((app) => Effect.gen(function* () {
|
|
10
10
|
const req = yield* HttpServerRequest.HttpServerRequest;
|
|
@@ -43,4 +43,4 @@ export const RequestContextMiddleware = (defaultLocale = "en") => HttpMiddleware
|
|
|
43
43
|
"Content-Language": requestContext.locale
|
|
44
44
|
});
|
|
45
45
|
}));
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHRNaWRkbGV3YXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL1JlcXVlc3RDb250ZXh0TWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2RixPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFNUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxhQUFhLEdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FDdkUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFBO0lBRXRELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQ2pDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDN0MscUdBQXFHO0lBQ3JHLE1BQU0sTUFBTSxHQUFHLGFBQWEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQW9CLENBQUM7UUFDdEUsQ0FBQyxDQUFFLGFBQTBDO1FBQzdDLENBQUMsQ0FBQyxhQUFhLENBQUE7SUFFakIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUNwQyxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQTtJQUMxRixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFOUMsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLEVBQUU7WUFDSixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87WUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQzFCLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztTQUM3QjtRQUNELElBQUksRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLDhCQUE4QjtRQUM5RyxNQUFNO1FBQ04sU0FBUztRQUNULFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQzdELENBQUMsQ0FBQTtJQUNGLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtJQUNqRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUMxQixtQkFBbUIsQ0FBQyxLQUFLLEVBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFDL0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUNqRCxDQUFBO0lBQ0QsZ0ZBQWdGO0lBQ2hGLHdFQUF3RTtJQUN4RSwrRUFBK0U7SUFDL0UsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxtRUFBbUU7SUFDbkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQ3ZDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUM3QixDQUFBO0lBRUQsbUNBQW1DO0lBQ25DLE9BQU8sa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUN4QyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsTUFBTTtLQUMxQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FDSCxDQUFBIn0=
|
package/dist/setupRequest.d.ts
CHANGED
|
@@ -16,4 +16,4 @@ export declare const setupRequestContextFromCurrent: (name?: string, options?: T
|
|
|
16
16
|
export declare const setupStreamingRequestContextFromCurrent: (name?: string, options?: Tracer.SpanOptions & SetupRequestOptions) => <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, import("effect/Scope").Scope | Exclude<Exclude<R, Tracer.ParentSpan>, never>>;
|
|
17
17
|
export declare function setupRequestContext<R, E, A>(self: Effect.Effect<A, E, R>, requestContext: RequestContext, options?: SetupRequestOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, never>>;
|
|
18
18
|
export declare function setupRequestContextWithCustomSpan<R, E, A>(self: Effect.Effect<A, E, R>, requestContext: RequestContext, name: string, options?: Tracer.SpanOptions & SetupRequestOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, never>>;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0dXBSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUV6QyxPQUFPLEVBQWEsY0FBYyxFQUFrQixNQUFNLDJCQUEyQixDQUFBO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXJELE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBWXZDLGVBQU8sTUFBTSxpQkFBaUIsNkNBZTNCLENBQUE7QUFFSCxlQUFPLE1BQU0sS0FBSzs7O2dCQUdoQixDQUFBO0FBbUJGLE1BQU0sV0FBVyxtQkFBbUI7SUFDbEMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtDQUNuQztBQU1ELGVBQU8sTUFBTSxxQkFBcUIsR0FDL0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsb0ZBU3hGLENBQUE7QUFFTixlQUFPLE1BQU0sOEJBQThCLDRCQUNaLE1BQU0sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyx1RUFNM0csQ0FBQTtBQU1QLGVBQU8sTUFBTSx1Q0FBdUMsNEJBQ3JCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxzR0FLN0csQ0FBQTtBQUdMLHdCQUFnQixtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDekMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDNUIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLHNFQWE5QjtBQUVELHdCQUFnQixpQ0FBaUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFDdkQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDNUIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsSUFBSSxFQUFFLE1BQU0sRUFDWixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLG1CQUFtQixzRUFhbkQifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../src/setupRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAa,cAAc,EAAkB,MAAM,2BAA2B,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../src/setupRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAa,cAAc,EAAkB,MAAM,2BAA2B,CAAA;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAYvC,eAAO,MAAM,iBAAiB,6CAe3B,CAAA;AAEH,eAAO,MAAM,KAAK;;;gBAGhB,CAAA;AAmBF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;AAMD,eAAO,MAAM,qBAAqB,GAC/B,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,oFASxF,CAAA;AAEN,eAAO,MAAM,8BAA8B,4BACZ,MAAM,CAAC,WAAW,GAAG,mBAAmB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,uEAM3G,CAAA;AAMP,eAAO,MAAM,uCAAuC,4BACrB,MAAM,CAAC,WAAW,GAAG,mBAAmB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sGAK7G,CAAA;AAGL,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACzC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,cAAc,EAAE,cAAc,EAC9B,OAAO,CAAC,EAAE,mBAAmB,sEAa9B;AAED,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACvD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC5B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,mBAAmB,sEAanD"}
|
package/dist/setupRequest.js
CHANGED
|
@@ -3,9 +3,9 @@ import * as Layer from "effect-app/Layer";
|
|
|
3
3
|
import * as Option from "effect-app/Option";
|
|
4
4
|
import { LocaleRef, RequestContext, spanAttributes } from "effect-app/RequestContext";
|
|
5
5
|
import { NonEmptyString255 } from "effect-app/Schema";
|
|
6
|
+
import { ContextMapContainer } from "effect-app/Store";
|
|
6
7
|
import * as Tracer from "effect/Tracer";
|
|
7
8
|
import { SqlClient } from "effect/unstable/sql";
|
|
8
|
-
import { ContextMapContainer } from "./Store/ContextMapContainer.js";
|
|
9
9
|
import { storeId } from "./Store/Memory.js";
|
|
10
10
|
const withSqlTransaction = (self) => Effect.serviceOption(SqlClient.SqlClient).pipe(Effect.flatMap(Option.match({
|
|
11
11
|
onNone: () => self,
|
|
@@ -67,4 +67,4 @@ export function setupRequestContextWithCustomSpan(self, requestContext, name, op
|
|
|
67
67
|
return self
|
|
68
68
|
.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), Effect.provide(layer, { local: true }));
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NldHVwUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRTNDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBVSxJQUE0QixFQUEwQixFQUFFLENBQzNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO0lBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUM5RCxDQUFDLENBQUMsQ0FDSixDQUFBO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTTtLQUNwQyxHQUFHLENBQUM7SUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcs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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.250",
|
|
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.
|
|
16
|
+
"effect-app": "4.0.0-beta.250"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.9.3",
|
|
@@ -112,10 +112,6 @@
|
|
|
112
112
|
"types": "./dist/ServiceBus.d.ts",
|
|
113
113
|
"default": "./dist/ServiceBus.js"
|
|
114
114
|
},
|
|
115
|
-
"./Store/ContextMapContainer": {
|
|
116
|
-
"types": "./dist/Store/ContextMapContainer.d.ts",
|
|
117
|
-
"default": "./dist/Store/ContextMapContainer.js"
|
|
118
|
-
},
|
|
119
115
|
"./Store/Cosmos": {
|
|
120
116
|
"types": "./dist/Store/Cosmos.d.ts",
|
|
121
117
|
"default": "./dist/Store/Cosmos.js"
|
|
@@ -3,8 +3,8 @@ import { HttpMiddleware, HttpServerRequest, HttpServerResponse } from "effect-ap
|
|
|
3
3
|
import * as Layer from "effect-app/Layer"
|
|
4
4
|
import { Locale, LocaleRef, RequestContext, spanAttributes } from "effect-app/RequestContext"
|
|
5
5
|
import { NonEmptyString255 } from "effect-app/Schema"
|
|
6
|
+
import { ContextMapContainer } from "effect-app/Store"
|
|
6
7
|
import { provideOnRequestScope } from "../setupRequest.js"
|
|
7
|
-
import { ContextMapContainer } from "../Store/ContextMapContainer.js"
|
|
8
8
|
import { storeId } from "../Store/Memory.js"
|
|
9
9
|
|
|
10
10
|
export const RequestContextMiddleware = (defaultLocale: Locale = "en") =>
|
package/src/setupRequest.ts
CHANGED
|
@@ -3,9 +3,9 @@ import * as Layer from "effect-app/Layer"
|
|
|
3
3
|
import * as Option from "effect-app/Option"
|
|
4
4
|
import { LocaleRef, RequestContext, spanAttributes } from "effect-app/RequestContext"
|
|
5
5
|
import { NonEmptyString255 } from "effect-app/Schema"
|
|
6
|
+
import { ContextMapContainer } from "effect-app/Store"
|
|
6
7
|
import * as Tracer from "effect/Tracer"
|
|
7
8
|
import { SqlClient } from "effect/unstable/sql"
|
|
8
|
-
import { ContextMapContainer } from "./Store/ContextMapContainer.js"
|
|
9
9
|
import { storeId } from "./Store/Memory.js"
|
|
10
10
|
|
|
11
11
|
const withSqlTransaction = <R, E, A>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
@@ -42,6 +42,7 @@ import { HttpRouter, HttpServer } from "effect-app/http"
|
|
|
42
42
|
import { DefaultGenericMiddlewares } from "effect-app/middleware"
|
|
43
43
|
import { MiddlewareMaker } from "effect-app/rpc"
|
|
44
44
|
import * as S from "effect-app/Schema"
|
|
45
|
+
import { getContextMap } from "effect-app/Store"
|
|
45
46
|
import * as Effect from "effect/Effect"
|
|
46
47
|
import * as Layer from "effect/Layer"
|
|
47
48
|
import * as Option from "effect/Option"
|
|
@@ -52,7 +53,6 @@ import { createServer } from "http"
|
|
|
52
53
|
import { RequestContextMiddleware } from "../src/internal/RequestContextMiddleware.js"
|
|
53
54
|
import { makeRouter } from "../src/routing.js"
|
|
54
55
|
import { DefaultGenericMiddlewaresLive } from "../src/routing/middleware.js"
|
|
55
|
-
import { getContextMap } from "../src/Store/ContextMapContainer.js"
|
|
56
56
|
import { AllowAnonymous, AllowAnonymousLive, RequestContextMap, RequireRoles, RequireRolesLive, SomeElseMiddleware, SomeElseMiddlewareLive, SomeService, Test, TestLive } from "./fixtures.js"
|
|
57
57
|
|
|
58
58
|
// ---------------------------------------------------------------------------
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as Context from "effect-app/Context";
|
|
2
|
-
import * as Effect from "effect-app/Effect";
|
|
3
|
-
import * as Layer from "effect-app/Layer";
|
|
4
|
-
import { ContextMap } from "effect-app/Store";
|
|
5
|
-
declare const ContextMapContainer_base: Context.Reference<"root" | ContextMap>;
|
|
6
|
-
export declare class ContextMapContainer extends ContextMapContainer_base {
|
|
7
|
-
static readonly layer: Layer.Layer<never, never, never>;
|
|
8
|
-
}
|
|
9
|
-
declare const ContextMapNotStartedError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
10
|
-
readonly _tag: "ContextMapNotStartedError";
|
|
11
|
-
} & Readonly<A>;
|
|
12
|
-
export declare class ContextMapNotStartedError extends ContextMapNotStartedError_base {
|
|
13
|
-
}
|
|
14
|
-
export declare const getContextMap: Effect.Effect<ContextMap, ContextMapNotStartedError, never>;
|
|
15
|
-
/**
|
|
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
|
-
*/
|
|
22
|
-
export declare const cachedPerRequest: <A, E, R>(make: Effect.Effect<A, E, R>) => Effect.Effect<A, E | ContextMapNotStartedError, R>;
|
|
23
|
-
export {};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0NvbnRleHRNYXBDb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFBOztBQVM3QyxxQkFBYSxtQkFBb0IsU0FBUSx3QkFFdkM7SUFDQSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssbUNBQXNFO0NBQzVGOzs7O0FBRUQscUJBQWEseUJBQTBCLFNBQVEsOEJBQTZDO0NBQUc7QUFFL0YsZUFBTyxNQUFNLGFBQWEsNkRBRXpCLENBQUE7QUFFRDs7Ozs7O0dBTUc7QUFDSCxlQUFPLE1BQU0sZ0JBQWdCLEdBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsS0FDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUMsQ0FLbkQsQ0FBQSJ9
|
|
@@ -1 +0,0 @@
|
|
|
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;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;;AAS7C,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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as Context from "effect-app/Context";
|
|
2
|
-
import * as Effect from "effect-app/Effect";
|
|
3
|
-
import * as Layer from "effect-app/Layer";
|
|
4
|
-
import { ContextMap } from "effect-app/Store";
|
|
5
|
-
import * as Data from "effect/Data";
|
|
6
|
-
// TODO: we have to create a new contextmap on every request.
|
|
7
|
-
// we want to share one map during startup
|
|
8
|
-
// but we want to make sure we don't re-use the startup map after startup
|
|
9
|
-
// we can call another start after startup. but it would be even better if we could Die on accessing rootmap
|
|
10
|
-
// we could also make the ContextMap optional, and when missing, issue a warning instead?
|
|
11
|
-
export class ContextMapContainer extends Context.Reference("ContextMapContainer", {
|
|
12
|
-
defaultValue: () => "root"
|
|
13
|
-
}) {
|
|
14
|
-
static layer = Layer.effect(this, ContextMap.make.pipe(Effect.map(ContextMap.of)));
|
|
15
|
-
}
|
|
16
|
-
export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotStartedError") {
|
|
17
|
-
}
|
|
18
|
-
export const getContextMap = ContextMapContainer.pipe(Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError()));
|
|
19
|
-
/**
|
|
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
|
-
*/
|
|
26
|
-
export const cachedPerRequest = (make) => {
|
|
27
|
-
const cacheKey = Symbol();
|
|
28
|
-
return getContextMap.pipe(Effect.flatMap((ctxMap) => ctxMap.getOrCreateStoreEffect(cacheKey, make)));
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssSUFBSSxNQUFNLGFBQWEsQ0FBQTtBQUVuQyw2REFBNkQ7QUFDN0QsMENBQTBDO0FBQzFDLHlFQUF5RTtBQUN6RSw0R0FBNEc7QUFDNUcseUZBQXlGO0FBRXpGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFO0lBQ2hGLFlBQVksRUFBRSxHQUF3QixFQUFFLENBQUMsTUFBTTtDQUNoRCxDQUFDO0lBQ0EsTUFBTSxDQUFVLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDNUY7QUFFRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztDQUFHO0FBRS9GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQ25ELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSx5QkFBeUIsRUFBRSxDQUFDLENBQ2hGLENBQUE7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixJQUE0QixFQUN3QixFQUFFO0lBQ3RELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFBO0lBQ3pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUMxRSxDQUFBO0FBQ0gsQ0FBQyxDQUFBIn0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import * as Context from "effect-app/Context"
|
|
2
|
-
import * as Effect from "effect-app/Effect"
|
|
3
|
-
import * as Layer from "effect-app/Layer"
|
|
4
|
-
import { ContextMap } from "effect-app/Store"
|
|
5
|
-
import * as Data from "effect/Data"
|
|
6
|
-
|
|
7
|
-
// TODO: we have to create a new contextmap on every request.
|
|
8
|
-
// we want to share one map during startup
|
|
9
|
-
// but we want to make sure we don't re-use the startup map after startup
|
|
10
|
-
// we can call another start after startup. but it would be even better if we could Die on accessing rootmap
|
|
11
|
-
// we could also make the ContextMap optional, and when missing, issue a warning instead?
|
|
12
|
-
|
|
13
|
-
export class ContextMapContainer extends Context.Reference("ContextMapContainer", {
|
|
14
|
-
defaultValue: (): ContextMap | "root" => "root"
|
|
15
|
-
}) {
|
|
16
|
-
static readonly layer = Layer.effect(this, ContextMap.make.pipe(Effect.map(ContextMap.of)))
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotStartedError") {}
|
|
20
|
-
|
|
21
|
-
export const getContextMap = ContextMapContainer.pipe(
|
|
22
|
-
Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError())
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
/**
|
|
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.
|
|
31
|
-
*/
|
|
32
|
-
export const cachedPerRequest = <A, E, R>(
|
|
33
|
-
make: Effect.Effect<A, E, R>
|
|
34
|
-
): Effect.Effect<A, E | ContextMapNotStartedError, R> => {
|
|
35
|
-
const cacheKey = Symbol()
|
|
36
|
-
return getContextMap.pipe(
|
|
37
|
-
Effect.flatMap((ctxMap) => ctxMap.getOrCreateStoreEffect(cacheKey, make))
|
|
38
|
-
)
|
|
39
|
-
}
|