effect-app 4.0.0-beta.284 → 4.0.0-beta.286
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 +12 -0
- package/dist/DataDependencies.d.ts +252 -23
- package/dist/DataDependencies.d.ts.map +1 -1
- package/dist/DataDependencies.js +40 -20
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +2 -2
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -1
- package/dist/Model/query/new-kid-interpreter.js +2 -2
- package/dist/RequestContext.d.ts +47 -117
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +3 -12
- package/dist/RequestScopedDependencies.d.ts +21 -0
- package/dist/RequestScopedDependencies.d.ts.map +1 -0
- package/dist/RequestScopedDependencies.js +16 -0
- package/dist/Schema/Class.d.ts +1 -1
- package/dist/Schema/Class.d.ts.map +1 -1
- package/dist/Schema/Class.js +2 -2
- package/dist/Schema/ext.d.ts +1 -1
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +1 -1
- package/dist/Schema/moreStrings.d.ts +1 -1
- package/dist/Schema/moreStrings.d.ts.map +1 -1
- package/dist/Schema/moreStrings.js +1 -1
- package/dist/Schema/numbers.d.ts +1 -1
- package/dist/Schema/numbers.d.ts.map +1 -1
- package/dist/Schema/schema.d.ts +1 -1
- package/dist/Schema/schema.d.ts.map +1 -1
- package/dist/Schema/schema.js +2 -2
- package/dist/Schema/strings.d.ts +1 -1
- package/dist/Schema/strings.d.ts.map +1 -1
- package/dist/Schema.d.ts +1 -1
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +2 -2
- package/dist/Store.d.ts +4 -11
- package/dist/Store.d.ts.map +1 -1
- package/dist/Store.js +4 -12
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/apiClientFactory.js +49 -39
- package/dist/rpc/Invalidation.d.ts +2319 -591
- package/dist/rpc/Invalidation.d.ts.map +1 -1
- package/dist/rpc/Invalidation.js +5 -2
- package/dist/setupRequest.d.ts +1 -0
- package/dist/setupRequest.d.ts.map +1 -1
- package/dist/setupRequest.js +8 -5
- package/package.json +2 -2
- package/src/DataDependencies.ts +59 -23
- package/src/Model/Repository/internal/internal.ts +1 -1
- package/src/Model/query/new-kid-interpreter.ts +1 -1
- package/src/RequestContext.ts +2 -49
- package/src/RequestScopedDependencies.ts +45 -0
- package/src/Schema/Class.ts +1 -1
- package/src/Schema/ext.ts +1 -1
- package/src/Schema/moreStrings.ts +1 -1
- package/src/Schema/numbers.ts +1 -1
- package/src/Schema/schema.ts +1 -1
- package/src/Schema/strings.ts +1 -1
- package/src/Schema.ts +1 -1
- package/src/Store.ts +7 -11
- package/src/client/apiClientFactory.ts +21 -6
- package/src/rpc/Invalidation.ts +4 -1
- package/src/setupRequest.ts +8 -4
- package/test/special.test.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invalidation.d.ts","sourceRoot":"","sources":["../../src/rpc/Invalidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAA;AAmBjH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,uCAAS,CAAA;AAC5C,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEjF,6GAA6G;AAC7G,eAAO,MAAM,eAAe;;;CAAkC,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;AAEnE,oFAAoF;AACpF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;CAA2B,CAAA;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAErE,wFAAwF;AACxF,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"Invalidation.d.ts","sourceRoot":"","sources":["../../src/rpc/Invalidation.ts"],"names":[],"mappings":"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"}
|
package/dist/rpc/Invalidation.js
CHANGED
|
@@ -30,7 +30,10 @@ export const CommandMetaData = S.Struct({
|
|
|
30
30
|
invalidateQueries: InvalidationKeys,
|
|
31
31
|
dataDependencies: DataDependencies.DataDependencySet
|
|
32
32
|
});
|
|
33
|
-
export const emptyDataDependencies = {
|
|
33
|
+
export const emptyDataDependencies = {
|
|
34
|
+
reads: DataDependencies.empty(),
|
|
35
|
+
writes: DataDependencies.empty()
|
|
36
|
+
};
|
|
34
37
|
export const makeMetaData = (invalidateQueries, dataDependencies = emptyDataDependencies) => ({ invalidateQueries, dataDependencies });
|
|
35
38
|
export const QueryResponseWithMetaData = (success) => S.Struct({ payload: success, metadata: S.Struct({ dataDependencies: DataDependencies.DataDependencySet }) });
|
|
36
39
|
/**
|
|
@@ -172,4 +175,4 @@ export const makeStreamRpc = Rpc.custom(({ defect, error, success }) => ({
|
|
|
172
175
|
error: StreamFailureChunk(error),
|
|
173
176
|
defect
|
|
174
177
|
}));
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JwYy9JbnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUE7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pDLE9BQU8sRUFBeUIsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDNUUsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLHdCQUF3QixDQUFBO0FBQzFELE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxDQUFDLE1BQU0sY0FBYyxDQUFBO0FBU2pDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBMkIsRUFBbUIsRUFBRTtJQUNwRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDdEMsTUFBTSxPQUFPLEdBQUcsS0FBbUQsQ0FBQTtJQUNuRSxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzFHLENBQUMsQ0FBQTtBQUVELDJFQUEyRTtBQUMzRSx3REFBd0Q7QUFDeEQsTUFBTSxPQUFPLEdBQUcsQ0FDZCxLQUFpRSxFQUNuQixFQUFFLENBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENB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
|
package/dist/setupRequest.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare const getRC: Effect.Effect<{
|
|
|
11
11
|
export interface SetupRequestOptions {
|
|
12
12
|
readonly withTransaction?: boolean;
|
|
13
13
|
}
|
|
14
|
+
export declare const requestStateLayer: Layer.Layer<never, never, never>;
|
|
14
15
|
export declare const provideOnRequestScope: <ROut, E2, RIn>(layer: Layer.Layer<ROut, E2, RIn>) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | E2, RIn | import("effect/Scope").Scope | Exclude<R, ROut>>;
|
|
15
16
|
export declare const setupRequestContextFromCurrent: (name?: string, options?: Tracer.SpanOptions & SetupRequestOptions) => <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, never>>;
|
|
16
17
|
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>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../src/setupRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"setupRequest.d.ts","sourceRoot":"","sources":["../src/setupRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAa,cAAc,EAAkB,MAAM,qBAAqB,CAAA;AAE/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAW/C,eAAO,MAAM,iBAAiB,6CAe3B,CAAA;AAEH,eAAO,MAAM,KAAK;;;gBAGhB,CAAA;AAmBF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,eAAO,MAAM,iBAAiB,kCAA+E,CAAA;AAM7G,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
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import * as Tracer from "effect/Tracer";
|
|
2
2
|
import { SqlClient } from "effect/unstable/sql";
|
|
3
|
+
import { DataDependencyRecorder } from "./DataDependencies.js";
|
|
3
4
|
import * as Effect from "./Effect.js";
|
|
4
5
|
import * as Layer from "./Layer.js";
|
|
5
6
|
import * as Option from "./Option.js";
|
|
6
7
|
import { LocaleRef, RequestContext, spanAttributes } from "./RequestContext.js";
|
|
8
|
+
import * as RequestScopedDependencies from "./RequestScopedDependencies.js";
|
|
7
9
|
import { NonEmptyString255 } from "./Schema.js";
|
|
8
10
|
import { ContextMapContainer, storeId } from "./Store.js";
|
|
9
11
|
const withSqlTransaction = (self) => Effect.serviceOption(SqlClient.SqlClient).pipe(Effect.flatMap(Option.match({
|
|
@@ -35,6 +37,7 @@ const withRequestSpan = (name = "request", options) => (f) => Effect.andThen(get
|
|
|
35
37
|
// TODO: false
|
|
36
38
|
// request context info is picked up directly in the logger for annotations.
|
|
37
39
|
Effect.withLogSpan(name)));
|
|
40
|
+
export const requestStateLayer = RequestScopedDependencies.layer(ContextMapContainer, DataDependencyRecorder);
|
|
38
41
|
// Build `layer` against the ambient (request) scope rather than a sub-scope of the
|
|
39
42
|
// returned Effect. Required when the returned value is a streaming HttpServerResponse:
|
|
40
43
|
// the response body keeps producing chunks (and using layer-provided state) after the
|
|
@@ -49,21 +52,21 @@ export const provideOnRequestScope = (layer) => (self) => Effect.gen(function* (
|
|
|
49
52
|
return yield* Effect.provide(self, ctx);
|
|
50
53
|
});
|
|
51
54
|
export const setupRequestContextFromCurrent = (name = "request", options) => (self) => self
|
|
52
|
-
.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), Effect.provide(
|
|
55
|
+
.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), Effect.provide(requestStateLayer, { local: true }));
|
|
53
56
|
// Streaming variant: binds ContextMapContainer to the ambient (request) scope so its
|
|
54
57
|
// finalizer (clear()) runs only after the response body is fully drained, not when the
|
|
55
58
|
// outer Effect returns its HttpServerResponse value. Use for handlers that return a
|
|
56
59
|
// streaming HttpServerResponse (e.g. SSE) — see RequestContextMiddleware for context.
|
|
57
|
-
export const setupStreamingRequestContextFromCurrent = (name = "request", options) => (self) => self.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), provideOnRequestScope(
|
|
60
|
+
export const setupStreamingRequestContextFromCurrent = (name = "request", options) => (self) => self.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), provideOnRequestScope(requestStateLayer));
|
|
58
61
|
// TODO: consider integrating Effect.withParentSpan
|
|
59
62
|
export function setupRequestContext(self, requestContext, options) {
|
|
60
|
-
const layer = Layer.mergeAll(
|
|
63
|
+
const layer = Layer.mergeAll(requestStateLayer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
|
|
61
64
|
return self
|
|
62
65
|
.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(requestContext.name), Effect.provide(layer, { local: true }));
|
|
63
66
|
}
|
|
64
67
|
export function setupRequestContextWithCustomSpan(self, requestContext, name, options) {
|
|
65
|
-
const layer = Layer.mergeAll(
|
|
68
|
+
const layer = Layer.mergeAll(requestStateLayer, Layer.succeed(LocaleRef, requestContext.locale), Layer.succeed(storeId, requestContext.namespace));
|
|
66
69
|
return self
|
|
67
70
|
.pipe(options?.withTransaction === true ? withSqlTransaction : (_) => _, withRequestSpan(name, options), Effect.provide(layer, { local: true }));
|
|
68
71
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NldHVwUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDOUQsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDbkMsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxLQUFLLHlCQUF5QixNQUFNLGdDQUFnQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXpELE1BQU0sa0JBQWtCLEdBQUcsQ0FBVSxJQUE0QixFQUEwQixFQUFFLENBQzNGLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO0lBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUM5RCxDQUFDLENBQUMsQ0FDSixDQUFBO0FBRUgsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTTtLQUNw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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.286",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"vitest": "^4.1.7"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"effect": "^4.0.0-beta.
|
|
24
|
+
"effect": "^4.0.0-beta.90"
|
|
25
25
|
},
|
|
26
26
|
"typesVersions": {
|
|
27
27
|
"*": {
|
package/src/DataDependencies.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as Ref from "effect/Ref"
|
|
2
|
-
import * as
|
|
2
|
+
import * as Stream from "effect/Stream"
|
|
3
3
|
import * as Effect from "./Effect.ts"
|
|
4
|
+
import * as RequestScopedDependencies from "./RequestScopedDependencies.ts"
|
|
4
5
|
import * as S from "./Schema.ts"
|
|
5
6
|
|
|
6
7
|
export const DataDependency = S.Struct({
|
|
@@ -9,9 +10,11 @@ export const DataDependency = S.Struct({
|
|
|
9
10
|
})
|
|
10
11
|
export type DataDependency = S.Schema.Type<typeof DataDependency>
|
|
11
12
|
|
|
12
|
-
export const DataDependencies = S.
|
|
13
|
+
export const DataDependencies = S.ReadonlySet(DataDependency)
|
|
13
14
|
export type DataDependencies = S.Schema.Type<typeof DataDependencies>
|
|
14
15
|
|
|
16
|
+
export const empty = (): DataDependencies => new Set()
|
|
17
|
+
|
|
15
18
|
export const DataDependencySet = S.Struct({
|
|
16
19
|
reads: DataDependencies,
|
|
17
20
|
writes: DataDependencies
|
|
@@ -26,26 +29,50 @@ export interface DataDependencyRecorderService {
|
|
|
26
29
|
readonly drainWrites: Effect.Effect<DataDependencies>
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
const containsDependency = (dependencies:
|
|
30
|
-
|
|
32
|
+
const containsDependency = (dependencies: ReadonlySet<DataDependency>, dependency: DataDependency) => {
|
|
33
|
+
for (const _ of dependencies) {
|
|
34
|
+
if (_.type === dependency.type && _.name === dependency.name) return true
|
|
35
|
+
}
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
31
38
|
|
|
32
39
|
const appendDependency = (dependency: DataDependency) => (dependencies: DataDependencies): DataDependencies =>
|
|
33
|
-
containsDependency(dependencies, dependency) ? dependencies : [...dependencies, dependency]
|
|
40
|
+
containsDependency(dependencies, dependency) ? dependencies : new Set([...dependencies, dependency])
|
|
34
41
|
|
|
35
|
-
export const DataDependencyRecorder =
|
|
42
|
+
export const DataDependencyRecorder = RequestScopedDependencies.make(
|
|
36
43
|
"effect-app/DataDependencyRecorder",
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
drain: Effect.succeed({ reads: [], writes: [] }),
|
|
43
|
-
drainWrites: Effect.succeed([])
|
|
44
|
-
})
|
|
45
|
-
}
|
|
44
|
+
Effect.gen(function*() {
|
|
45
|
+
const readsRef = yield* Ref.make(empty())
|
|
46
|
+
const writesRef = yield* Ref.make(empty())
|
|
47
|
+
return makeDataDependencyRecorder(readsRef, writesRef)
|
|
48
|
+
})
|
|
46
49
|
)
|
|
47
50
|
export type DataDependencyRecorder = typeof DataDependencyRecorder
|
|
48
51
|
|
|
52
|
+
export type DataDependencyRecorderNotStartedError = RequestScopedDependencies.RequestScopedDependencyNotStartedError
|
|
53
|
+
|
|
54
|
+
export const getDataDependencyRecorder = DataDependencyRecorder.current
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Guarantee a recorder is in scope for `self`, providing a fresh one per request when none is
|
|
58
|
+
* (e.g. a top-level client call with no parent query/command tracking its dependencies). An
|
|
59
|
+
* existing recorder is inherited, so nested calls forward into their parent rather than shadow it.
|
|
60
|
+
*/
|
|
61
|
+
export const ensureDataDependencyRecorder = <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
|
|
62
|
+
Effect.flatMap(
|
|
63
|
+
DataDependencyRecorder,
|
|
64
|
+
(current) => current === "root" ? Effect.provide(self, DataDependencyRecorder.layer) : self
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
/** Stream variant of {@link ensureDataDependencyRecorder}. */
|
|
68
|
+
export const ensureDataDependencyRecorderStream = <A, E, R>(self: Stream.Stream<A, E, R>): Stream.Stream<A, E, R> =>
|
|
69
|
+
Stream.unwrap(
|
|
70
|
+
Effect.map(
|
|
71
|
+
DataDependencyRecorder,
|
|
72
|
+
(current) => current === "root" ? Stream.provide(self, DataDependencyRecorder.layer) : self
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
|
|
49
76
|
export const makeDataDependencyRecorder = (
|
|
50
77
|
readsRef: Ref.Ref<DataDependencies>,
|
|
51
78
|
writesRef: Ref.Ref<DataDependencies>
|
|
@@ -57,10 +84,10 @@ export const makeDataDependencyRecorder = (
|
|
|
57
84
|
writes: Ref.get(writesRef)
|
|
58
85
|
}),
|
|
59
86
|
drain: Effect.all({
|
|
60
|
-
reads: Ref.getAndSet(readsRef,
|
|
61
|
-
writes: Ref.getAndSet(writesRef,
|
|
87
|
+
reads: Ref.getAndSet(readsRef, empty()),
|
|
88
|
+
writes: Ref.getAndSet(writesRef, empty())
|
|
62
89
|
}),
|
|
63
|
-
drainWrites: Ref.getAndSet(writesRef,
|
|
90
|
+
drainWrites: Ref.getAndSet(writesRef, empty())
|
|
64
91
|
})
|
|
65
92
|
|
|
66
93
|
export const repo = (name: string): DataDependency => ({ type: "repo", name })
|
|
@@ -68,11 +95,20 @@ export const signal = (name: string): DataDependency => ({ type: "signal", name
|
|
|
68
95
|
|
|
69
96
|
export const QueryReadDependenciesMetaKey = "effect-app.query.readDependencies"
|
|
70
97
|
|
|
71
|
-
export const read = (dependency: DataDependency) =>
|
|
98
|
+
export const read = (dependency: DataDependency) =>
|
|
99
|
+
getDataDependencyRecorder.pipe(Effect.flatMap((_) => _.read(dependency)))
|
|
72
100
|
|
|
73
|
-
export const write = (dependency: DataDependency) =>
|
|
101
|
+
export const write = (dependency: DataDependency) =>
|
|
102
|
+
getDataDependencyRecorder.pipe(Effect.flatMap((_) => _.write(dependency)))
|
|
74
103
|
|
|
75
104
|
export const intersects = (
|
|
76
|
-
a:
|
|
77
|
-
b:
|
|
78
|
-
) =>
|
|
105
|
+
a: ReadonlySet<DataDependency>,
|
|
106
|
+
b: ReadonlySet<DataDependency>
|
|
107
|
+
) => {
|
|
108
|
+
for (const dependency of a) {
|
|
109
|
+
if (containsDependency(b, dependency)) return true
|
|
110
|
+
}
|
|
111
|
+
return false
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const isNonEmpty = (dependencies: DataDependencies) => dependencies.size > 0
|
|
@@ -7,7 +7,6 @@ import * as HashSet from "effect/HashSet"
|
|
|
7
7
|
import * as Pipeable from "effect/Pipeable"
|
|
8
8
|
import * as Ref from "effect/Ref"
|
|
9
9
|
import * as Result from "effect/Result"
|
|
10
|
-
import * as SchemaAST from "../../../SchemaAST.ts"
|
|
11
10
|
import type * as Scope from "effect/Scope"
|
|
12
11
|
import * as Unify from "effect/Unify"
|
|
13
12
|
import * as Array from "../../../Array.ts"
|
|
@@ -22,6 +21,7 @@ import { flatMapOption } from "../../../Effect.ts"
|
|
|
22
21
|
import * as Option from "../../../Option.ts"
|
|
23
22
|
import * as S from "../../../Schema.ts"
|
|
24
23
|
import { type Codec, NonNegativeInt } from "../../../Schema.ts"
|
|
24
|
+
import * as SchemaAST from "../../../SchemaAST.ts"
|
|
25
25
|
import { setupRequestContextFromCurrent } from "../../../setupRequest.ts"
|
|
26
26
|
import { type FilterArgs, getContextMap, type PersistenceModelType, type StoreConfig, storeId, StoreMaker } from "../../../Store.ts"
|
|
27
27
|
import type { FieldValues } from "../../filter/types.ts"
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
3
3
|
import { identity, pipe } from "effect/Function"
|
|
4
4
|
import * as Match from "effect/Match"
|
|
5
|
-
import * as SchemaAST from "../../SchemaAST.ts"
|
|
6
5
|
import * as Array from "../../Array.ts"
|
|
7
6
|
import { toNonEmptyArray } from "../../Array.ts"
|
|
8
7
|
import * as Option from "../../Option.ts"
|
|
9
8
|
import * as S from "../../Schema.ts"
|
|
9
|
+
import * as SchemaAST from "../../SchemaAST.ts"
|
|
10
10
|
import { dropUndefinedT } from "../../utils.ts"
|
|
11
11
|
import type { FilterResult } from "../filter/filterApi.ts"
|
|
12
12
|
import type { FieldValues } from "../filter/types.ts"
|
package/src/RequestContext.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type Locale = typeof Locale.Type
|
|
|
8
8
|
|
|
9
9
|
export class LocaleRef extends Context.Reference("Locale", { defaultValue: (): Locale => "en" }) {}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
export class RequestContext extends S.Opaque<RequestContext>()(S.Struct({
|
|
12
12
|
span: S.Struct({
|
|
13
13
|
traceId: S.String,
|
|
14
14
|
spanId: S.String,
|
|
@@ -20,20 +20,7 @@ const _RequestContext = S.Struct({
|
|
|
20
20
|
namespace: NonEmptyString255,
|
|
21
21
|
/** @deprecated */
|
|
22
22
|
userProfile: S.optional(S.Struct({ sub: UserProfileId })) //
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
// codegen:start {preset: modelFacade, className: _RequestContext, schema: S, base: true}
|
|
26
|
-
class __RequestContext extends S.OpaqueFacade<
|
|
27
|
-
RequestContext,
|
|
28
|
-
RequestContext.Encoded,
|
|
29
|
-
RequestContext.Make,
|
|
30
|
-
RequestContext.DecodingServices,
|
|
31
|
-
RequestContext.EncodingServices
|
|
32
|
-
>()(_RequestContext) {}
|
|
33
|
-
// codegen:end
|
|
34
|
-
|
|
35
|
-
// eslint-disable-next-line typescript/no-unsafe-declaration-merging
|
|
36
|
-
export class RequestContext extends __RequestContext {
|
|
23
|
+
})) {
|
|
37
24
|
static toMonitoring(this: void, self: RequestContext) {
|
|
38
25
|
return {
|
|
39
26
|
operationName: self.name,
|
|
@@ -59,37 +46,3 @@ export const spanAttributes = (ctx: Pick<RequestContext, "locale" | "namespace">
|
|
|
59
46
|
}
|
|
60
47
|
: {})
|
|
61
48
|
})
|
|
62
|
-
|
|
63
|
-
// codegen:start {preset: model, static: true, facade: true}
|
|
64
|
-
//
|
|
65
|
-
export interface RequestContext {
|
|
66
|
-
readonly span: { readonly traceId: string; readonly spanId: string; readonly sampled: boolean }
|
|
67
|
-
readonly name: S.NonEmptyString255
|
|
68
|
-
readonly locale: "en" | "de"
|
|
69
|
-
readonly namespace: S.NonEmptyString255
|
|
70
|
-
readonly sourceId?: undefined | S.NonEmptyString255
|
|
71
|
-
readonly userProfile?: undefined | { readonly sub: UserProfileId }
|
|
72
|
-
}
|
|
73
|
-
export namespace RequestContext {
|
|
74
|
-
export interface Encoded {
|
|
75
|
-
readonly span: { readonly traceId: string; readonly spanId: string; readonly sampled: boolean }
|
|
76
|
-
readonly name: string
|
|
77
|
-
readonly locale: "en" | "de"
|
|
78
|
-
readonly namespace: string
|
|
79
|
-
readonly sourceId?: undefined | string
|
|
80
|
-
readonly userProfile?: undefined | { readonly sub: string }
|
|
81
|
-
}
|
|
82
|
-
export interface Make {
|
|
83
|
-
readonly span: { readonly traceId: string; readonly spanId: string; readonly sampled: boolean }
|
|
84
|
-
readonly name: S.NonEmptyString255
|
|
85
|
-
readonly locale: "en" | "de"
|
|
86
|
-
readonly namespace: S.NonEmptyString255
|
|
87
|
-
readonly sourceId?: undefined | S.NonEmptyString255
|
|
88
|
-
readonly userProfile?: undefined | { readonly sub: UserProfileId }
|
|
89
|
-
}
|
|
90
|
-
export type DecodingServices = never
|
|
91
|
-
export type EncodingServices = never
|
|
92
|
-
}
|
|
93
|
-
//
|
|
94
|
-
// codegen:end
|
|
95
|
-
//
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as Data from "effect/Data"
|
|
2
|
+
import type * as Scope from "effect/Scope"
|
|
3
|
+
import * as Context from "./Context.ts"
|
|
4
|
+
import * as Effect from "./Effect.ts"
|
|
5
|
+
import * as Layer from "./Layer.ts"
|
|
6
|
+
|
|
7
|
+
export type Root = "root"
|
|
8
|
+
|
|
9
|
+
export class RequestScopedDependencyNotStartedError extends Data.TaggedError(
|
|
10
|
+
"RequestScopedDependencyNotStartedError"
|
|
11
|
+
)<{ readonly key: string }> {}
|
|
12
|
+
|
|
13
|
+
export interface RequestScopedDependency<Service, E = never, R = never> extends Context.Reference<Service | Root> {
|
|
14
|
+
readonly current: Effect.Effect<Service, RequestScopedDependencyNotStartedError>
|
|
15
|
+
readonly layer: Layer.Layer<never, E, R>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const access = <Service>(
|
|
19
|
+
dependency: Context.Reference<Service | Root>,
|
|
20
|
+
key: string
|
|
21
|
+
): Effect.Effect<Service, RequestScopedDependencyNotStartedError> =>
|
|
22
|
+
dependency.pipe(
|
|
23
|
+
Effect.filterOrFail((_): _ is Service => _ !== "root", () => new RequestScopedDependencyNotStartedError({ key }))
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
export const make = <Service, E = never, R = never>(
|
|
27
|
+
key: string,
|
|
28
|
+
service: Effect.Effect<Service, E, R>
|
|
29
|
+
): RequestScopedDependency<Service, E, Exclude<R, Scope.Scope>> => {
|
|
30
|
+
const dependency = Context.Reference<Service | Root>(key, { defaultValue: () => "root" })
|
|
31
|
+
return Object.assign(dependency, {
|
|
32
|
+
current: access(dependency, key),
|
|
33
|
+
layer: Layer.effect(dependency, service)
|
|
34
|
+
})
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const layer = <
|
|
38
|
+
Deps extends readonly [RequestScopedDependency<any, any, any>, ...Array<RequestScopedDependency<any, any, any>>]
|
|
39
|
+
>(
|
|
40
|
+
...dependencies: Deps
|
|
41
|
+
): Layer.Layer<
|
|
42
|
+
never,
|
|
43
|
+
{ [K in keyof Deps]: Deps[K] extends RequestScopedDependency<any, infer E, any> ? E : never }[number],
|
|
44
|
+
{ [K in keyof Deps]: Deps[K] extends RequestScopedDependency<any, any, infer R> ? R : never }[number]
|
|
45
|
+
> => dependencies.map((_) => _.layer).reduce((acc, l) => Layer.merge(acc, l)) as any
|
package/src/Schema/Class.ts
CHANGED
|
@@ -3,11 +3,11 @@ import type * as Cause from "effect/Cause"
|
|
|
3
3
|
import * as Effect from "effect/Effect"
|
|
4
4
|
import * as Option from "effect/Option"
|
|
5
5
|
import * as S from "effect/Schema"
|
|
6
|
-
import * as SchemaAST from "../SchemaAST.ts"
|
|
7
6
|
import * as SchemaGetter from "effect/SchemaGetter"
|
|
8
7
|
import * as SchemaIssue from "effect/SchemaIssue"
|
|
9
8
|
import * as SchemaTransformation from "effect/SchemaTransformation"
|
|
10
9
|
import type { Struct as EffectAppStruct } from "../Schema.ts"
|
|
10
|
+
import * as SchemaAST from "../SchemaAST.ts"
|
|
11
11
|
import { copyOrigin } from "../utils.ts"
|
|
12
12
|
import { concurrencyUnbounded } from "./ext.ts"
|
|
13
13
|
import * as SchemaParser from "./SchemaParser.ts"
|
package/src/Schema/ext.ts
CHANGED
|
@@ -37,11 +37,11 @@ import * as Function from "effect/Function"
|
|
|
37
37
|
import * as Option from "effect/Option"
|
|
38
38
|
import * as S from "effect/Schema"
|
|
39
39
|
import { isDateValid } from "effect/Schema"
|
|
40
|
-
import type * as SchemaAST from "../SchemaAST.ts"
|
|
41
40
|
import * as SchemaIssue from "effect/SchemaIssue"
|
|
42
41
|
import * as SchemaTransformation from "effect/SchemaTransformation"
|
|
43
42
|
import { type NonEmptyReadonlyArray } from "../Array.ts"
|
|
44
43
|
import * as Context from "../Context.ts"
|
|
44
|
+
import type * as SchemaAST from "../SchemaAST.ts"
|
|
45
45
|
import { extendM, typedKeysOf } from "../utils.ts"
|
|
46
46
|
import { type AST } from "./schema.ts"
|
|
47
47
|
|
|
@@ -14,10 +14,10 @@ import type * as B from "effect/Brand"
|
|
|
14
14
|
import * as Effect from "effect/Effect"
|
|
15
15
|
import { pipe } from "effect/Function"
|
|
16
16
|
import * as S from "effect/Schema"
|
|
17
|
-
import type * as SchemaAST from "../SchemaAST.ts"
|
|
18
17
|
import type { Simplify } from "effect/Types"
|
|
19
18
|
import { customRandom, nanoid, urlAlphabet } from "nanoid"
|
|
20
19
|
import validator from "validator"
|
|
20
|
+
import type * as SchemaAST from "../SchemaAST.ts"
|
|
21
21
|
import { type BrandedSchema, fromBrand, nominal } from "./brand.ts"
|
|
22
22
|
import { withDefaultMake } from "./ext.ts"
|
|
23
23
|
import { type B as SchemaB } from "./schema.ts"
|
package/src/Schema/numbers.ts
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
import { extendM } from "effect-app/utils"
|
|
12
12
|
import * as Effect from "effect/Effect"
|
|
13
13
|
import * as S from "effect/Schema"
|
|
14
|
-
import type * as SchemaAST from "../SchemaAST.ts"
|
|
15
14
|
import type { Simplify } from "effect/Types"
|
|
15
|
+
import type * as SchemaAST from "../SchemaAST.ts"
|
|
16
16
|
import { type BrandedSchema, fromBrand, nominal } from "./brand.ts"
|
|
17
17
|
import { withDefaultMake } from "./ext.ts"
|
|
18
18
|
import { type B } from "./schema.ts"
|
package/src/Schema/schema.ts
CHANGED
package/src/Schema/strings.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as B from "effect/Brand"
|
|
2
2
|
import * as S from "effect/Schema"
|
|
3
|
-
import type * as SchemaAST from "../SchemaAST.ts"
|
|
4
3
|
import type { Simplify } from "effect/Types"
|
|
4
|
+
import type * as SchemaAST from "../SchemaAST.ts"
|
|
5
5
|
import { type BrandedSchema, fromBrand, nominal } from "./brand.ts"
|
|
6
6
|
import { withDefaultMake } from "./ext.ts"
|
|
7
7
|
|
package/src/Schema.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as S from "effect/Schema"
|
|
2
|
-
import * as SchemaAST from "./SchemaAST.ts"
|
|
3
2
|
import { type Simplify } from "effect/Struct"
|
|
4
3
|
import type * as Tracer from "effect/Tracer"
|
|
5
4
|
import type { RequiredKeys } from "effect/Types"
|
|
@@ -9,6 +8,7 @@ import { Email as EmailT, type Email as EmailType } from "./Schema/email.ts"
|
|
|
9
8
|
import { concurrencyUnbounded, withDefaultMake, withDefaultParseOptions } from "./Schema/ext.ts"
|
|
10
9
|
import { PhoneNumber as PhoneNumberT, type PhoneNumber as PhoneNumberType } from "./Schema/phoneNumber.ts"
|
|
11
10
|
import { type AST } from "./Schema/schema.ts"
|
|
11
|
+
import * as SchemaAST from "./SchemaAST.ts"
|
|
12
12
|
import { copy, extendM, type StructuralCopyOrigin } from "./utils.ts"
|
|
13
13
|
|
|
14
14
|
// ---------------------------------------------------------------------------
|
package/src/Store.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import * as Data from "effect/Data"
|
|
3
2
|
import type * as Redacted from "effect/Redacted"
|
|
4
3
|
import * as Semaphore from "effect/Semaphore"
|
|
5
4
|
import type { NonEmptyReadonlyArray } from "./Array.ts"
|
|
6
5
|
import type { DatabaseError, OptimisticConcurrencyException } from "./client/errors.ts"
|
|
7
6
|
import * as Context from "./Context.ts"
|
|
8
7
|
import * as Effect from "./Effect.ts"
|
|
9
|
-
import * as Layer from "./Layer.ts"
|
|
10
8
|
import type { FilterResult } from "./Model/filter/filterApi.ts"
|
|
11
9
|
import type { FieldValues } from "./Model/filter/types.ts"
|
|
12
10
|
import type { FieldPath } from "./Model/filter/types/path/index.ts"
|
|
13
11
|
import type { AggregateIrExpression, ComputedProjectionIrExpression, RawQuery } from "./Model/query.ts"
|
|
14
12
|
import type * as Option from "./Option.ts"
|
|
13
|
+
import * as RequestScopedDependencies from "./RequestScopedDependencies.ts"
|
|
15
14
|
import { NonEmptyString255 } from "./Schema.ts"
|
|
16
15
|
|
|
17
16
|
/**
|
|
@@ -235,17 +234,14 @@ const makeMap = Effect.acquireRelease(
|
|
|
235
234
|
export class ContextMap extends Context.Opaque<ContextMap>()("effect-app/ContextMap", { make: makeMap }) {
|
|
236
235
|
}
|
|
237
236
|
|
|
238
|
-
export
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
237
|
+
export const ContextMapContainer = RequestScopedDependencies.make(
|
|
238
|
+
"ContextMapContainer",
|
|
239
|
+
ContextMap.make.pipe(Effect.map(ContextMap.of))
|
|
240
|
+
)
|
|
243
241
|
|
|
244
|
-
export
|
|
242
|
+
export type ContextMapNotStartedError = RequestScopedDependencies.RequestScopedDependencyNotStartedError
|
|
245
243
|
|
|
246
|
-
export const getContextMap = ContextMapContainer.
|
|
247
|
-
Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError())
|
|
248
|
-
)
|
|
244
|
+
export const getContextMap = ContextMapContainer.current
|
|
249
245
|
|
|
250
246
|
/**
|
|
251
247
|
* Runs `make` at most once per ContextMap (i.e. per request) and caches the
|