@effect-app/infra 4.0.0-beta.320 → 4.0.0-beta.321
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 +7 -0
- package/dist/CUPS.js +1 -1
- package/dist/ClusterCosmos.d.ts +3 -1
- package/dist/ClusterCosmos.d.ts.map +1 -1
- package/dist/arbs.d.ts +4 -1
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +12 -2
- package/dist/logger/shared.js +2 -2
- package/dist/routing/middleware/middleware.js +1 -1
- package/dist/routing.js +1 -1
- package/dist/test.js +4 -4
- package/package.json +5 -5
- package/src/CUPS.ts +1 -1
- package/src/arbs.ts +14 -1
- package/src/logger/shared.ts +1 -1
- package/src/routing/middleware/middleware.ts +1 -1
- package/src/routing.ts +1 -1
- package/src/test.ts +3 -3
- package/test/query.test.ts +2 -2
- package/test/rawQuery.test.ts +1 -1
- package/test/rpc-context-map-streaming.test.ts +5 -2
- package/test/rpc-e2e-invalidation.test.ts +5 -2
- package/test/rpc-stream-fullstack.test.ts +5 -2
package/CHANGELOG.md
CHANGED
package/dist/CUPS.js
CHANGED
|
@@ -88,7 +88,7 @@ function* buildListArgs(config) {
|
|
|
88
88
|
}
|
|
89
89
|
export const CUPSConfig = Config.all({
|
|
90
90
|
server: Config
|
|
91
|
-
.
|
|
91
|
+
.String("server")
|
|
92
92
|
.pipe(Config.map((s) => new URL(s)), Config.option, Config.nested("cups"))
|
|
93
93
|
});
|
|
94
94
|
export class CUPS extends Context.Service()("effect-app/CUPS", {
|
package/dist/ClusterCosmos.d.ts
CHANGED
|
@@ -31,7 +31,9 @@ export declare const makeMessageStorage: (options?: {
|
|
|
31
31
|
}) => Effect.Effect<Option.Option<Snowflake.Snowflake>, PersistenceError, never>;
|
|
32
32
|
readonly registerReplyHandler: <R extends import("effect/unstable/rpc/Rpc").Any>(message: import("effect/unstable/cluster/Message").OutgoingRequest<R> | import("effect/unstable/cluster/Message").IncomingRequest<R>) => Effect.Effect<void, import("effect/unstable/cluster/ClusterError").EntityNotAssignedToRunner, never>;
|
|
33
33
|
readonly unregisterReplyHandler: (requestId: Snowflake.Snowflake) => Effect.Effect<void, never, never>;
|
|
34
|
-
readonly unregisterShardReplyHandlers: (shardId: ShardId.ShardId
|
|
34
|
+
readonly unregisterShardReplyHandlers: (shardId: ShardId.ShardId, options?: {
|
|
35
|
+
readonly interrupt?: boolean | undefined;
|
|
36
|
+
}) => Effect.Effect<void, never, never>;
|
|
35
37
|
readonly unprocessedMessages: (shardIds: Iterable<ShardId.ShardId>, options?: {
|
|
36
38
|
readonly limit?: number | undefined;
|
|
37
39
|
readonly addresses?: readonly import("effect/unstable/cluster/EntityAddress").EntityAddress[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterCosmos.d.ts","sourceRoot":"","sources":["../src/ClusterCosmos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAExE,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AACxE,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAGpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAiVD,eAAO,MAAM,kBAAkB;sBACX,MAAM,GAAG,SAAS
|
|
1
|
+
{"version":3,"file":"ClusterCosmos.d.ts","sourceRoot":"","sources":["../src/ClusterCosmos.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAEvE,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AAExE,OAAO,KAAK,KAAK,KAAK,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,aAAa,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAA;AAC1D,OAAO,KAAK,cAAc,MAAM,wCAAwC,CAAA;AACxE,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAGpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAiVD,eAAO,MAAM,kBAAkB;sBACX,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CA2WpC,CAAA;AA+GF,eAAO,MAAM,iBAAiB;sBACV,MAAM,GAAG,SAAS;;;;;;;;;;uDA+RpC,CAAA;AAEF,eAAO,MAAM,mBAAmB,aAAc;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,KAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAAC,cAAc,CAG/F,CAAA;AAEH,eAAO,MAAM,kBAAkB,aAAc;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,KAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,YAAY,GAAG,cAAc,CAAC,cAAc,CACzB,CAAA;AAEvE,eAAO,MAAM,YAAY,aAAc;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC,KAAG,KAAK,CAAC,KAAK,CACb,cAAc,CAAC,cAAc,GAAG,aAAa,CAAC,aAAa,EAC3D,KAAK,EACL,YAAY,GAAG,cAAc,CAAC,cAAc,CAC6B,CAAA;AAE3E,eAAO,MAAM,WAAW,WAAY,mBAAmB,KAAG,KAAK,CAAC,KAAK,CACnE,cAAc,CAAC,cAAc,GAAG,aAAa,CAAC,aAAa,EAC3D,KAAK,EACL,cAAc,CAAC,cAAc,CAI5B,CAAA"}
|
package/dist/arbs.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type * as S from "effect-app/Schema";
|
|
2
|
-
import * as FastCheck from "
|
|
2
|
+
import * as FastCheck from "fast-check";
|
|
3
3
|
export declare function generate<T>(arb: FastCheck.Arbitrary<T>): FastCheck.Value<T>;
|
|
4
4
|
export declare function generateFromArbitrary<T>(arb: S.Arbitrary<T>): FastCheck.Value<T>;
|
|
5
|
+
export declare function generateFromSchema<S extends S.Constraint>(schema: S): {
|
|
6
|
+
value: S["Type"] & ({} | null);
|
|
7
|
+
};
|
|
5
8
|
//# sourceMappingURL=arbs.d.ts.map
|
package/dist/arbs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arbs.d.ts","sourceRoot":"","sources":["../src/arbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"arbs.d.ts","sourceRoot":"","sources":["../src/arbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,SAAS,MAAM,YAAY,CAAA;AAUvC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,sBAEtD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAE3D;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;;EASnE"}
|
package/dist/arbs.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Do not import to frontend
|
|
2
2
|
import { faker } from "@faker-js/faker";
|
|
3
3
|
import { setFaker } from "effect-app/faker";
|
|
4
|
-
import * as
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Arbitrary from "effect/unstable/arbitrary/Arbitrary";
|
|
6
|
+
import * as FastCheck from "fast-check";
|
|
5
7
|
import { Random } from "fast-check";
|
|
6
8
|
import { congruential32 } from "pure-rand/generator/congruential32";
|
|
7
9
|
const seed = 5;
|
|
@@ -14,4 +16,12 @@ export function generate(arb) {
|
|
|
14
16
|
export function generateFromArbitrary(arb) {
|
|
15
17
|
return generate(arb(FastCheck));
|
|
16
18
|
}
|
|
17
|
-
|
|
19
|
+
export function generateFromSchema(schema) {
|
|
20
|
+
const samples = Effect.runSync(Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed }));
|
|
21
|
+
const value = samples[0];
|
|
22
|
+
if (value === undefined) {
|
|
23
|
+
throw new Error("failed to sample schema");
|
|
24
|
+
}
|
|
25
|
+
return { value };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUU1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUNBQXFDLENBQUE7QUFDaEUsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFFbkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0FBQ2QsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRTNCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUVmLE1BQU0sVUFBVSxRQUFRLENBQUksR0FBMkI7SUFDckQsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFJLEdBQW1CO0lBQzFELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBQ2pDLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQXlCLE1BQVM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDNUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNyRSxDQUFBO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFBO0FBQ2xCLENBQUMifQ==
|
package/dist/logger/shared.js
CHANGED
|
@@ -3,7 +3,7 @@ import { LocaleRef, RequestContext } from "effect-app/RequestContext";
|
|
|
3
3
|
import { NonEmptyString255 } from "effect-app/Schema";
|
|
4
4
|
import { storeId } from "effect-app/Store";
|
|
5
5
|
export function getRequestContextFromFiber(fiber) {
|
|
6
|
-
const span = Option.fromNullishOr(fiber.
|
|
6
|
+
const span = Option.fromNullishOr(fiber.cache.span);
|
|
7
7
|
const locale = fiber.getRef(LocaleRef);
|
|
8
8
|
const namespace = fiber.getRef(storeId);
|
|
9
9
|
return RequestContext.make({
|
|
@@ -13,4 +13,4 @@ export function getRequestContextFromFiber(fiber) {
|
|
|
13
13
|
namespace
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZ2dlci9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUcxQyxNQUFNLFVBQVUsMEJBQTBCLENBQUMsS0FBb0M7SUFDN0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDdEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN2QyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNoRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDL0U7UUFDRCxJQUFJLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1FBQzVCLE1BQU07UUFDTixTQUFTO0tBQ1YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -57,7 +57,7 @@ const summarizePayload = (payload) => typeof payload === "object" && payload !==
|
|
|
57
57
|
: payload;
|
|
58
58
|
// TODO: do we need this as middleware or just as layer?
|
|
59
59
|
export const DevModeLive = Layer.effect(DevMode, Effect.gen(function* () {
|
|
60
|
-
const env = yield* Config.
|
|
60
|
+
const env = yield* Config.String("env").pipe(Config.withDefault("local-dev"));
|
|
61
61
|
return env !== "prod";
|
|
62
62
|
}));
|
|
63
63
|
export const RequestCacheMiddlewareLive = Layer.succeed(RequestCacheMiddleware, (effect) => effect);
|
package/dist/routing.js
CHANGED
package/dist/test.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as S from "effect-app/Schema";
|
|
2
2
|
import { copy } from "effect-app/utils";
|
|
3
|
-
import {
|
|
3
|
+
import { generateFromSchema } from "./arbs.js";
|
|
4
4
|
/**
|
|
5
5
|
* Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
|
|
6
6
|
*/
|
|
7
7
|
export const createRandomInstance = (s) => {
|
|
8
|
-
const gen =
|
|
8
|
+
const gen = generateFromSchema(s);
|
|
9
9
|
return (overrides) => {
|
|
10
10
|
const v = gen.value;
|
|
11
11
|
return overrides ? copy(v, overrides) : v;
|
|
@@ -15,7 +15,7 @@ export const createRandomInstance = (s) => {
|
|
|
15
15
|
* Like `createRandomInstance`, but takes encoded values rather than decoded ones.
|
|
16
16
|
*/
|
|
17
17
|
export const createRandomInstanceI = (s) => {
|
|
18
|
-
const gen =
|
|
18
|
+
const gen = generateFromSchema(s);
|
|
19
19
|
const encode = S.encodeSync(s);
|
|
20
20
|
const decode = S.decodeSync(s);
|
|
21
21
|
return (overrides) => {
|
|
@@ -26,4 +26,4 @@ export const createRandomInstanceI = (s) => {
|
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
28
|
export * from "./arbs.js";
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQXlCLENBQWlELEVBQUUsRUFBRTtJQUNoSCxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQyxPQUFPLENBQUMsU0FBc0IsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7UUFDbkIsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzQyxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQXNCLENBQThDLEVBQUUsRUFBRTtJQUMzRyxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDOUIsT0FBTyxDQUFDLFNBQXNCLEVBQUUsRUFBRTtRQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFBO1FBQ25CLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxDQUFDLENBQUE7UUFDeEIsT0FBTyxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsY0FBYyxXQUFXLENBQUEifQ==
|
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.321",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"proper-lockfile": "^4.1.2",
|
|
17
17
|
"pure-rand": "8.4.0",
|
|
18
18
|
"query-string": "^9.4.0",
|
|
19
|
-
"effect-app": "4.0.0-beta.
|
|
19
|
+
"effect-app": "4.0.0-beta.321"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@azure/cosmos": "^4.9.3",
|
|
23
23
|
"@azure/service-bus": "^7.9.5",
|
|
24
|
-
"@effect/sql-sqlite-node": "4.0.0-rc.
|
|
24
|
+
"@effect/sql-sqlite-node": "4.0.0-rc.114",
|
|
25
25
|
"@sentry/opentelemetry": "10.55.0",
|
|
26
26
|
"@types/better-sqlite3": "^7.6.13",
|
|
27
27
|
"@types/node": "25.9.1",
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@azure/cosmos": "^4.9.3",
|
|
41
41
|
"@azure/service-bus": "^7.9.5",
|
|
42
|
-
"@effect/vitest": "^4.0.0-rc.
|
|
42
|
+
"@effect/vitest": "^4.0.0-rc.114",
|
|
43
43
|
"@sendgrid/helpers": "^8.0.0",
|
|
44
44
|
"@sendgrid/mail": "^8.1.6",
|
|
45
45
|
"@sentry/node": "10.55.0",
|
|
46
46
|
"@sentry/opentelemetry": "10.55.0",
|
|
47
|
-
"effect": "^4.0.0-rc.
|
|
47
|
+
"effect": "^4.0.0-rc.114",
|
|
48
48
|
"jwt-decode": "^4.0.0",
|
|
49
49
|
"redis": "^3.1.2",
|
|
50
50
|
"redlock": "^4.2.0"
|
package/src/CUPS.ts
CHANGED
package/src/arbs.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
import { faker } from "@faker-js/faker"
|
|
4
4
|
import { setFaker } from "effect-app/faker"
|
|
5
5
|
import type * as S from "effect-app/Schema"
|
|
6
|
-
import * as
|
|
6
|
+
import * as Effect from "effect/Effect"
|
|
7
|
+
import * as Arbitrary from "effect/unstable/arbitrary/Arbitrary"
|
|
8
|
+
import * as FastCheck from "fast-check"
|
|
7
9
|
import { Random } from "fast-check"
|
|
8
10
|
import { congruential32 } from "pure-rand/generator/congruential32"
|
|
9
11
|
|
|
@@ -20,3 +22,14 @@ export function generate<T>(arb: FastCheck.Arbitrary<T>) {
|
|
|
20
22
|
export function generateFromArbitrary<T>(arb: S.Arbitrary<T>) {
|
|
21
23
|
return generate(arb(FastCheck))
|
|
22
24
|
}
|
|
25
|
+
|
|
26
|
+
export function generateFromSchema<S extends S.Constraint>(schema: S) {
|
|
27
|
+
const samples = Effect.runSync(
|
|
28
|
+
Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed })
|
|
29
|
+
)
|
|
30
|
+
const value = samples[0]
|
|
31
|
+
if (value === undefined) {
|
|
32
|
+
throw new Error("failed to sample schema")
|
|
33
|
+
}
|
|
34
|
+
return { value }
|
|
35
|
+
}
|
package/src/logger/shared.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { storeId } from "effect-app/Store"
|
|
|
5
5
|
import type * as Fiber from "effect/Fiber"
|
|
6
6
|
|
|
7
7
|
export function getRequestContextFromFiber(fiber: Fiber.Fiber<unknown, unknown>) {
|
|
8
|
-
const span = Option.fromNullishOr(fiber.
|
|
8
|
+
const span = Option.fromNullishOr(fiber.cache.span)
|
|
9
9
|
const locale = fiber.getRef(LocaleRef)
|
|
10
10
|
const namespace = fiber.getRef(storeId)
|
|
11
11
|
return RequestContext.make({
|
|
@@ -61,7 +61,7 @@ const summarizePayload = (payload: unknown): unknown =>
|
|
|
61
61
|
export const DevModeLive = Layer.effect(
|
|
62
62
|
DevMode,
|
|
63
63
|
Effect.gen(function*() {
|
|
64
|
-
const env = yield* Config.
|
|
64
|
+
const env = yield* Config.String("env").pipe(Config.withDefault("local-dev"))
|
|
65
65
|
return env !== "prod"
|
|
66
66
|
})
|
|
67
67
|
)
|
package/src/routing.ts
CHANGED
package/src/test.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as S from "effect-app/Schema"
|
|
2
2
|
import { copy } from "effect-app/utils"
|
|
3
|
-
import {
|
|
3
|
+
import { generateFromSchema } from "./arbs.ts"
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
|
|
7
7
|
*/
|
|
8
8
|
export const createRandomInstance = <A extends object, I, R>(s: S.Codec<A, I, R> & { fields: S.Struct.Fields }) => {
|
|
9
|
-
const gen =
|
|
9
|
+
const gen = generateFromSchema(s)
|
|
10
10
|
return (overrides?: Partial<A>) => {
|
|
11
11
|
const v = gen.value
|
|
12
12
|
return overrides ? copy(v, overrides) : v
|
|
@@ -17,7 +17,7 @@ export const createRandomInstance = <A extends object, I, R>(s: S.Codec<A, I, R>
|
|
|
17
17
|
* Like `createRandomInstance`, but takes encoded values rather than decoded ones.
|
|
18
18
|
*/
|
|
19
19
|
export const createRandomInstanceI = <A extends object, I>(s: S.Codec<A, I> & { fields: S.Struct.Fields }) => {
|
|
20
|
-
const gen =
|
|
20
|
+
const gen = generateFromSchema(s)
|
|
21
21
|
const encode = S.encodeSync(s)
|
|
22
22
|
const decode = S.decodeSync(s)
|
|
23
23
|
return (overrides?: Partial<I>) => {
|
package/test/query.test.ts
CHANGED
|
@@ -1665,7 +1665,7 @@ it("find with transformed id", () =>
|
|
|
1665
1665
|
const PreconfigurationIdFromString = S.NonEmptyString255.pipe(
|
|
1666
1666
|
S.decodeTo(
|
|
1667
1667
|
S.toType(PreconfigurationId),
|
|
1668
|
-
SchemaTransformation.
|
|
1668
|
+
SchemaTransformation.transformEffect({
|
|
1669
1669
|
decode: Effect.fnUntraced(function*(value) {
|
|
1670
1670
|
const values = value.split("_")
|
|
1671
1671
|
const label = yield* S.SchemaParser.decodeUnknownEffect(S.NonEmptyString50)(values.pop())
|
|
@@ -1723,7 +1723,7 @@ it("find with transformed id in tagged union", () =>
|
|
|
1723
1723
|
const PreconfigurationIdFromString = S.NonEmptyString255.pipe(
|
|
1724
1724
|
S.decodeTo(
|
|
1725
1725
|
S.toType(PreconfigurationId),
|
|
1726
|
-
SchemaTransformation.
|
|
1726
|
+
SchemaTransformation.transformEffect({
|
|
1727
1727
|
decode: Effect.fnUntraced(function*(value) {
|
|
1728
1728
|
const values = value.split("_")
|
|
1729
1729
|
const label = yield* S.SchemaParser.decodeUnknownEffect(S.NonEmptyString50)(values.pop())
|
package/test/rawQuery.test.ts
CHANGED
|
@@ -99,7 +99,7 @@ class SomethingRepo extends Context.Service<SomethingRepo>()(
|
|
|
99
99
|
Layer.provide(
|
|
100
100
|
Effect
|
|
101
101
|
.gen(function*() {
|
|
102
|
-
const url = yield* Config.
|
|
102
|
+
const url = yield* Config.Redacted("STORAGE_URL").pipe(
|
|
103
103
|
Config.withDefault(
|
|
104
104
|
Redacted.make(
|
|
105
105
|
// the emulator doesn't implement array projections :/ so you need an actual cloud instance!
|
|
@@ -48,6 +48,7 @@ import * as Layer from "effect/Layer"
|
|
|
48
48
|
import * as Option from "effect/Option"
|
|
49
49
|
import * as Stream from "effect/Stream"
|
|
50
50
|
import { FetchHttpClient } from "effect/unstable/http"
|
|
51
|
+
import * as NetAddress from "effect/unstable/net/NetAddress"
|
|
51
52
|
import { RpcSerialization } from "effect/unstable/rpc"
|
|
52
53
|
import { createServer } from "http"
|
|
53
54
|
import { RequestContextMiddleware } from "../src/internal/RequestContextMiddleware.js"
|
|
@@ -193,8 +194,10 @@ const ClientLayer = Layer
|
|
|
193
194
|
Effect.gen(function*() {
|
|
194
195
|
const server = yield* HttpServer.HttpServer
|
|
195
196
|
const addr = server.address
|
|
196
|
-
if (
|
|
197
|
-
|
|
197
|
+
if (NetAddress.isUnixPathAddress(addr)) {
|
|
198
|
+
return yield* Effect.die(new Error("expected inet address"))
|
|
199
|
+
}
|
|
200
|
+
const host = NetAddress.isUnspecified(addr.address) ? "127.0.0.1" : NetAddress.formatUrlHost(addr.address)
|
|
198
201
|
const url = `http://${host}:${addr.port}`
|
|
199
202
|
return ApiClientFactory
|
|
200
203
|
.layer({ url, headers: Option.none() })
|
|
@@ -30,6 +30,7 @@ import * as Option from "effect/Option"
|
|
|
30
30
|
import * as Ref from "effect/Ref"
|
|
31
31
|
import * as Stream from "effect/Stream"
|
|
32
32
|
import { FetchHttpClient } from "effect/unstable/http"
|
|
33
|
+
import * as NetAddress from "effect/unstable/net/NetAddress"
|
|
33
34
|
import { RpcSerialization } from "effect/unstable/rpc"
|
|
34
35
|
import { createServer } from "http"
|
|
35
36
|
import { RequestContextMiddleware } from "../src/internal/RequestContextMiddleware.js"
|
|
@@ -230,8 +231,10 @@ const ClientLayer = Layer
|
|
|
230
231
|
Effect.gen(function*() {
|
|
231
232
|
const server = yield* HttpServer.HttpServer
|
|
232
233
|
const addr = server.address
|
|
233
|
-
if (
|
|
234
|
-
|
|
234
|
+
if (NetAddress.isUnixPathAddress(addr)) {
|
|
235
|
+
return yield* Effect.die(new Error("expected inet address"))
|
|
236
|
+
}
|
|
237
|
+
const host = NetAddress.isUnspecified(addr.address) ? "127.0.0.1" : NetAddress.formatUrlHost(addr.address)
|
|
235
238
|
const url = `http://${host}:${addr.port}`
|
|
236
239
|
return ApiClientFactory
|
|
237
240
|
.layer({ url, headers: Option.none() })
|
|
@@ -23,6 +23,7 @@ import * as Layer from "effect/Layer"
|
|
|
23
23
|
import * as Option from "effect/Option"
|
|
24
24
|
import * as Stream from "effect/Stream"
|
|
25
25
|
import { FetchHttpClient } from "effect/unstable/http"
|
|
26
|
+
import * as NetAddress from "effect/unstable/net/NetAddress"
|
|
26
27
|
import { RpcSerialization } from "effect/unstable/rpc"
|
|
27
28
|
import { createServer } from "http"
|
|
28
29
|
import { makeRouter } from "../src/routing.js"
|
|
@@ -176,8 +177,10 @@ const ClientLayer = Layer
|
|
|
176
177
|
Effect.gen(function*() {
|
|
177
178
|
const server = yield* HttpServer.HttpServer
|
|
178
179
|
const addr = server.address
|
|
179
|
-
if (
|
|
180
|
-
|
|
180
|
+
if (NetAddress.isUnixPathAddress(addr)) {
|
|
181
|
+
return yield* Effect.die(new Error("expected inet address"))
|
|
182
|
+
}
|
|
183
|
+
const host = NetAddress.isUnspecified(addr.address) ? "127.0.0.1" : NetAddress.formatUrlHost(addr.address)
|
|
181
184
|
const url = `http://${host}:${addr.port}`
|
|
182
185
|
return ApiClientFactory
|
|
183
186
|
.layer({ url, headers: Option.none() })
|