effect-app 4.0.0-beta.179 → 4.0.0-beta.180
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 +23 -0
- package/dist/client/InvalidationKeys.d.ts +9 -3
- package/dist/client/InvalidationKeys.d.ts.map +1 -1
- package/dist/client/InvalidationKeys.js +14 -4
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/apiClientFactory.js +33 -5
- package/dist/rpc/Invalidation.d.ts +280 -1
- package/dist/rpc/Invalidation.d.ts.map +1 -1
- package/dist/rpc/Invalidation.js +35 -3
- package/package.json +1 -1
- package/src/client/InvalidationKeys.ts +15 -3
- package/src/client/apiClientFactory.ts +51 -1
- package/src/rpc/Invalidation.ts +53 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.180
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 7fa3045: V1/V2/V3: stream and command requests carry invalidation metadata
|
|
8
|
+
|
|
9
|
+
**V1** – stream final response includes metadata
|
|
10
|
+
|
|
11
|
+
- `Invalidation.StreamResponseChunk` wraps each stream item as `{ _tag: "value", value }` and appends `{ _tag: "done", metadata }` at the end carrying all accumulated invalidation keys.
|
|
12
|
+
|
|
13
|
+
**V2** – invalidation keys included in failures
|
|
14
|
+
|
|
15
|
+
- `Invalidation.CommandFailureWithMetaData` and `Invalidation.StreamFailureChunk` carry keys accumulated up to the point of failure, so clients can invalidate queries even when a command or stream errors.
|
|
16
|
+
- `InvalidationMiddlewareLive` wraps command failures; `routing.ts` wraps stream failures.
|
|
17
|
+
- `apiClientFactory.ts` unwraps both on the client side, forwarding keys before re-failing with the original error.
|
|
18
|
+
|
|
19
|
+
**V3** – mid-stream metadata chunks
|
|
20
|
+
|
|
21
|
+
- `Invalidation.StreamResponseChunk` now also includes `{ _tag: "metadata", metadata }` for mid-stream invalidation.
|
|
22
|
+
- After each emitted value, the server drains accumulated keys and emits a "metadata" chunk if any keys were collected since the last drain (bucket reset via `InvalidationSet.drain`).
|
|
23
|
+
- `apiClientFactory.ts` processes "metadata" chunks the same as "done" chunks, forwarding keys to `InvalidationKeysFromServer` immediately.
|
|
24
|
+
- `makeInvalidationKeysService` accepts an optional `onAdded` callback that fires after each key addition, enabling `mutate.ts` to trigger query invalidation mid-stream without waiting for the stream to complete.
|
|
25
|
+
|
|
3
26
|
## 4.0.0-beta.179
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
|
@@ -18,6 +18,12 @@ export interface InvalidationKeysService {
|
|
|
18
18
|
*/
|
|
19
19
|
export declare const InvalidationKeysFromServer: Context.Reference<InvalidationKeysService>;
|
|
20
20
|
export type InvalidationKeysFromServer = typeof InvalidationKeysFromServer;
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Creates a fresh `InvalidationKeysService` implementation backed by a `Ref`.
|
|
23
|
+
*
|
|
24
|
+
* @param ref - The `Ref` that stores the accumulated keys.
|
|
25
|
+
* @param onAdded - V3: Optional Effect run after a key is added. Use to trigger mid-stream
|
|
26
|
+
* query invalidation without waiting for the stream to complete.
|
|
27
|
+
*/
|
|
28
|
+
export declare const makeInvalidationKeysService: (ref: Ref.Ref<ReadonlyArray<InvalidationKey>>, onAdded?: (key: InvalidationKey) => Effect.Effect<void>) => InvalidationKeysService;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uS2V5cy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9JbnZhbGlkYXRpb25LZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRTdELFlBQVksRUFBRSxlQUFlLEVBQUUsQ0FBQTtBQUMvQiw0RkFBNEY7QUFDNUYsTUFBTSxXQUFXLHVCQUF1QjtJQUN0QyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtDQUM1RDtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0sMEJBQTBCLDRDQVF0QyxDQUFBO0FBQ0QsTUFBTSxNQUFNLDBCQUEwQixHQUFHLE9BQU8sMEJBQTBCLENBQUE7QUFFMUU7Ozs7OztHQU1HO0FBQ0gsZUFBTyxNQUFNLDJCQUEyQixRQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUNsQyxDQUFDLEdBQUcsRUFBRSxlQUFlLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FDdEQsdUJBUUQsQ0FBQSJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvalidationKeys.d.ts","sourceRoot":"","sources":["../../src/client/InvalidationKeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,YAAY,EAAE,eAAe,EAAE,CAAA;AAC/B,4FAA4F;AAC5F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;CAC5D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,4CAQtC,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E
|
|
1
|
+
{"version":3,"file":"InvalidationKeys.d.ts","sourceRoot":"","sources":["../../src/client/InvalidationKeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,YAAY,EAAE,eAAe,EAAE,CAAA;AAC/B,4FAA4F;AAC5F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;CAC5D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,4CAQtC,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,QACjC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,YAClC,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KACtD,uBAQD,CAAA"}
|
|
@@ -15,9 +15,19 @@ export const InvalidationKeysFromServer = Context.Reference("effect-app/client/I
|
|
|
15
15
|
get: Effect.succeed([])
|
|
16
16
|
})
|
|
17
17
|
});
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Creates a fresh `InvalidationKeysService` implementation backed by a `Ref`.
|
|
20
|
+
*
|
|
21
|
+
* @param ref - The `Ref` that stores the accumulated keys.
|
|
22
|
+
* @param onAdded - V3: Optional Effect run after a key is added. Use to trigger mid-stream
|
|
23
|
+
* query invalidation without waiting for the stream to complete.
|
|
24
|
+
*/
|
|
25
|
+
export const makeInvalidationKeysService = (ref, onAdded) => ({
|
|
26
|
+
// When onAdded is set, fire it immediately without accumulating in the ref —
|
|
27
|
+
// the key is handled on arrival and must not be re-processed at stream end.
|
|
28
|
+
add: (key) => onAdded
|
|
29
|
+
? onAdded(key)
|
|
30
|
+
: Ref.update(ref, (keys) => [...keys, key]),
|
|
21
31
|
get: Ref.get(ref)
|
|
22
32
|
});
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uS2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvSW52YWxpZGF0aW9uS2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQVV0Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FDekQsOENBQThDLEVBQzlDO0lBQ0UsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbkIsR0FBRyxFQUFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDM0MsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBb0MsQ0FBQztLQUMxRCxDQUFDO0NBQ0gsQ0FDRixDQUFBO0FBR0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDekMsR0FBNEMsRUFDNUMsT0FBdUQsRUFDOUIsRUFBRSxDQUFDLENBQUM7SUFDN0IsNkVBQTZFO0lBQzdFLDRFQUE0RTtJQUM1RSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNYLE9BQU87UUFDTCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNkLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Q0FDbEIsQ0FBQyxDQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClientFactory.d.ts","sourceRoot":"","sources":["../../src/client/apiClientFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAKvC,OAAO,EAAE,GAAG,EAAa,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAA;AAE1D,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAEtC,OAAO,KAAK,EAAU,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAG9F,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC/C;AAED,eAAO,MAAM,gBAAgB;;;;;EAQ3B,CAAA;AAEF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IACvB,OAAO,EAAE,CAAC,CAAC,GAAG,CAAA;IACd,KAAK,EAAE,CAAC,CAAC,GAAG,CAAA;IACZ,8IAA8I;IAC9I,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC7C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CACvC,CAAA;AAMD,eAAO,MAAM,eAAe,WAAY,SAAS,qEAqB9C,CAAA;AAEH,eAAO,MAAM,yBAAyB,+EAKrC,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,SAAS,yGAIpD,CAAA;AAEH,KAAK,WAAW,CAAC,CAAC,SAAS,WAAW,IAAI;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;CAC5E,CAAA;AAoBD,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,WAAW,YAAY,CAAC,KAAG;IAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAA;CAI9F,CAAA;AAED,eAAO,MAAM,qCAAqC,GAAI,CAAC,SAAS,WAAW,EAAE,KAAK,CAAC,UAAU,SAAS,MAAM,YAChG,CAAC,cACC,UAAU,mDAxBnB,CAAC,
|
|
1
|
+
{"version":3,"file":"apiClientFactory.d.ts","sourceRoot":"","sources":["../../src/client/apiClientFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,8 +63,14 @@ export const makeRpcGroupFromRequestsAndModuleName = (resource, moduleName) => {
|
|
|
63
63
|
payload: r,
|
|
64
64
|
success: r.type === "command"
|
|
65
65
|
? Invalidation.CommandResponseWithMetaData(r.success)
|
|
66
|
-
:
|
|
67
|
-
|
|
66
|
+
: isStream
|
|
67
|
+
? Invalidation.StreamResponseChunk(r.success)
|
|
68
|
+
: r.success,
|
|
69
|
+
error: r.type === "command"
|
|
70
|
+
? Invalidation.CommandFailureWithMetaData(r.error)
|
|
71
|
+
: isStream
|
|
72
|
+
? Invalidation.StreamFailureChunk(r.error)
|
|
73
|
+
: r.error,
|
|
68
74
|
...isStream ? { stream: true } : {}
|
|
69
75
|
});
|
|
70
76
|
}))
|
|
@@ -102,7 +108,17 @@ const makeApiClientFactory = Effect
|
|
|
102
108
|
const invalidationKeys = yield* InvalidationKeysFromServer;
|
|
103
109
|
yield* Effect.forEach(keys, (key) => invalidationKeys.add(key), { discard: true });
|
|
104
110
|
return result.payload;
|
|
105
|
-
}))
|
|
111
|
+
})),
|
|
112
|
+
// V2: unwrap CommandFailureWithMetaData failures — forward keys, re-fail with the
|
|
113
|
+
// original error so callers see the unmodified error type.
|
|
114
|
+
Effect.catch((result) => result?._tag === "CommandFailureWithMetaData"
|
|
115
|
+
? Effect.gen(function* () {
|
|
116
|
+
const keys = result.metadata?.invalidateQueries ?? [];
|
|
117
|
+
const invalidationKeys = yield* InvalidationKeysFromServer;
|
|
118
|
+
yield* Effect.forEach(keys, (key) => invalidationKeys.add(key), { discard: true });
|
|
119
|
+
return yield* Effect.fail(result.error);
|
|
120
|
+
})
|
|
121
|
+
: Effect.fail(result)));
|
|
106
122
|
return {
|
|
107
123
|
mr,
|
|
108
124
|
client: typedKeysOf(filtered)
|
|
@@ -134,7 +150,19 @@ const makeApiClientFactory = Effect
|
|
|
134
150
|
const buildStream = (input) => Stream.unwrap(mr.contextEffect.pipe(Effect.flatMap((svcs) => TheClient
|
|
135
151
|
.useSync((client) => {
|
|
136
152
|
const rpcStream = client[requestAttr](Request.make(input));
|
|
137
|
-
return rpcStream.pipe(
|
|
153
|
+
return rpcStream.pipe(
|
|
154
|
+
// Collect server invalidation keys from the "done" chunk, then discard it.
|
|
155
|
+
Stream.tap((item) => item._tag === "done" || item._tag === "metadata"
|
|
156
|
+
? InvalidationKeysFromServer.use((svc) => Effect.forEach(item.metadata.invalidateQueries, svc.add, { discard: true }))
|
|
157
|
+
: Effect.void), Stream.filter((item) => item._tag === "value"), Stream.map((item) => item.value),
|
|
158
|
+
// V2: unwrap StreamFailureChunk — forward keys from failures too,
|
|
159
|
+
// then re-fail with the original error so callers see the unmodified
|
|
160
|
+
// error type.
|
|
161
|
+
Stream.catch((err) => err?._tag === "error" && err?.metadata
|
|
162
|
+
? Stream.fromEffect(InvalidationKeysFromServer.use((svc) => Effect
|
|
163
|
+
.forEach(err.metadata.invalidateQueries, svc.add, { discard: true })
|
|
164
|
+
.pipe(Effect.flatMap(() => Effect.fail(err.error)))))
|
|
165
|
+
: Stream.fail(err)), Stream.provide(layers), Stream.provide(svcs));
|
|
138
166
|
})
|
|
139
167
|
.pipe(Effect.provide(svcs)))));
|
|
140
168
|
// @ts-expect-error doc
|
|
@@ -189,4 +217,4 @@ export class ApiClientFactory extends Context.Opaque()("ApiClientFactory") {
|
|
|
189
217
|
return f(resource);
|
|
190
218
|
});
|
|
191
219
|
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpQ2xpZW50RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpQ2xpZW50RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRixPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFPbEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUN6QyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxPQUFPLEVBQUUsTUFBTTtTQUNaLE1BQU0sQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUMzQyxTQUFTLENBQ1Y7U0FDQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztDQUN2QixDQUFDLENBQUE7QUFpQkYsTUFBTSxXQUFZLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7SUFDekQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztDQUMxRSxDQUFDO0NBQUc7QUFFTCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFpQixFQUFFLEVBQUUsQ0FDbkQsS0FBSyxDQUFDLE1BQU0sQ0FDVixVQUFVLENBQUMsVUFBVSxFQUNyQixNQUFNO0tBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUNaLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDL0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FDNUIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUN4RSxVQUFVLENBQUMsVUFBVSxDQUNuQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNoRixFQUNELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDekMsSUFBSSxDQUNGLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUMzRCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDbEQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNWLENBQ0YsQ0FBQTtJQUNELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtBQUVILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQ25ELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFBO0lBQ3RDLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUMsQ0FBQyxDQUNILENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE1BQWlCLEVBQUUsRUFBRSxDQUN6RCxLQUFLLENBQUMsUUFBUSxDQUNaLGdCQUFnQixDQUFDLFdBQVcsRUFDNUIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUN4QixDQUFBO0FBTUgsTUFBTSxXQUFXLEdBQUcsQ0FBd0IsUUFBVyxFQUFFLEVBQUU7SUFJekQsc0JBQXNCO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDekQsSUFDRSxTQUFTLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztlQUNyQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFDMUIsQ0FBQztZQUNELEdBQUcsQ0FBQyxHQUFxQixDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBUSxDQUFBO1FBQ25ELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUMsRUFBRSxFQUFpQyxDQUFDLENBQUE7SUFFckMsT0FBTyxRQUErQixDQUFBO0FBQ3hDLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUF3QixRQUFXLEVBQXdDLEVBQUU7SUFDbEcsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JELElBQUksS0FBSyxJQUFJLFlBQVksSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDM0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQy9DLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLENBQ25ELFFBQVcsRUFDWCxVQUFzQixFQUN0QixFQUFFO0lBQ0YsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXRDLE1BQU0sSUFBSSxHQUFHLFFBQVE7U0FDbEIsSUFBSSxDQUNILEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQVEsQ0FBQTtRQUNsQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQTtRQUNwQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUN0QixPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVM7Z0JBQzNCLENBQUMsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ2IsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2QsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQzdDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUNIO1NBQ0EsTUFBTSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBRXZCLENBQUE7SUFDSCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLENBQXdCLFFBQVcsRUFBRSxFQUFFO0lBQ3hELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM5QixNQUFNLElBQUksR0FBRyxxQ0FBcUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRTdFLGtHQUFrRztJQUNsRywwR0FBMEc7SUFDMUcsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFHN0IsQ0FBQyxhQUFhLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLDBGQUEwRjtJQUMxRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUN4QixTQUFTLEVBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUNyRSxDQUFBO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7QUFDNUMsQ0FBQyxDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNO0tBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDWixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUE2RCxDQUFBO0lBQzlGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQy9DLFFBQVcsRUFDWCxrQkFBa0IsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUNoQyxPQUEwQjtRQUUxQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTlCLG9FQUFvRTtRQUNwRSxtRUFBbUU7UUFDbkUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQ3RDLDBDQUEwQztRQUMxQyxtRUFBbUU7UUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLG1CQUEwQixDQUFDLENBQUMsRUFDMUUsS0FBSyxDQUFDLE9BQU8sQ0FDWCxTQUFTO2FBQ04saUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyw0Q0FBNEM7YUFDM0UsSUFBSSxDQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM5QyxDQUNKLENBQ0YsQ0FBQTtRQUNELE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFM0MsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXRDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBaUMsRUFBZ0MsRUFBRSxDQUN4RixHQUFHLENBQUMsSUFBSSxDQUNOLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUM3QixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNsQixNQUFNLElBQUksR0FBZ0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUE7WUFDbkcsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQywwQkFBMEIsQ0FBQTtZQUMxRCxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDbEYsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFBO1FBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQTtRQUVILE9BQU87WUFDTCxFQUFFO1lBQ0YsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUM7aUJBQzFCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBRSxDQUFBO2dCQUV4QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUE7Z0JBRWpCLE1BQU0sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxHQUFhLEVBQUU7cUJBQzdDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBRXhCLE1BQU0sV0FBVyxHQUFHO29CQUNsQixPQUFPO29CQUNQLEVBQUU7b0JBQ0YsT0FBTztpQkFDUixDQUFBO2dCQUVELE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQ2xELFdBQVcsRUFBRSxHQUFhO29CQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzVCLENBQUMsQ0FBQTtnQkFFRixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7Z0JBRTVFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBVSxDQUFDLENBQUE7Z0JBQzdELE1BQU0sV0FBVyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFBO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQTtnQkFFcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUNqQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUN0QixNQUFNLFNBQVMsR0FBRyxTQUFTO3lCQUN4QixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLE1BQWMsQ0FBQyxXQUFXLENBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFtQyxDQUNyRjt5QkFDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQTtvQkFDSCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7Z0JBQ3pELENBQUMsQ0FBQyxDQUNILENBQUE7Z0JBRUgsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsTUFBTSxDQUNYLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDdEIsU0FBUztxQkFDTixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDbEIsTUFBTSxTQUFTLEdBQUksTUFBYyxDQUFDLFdBQVcsQ0FBRSxDQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNZLENBQUE7b0JBQ2pDLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FDckIsQ0FBQTtnQkFDSCxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDOUIsQ0FDRixDQUNGLENBQUE7Z0JBRUgsdUJBQXVCO2dCQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztvQkFDMUMsQ0FBQyxDQUFDO3dCQUNBLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzt3QkFDckQsR0FBRyxXQUFXO3FCQUNmO29CQUNELENBQUMsQ0FBQzt3QkFDQSxPQUFPLEVBQUUsUUFBUTs0QkFDZixDQUFDLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7NEJBQ2hDLENBQUMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQzt3QkFDbEMsR0FBRyxXQUFXO3FCQUNmLENBQUE7Z0JBRUgsT0FBTyxJQUFJLENBQUE7WUFDYixDQUFDLEVBQUUsRUFBcUMsQ0FBQztTQUM1QyxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixNQUFNLFFBQVEsR0FBOEMsRUFBRSxDQUFBO0lBQzlELEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0lBRXBGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFtQyxDQUFBO0lBRXpELFNBQVMsbUJBQW1CLENBQUMsa0JBQW9ELEVBQUUsT0FBMEI7UUFDM0csSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQTtZQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQXdCLE1BQVM7WUFDakUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdELENBQUE7WUFDOUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixPQUFPLEtBQUssQ0FBQTtZQUNkLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25FLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNuQixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQTtBQUM1QixDQUFDLENBQUMsQ0FBQTtBQUVKOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUNYLFNBQVEsT0FBTyxDQUFDLE1BQU0sRUFBaUUsQ0FBQyxrQkFBa0IsQ0FBQztJQUUzRyxNQUFNLENBQVUsS0FBSyxHQUFHLENBQUMsTUFBaUIsRUFBRSxFQUFFLENBQzVDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuRyxNQUFNLENBQVUsZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFBO1FBQ3RDLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZDLENBQUMsQ0FBQyxDQUNILENBQUE7SUFFRCxNQUFNLENBQVUsT0FBTyxHQUNyQixDQUFDLGtCQUFvRCxFQUFFLE9BQTBCLEVBQUUsRUFBRSxDQUNyRixDQUNFLFFBQVcsRUFDWCxFQUFFLENBQ0YsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtRQUN4QyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2RCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNwQixDQUFDLENBQUMsQ0FBQTtDQUNQIn0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpQ2xpZW50RmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvYXBpQ2xpZW50RmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBQ3JDLE9BQU8sS0FBSyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDdkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNoRixPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFPbEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUN6QyxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0s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
|
|
@@ -136,6 +136,279 @@ export declare const CommandResponseWithMetaData: <S extends S.Top>(success: S)
|
|
|
136
136
|
readonly "~type.mutability": "mutable";
|
|
137
137
|
} ? "payload" : never> extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never;
|
|
138
138
|
} : {});
|
|
139
|
+
/**
|
|
140
|
+
* Wraps a command's failure schema so that the wire format carries both the `error`
|
|
141
|
+
* (the handler's actual failure value) and `metadata` (server-driven cache invalidation keys
|
|
142
|
+
* accumulated thus far before the failure occurred).
|
|
143
|
+
* Transparent to users: the server handler fails with the plain error and the client receives
|
|
144
|
+
* the plain error — wrapping/unwrapping is handled internally by the routing layer.
|
|
145
|
+
*/
|
|
146
|
+
export declare const CommandFailureWithMetaData: <E extends S.Top>(error: E) => S.Struct<{
|
|
147
|
+
readonly _tag: S.Literal<"CommandFailureWithMetaData">;
|
|
148
|
+
readonly error: E;
|
|
149
|
+
readonly metadata: S.Struct<{
|
|
150
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
151
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
152
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
153
|
+
}> & {
|
|
154
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
155
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
156
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
157
|
+
}>>;
|
|
158
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
159
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
160
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
161
|
+
}>>;
|
|
162
|
+
};
|
|
163
|
+
}>;
|
|
164
|
+
}> & ({} extends (import("effect/Schema").Struct.MakeIn_<{
|
|
165
|
+
readonly _tag: S.Literal<"CommandFailureWithMetaData">;
|
|
166
|
+
readonly error: E;
|
|
167
|
+
readonly metadata: S.Struct<{
|
|
168
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
169
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
170
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
171
|
+
}> & {
|
|
172
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
173
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
174
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
175
|
+
}>>;
|
|
176
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
177
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
178
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
179
|
+
}>>;
|
|
180
|
+
};
|
|
181
|
+
}>;
|
|
182
|
+
}, (E extends {
|
|
183
|
+
readonly "~type.optionality": "optional";
|
|
184
|
+
} ? "error" : never) | (E extends {
|
|
185
|
+
readonly "~type.constructor.default": "with-default";
|
|
186
|
+
} ? "error" : never)> extends infer T ? { [K in keyof T]: T[K]; } : never) ? {
|
|
187
|
+
make(input?: (import("effect/Schema").Struct.MakeIn_<{
|
|
188
|
+
readonly _tag: S.Literal<"CommandFailureWithMetaData">;
|
|
189
|
+
readonly error: E;
|
|
190
|
+
readonly metadata: S.Struct<{
|
|
191
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
192
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
193
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
194
|
+
}> & {
|
|
195
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
196
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
197
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
198
|
+
}>>;
|
|
199
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
200
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
201
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
202
|
+
}>>;
|
|
203
|
+
};
|
|
204
|
+
}>;
|
|
205
|
+
}, (E extends {
|
|
206
|
+
readonly "~type.optionality": "optional";
|
|
207
|
+
} ? "error" : never) | (E extends {
|
|
208
|
+
readonly "~type.constructor.default": "with-default";
|
|
209
|
+
} ? "error" : never)> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never) | undefined, options?: S.MakeOptions): import("effect/Schema").Struct.Type_<{
|
|
210
|
+
readonly _tag: S.Literal<"CommandFailureWithMetaData">;
|
|
211
|
+
readonly error: E;
|
|
212
|
+
readonly metadata: S.Struct<{
|
|
213
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
214
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
215
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
216
|
+
}> & {
|
|
217
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
218
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
219
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
220
|
+
}>>;
|
|
221
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
222
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
223
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
224
|
+
}>>;
|
|
225
|
+
};
|
|
226
|
+
}>;
|
|
227
|
+
}, E extends {
|
|
228
|
+
readonly "~type.optionality": "optional";
|
|
229
|
+
} ? "error" : never, E extends {
|
|
230
|
+
readonly "~type.mutability": "mutable";
|
|
231
|
+
} ? "error" : never> extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never;
|
|
232
|
+
} : {});
|
|
233
|
+
/**
|
|
234
|
+
* Stream chunk schema for stream responses with metadata.
|
|
235
|
+
* Each item is either a data value, an intermediate "metadata" signal carrying cache
|
|
236
|
+
* invalidation keys accumulated since the previous drain, or a final "done" signal.
|
|
237
|
+
* Transparent to users: stream handlers return plain values and clients receive plain values —
|
|
238
|
+
* wrapping/unwrapping is handled internally by the routing layer.
|
|
239
|
+
*
|
|
240
|
+
* The "done" chunk is always the last item in the stream and carries any remaining invalidation
|
|
241
|
+
* keys. An optional "metadata" chunk may appear after any "value" chunk and carries keys
|
|
242
|
+
* accumulated since the last drain (V3: mid-stream invalidation).
|
|
243
|
+
*/
|
|
244
|
+
export declare const StreamResponseChunk: <S extends S.Top>(success: S) => S.Union<readonly [S.Struct<{
|
|
245
|
+
readonly _tag: S.Literal<"value">;
|
|
246
|
+
readonly value: S;
|
|
247
|
+
}> & ({} extends (import("effect/Schema").Struct.MakeIn_<{
|
|
248
|
+
readonly _tag: S.Literal<"value">;
|
|
249
|
+
readonly value: S;
|
|
250
|
+
}, (S extends {
|
|
251
|
+
readonly "~type.optionality": "optional";
|
|
252
|
+
} ? "value" : never) | (S extends {
|
|
253
|
+
readonly "~type.constructor.default": "with-default";
|
|
254
|
+
} ? "value" : never)> extends infer T ? { [K in keyof T]: T[K]; } : never) ? {
|
|
255
|
+
make(input?: (import("effect/Schema").Struct.MakeIn_<{
|
|
256
|
+
readonly _tag: S.Literal<"value">;
|
|
257
|
+
readonly value: S;
|
|
258
|
+
}, (S extends {
|
|
259
|
+
readonly "~type.optionality": "optional";
|
|
260
|
+
} ? "value" : never) | (S extends {
|
|
261
|
+
readonly "~type.constructor.default": "with-default";
|
|
262
|
+
} ? "value" : never)> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never) | undefined, options?: S.MakeOptions): import("effect/Schema").Struct.Type_<{
|
|
263
|
+
readonly _tag: S.Literal<"value">;
|
|
264
|
+
readonly value: S;
|
|
265
|
+
}, S extends {
|
|
266
|
+
readonly "~type.optionality": "optional";
|
|
267
|
+
} ? "value" : never, S extends {
|
|
268
|
+
readonly "~type.mutability": "mutable";
|
|
269
|
+
} ? "value" : never> extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never;
|
|
270
|
+
} : {}), S.Struct<{
|
|
271
|
+
readonly _tag: S.Literal<"metadata">;
|
|
272
|
+
readonly metadata: S.Struct<{
|
|
273
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
274
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
275
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
276
|
+
}> & {
|
|
277
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
278
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
279
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
280
|
+
}>>;
|
|
281
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
282
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
283
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
284
|
+
}>>;
|
|
285
|
+
};
|
|
286
|
+
}>;
|
|
287
|
+
}>, S.Struct<{
|
|
288
|
+
readonly _tag: S.Literal<"done">;
|
|
289
|
+
readonly metadata: S.Struct<{
|
|
290
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
291
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
292
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
293
|
+
}> & {
|
|
294
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
295
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
296
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
297
|
+
}>>;
|
|
298
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
299
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
300
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
301
|
+
}>>;
|
|
302
|
+
};
|
|
303
|
+
}>;
|
|
304
|
+
}>]>;
|
|
305
|
+
export type StreamResponseChunk<A> = {
|
|
306
|
+
readonly _tag: "value";
|
|
307
|
+
readonly value: A;
|
|
308
|
+
} | {
|
|
309
|
+
readonly _tag: "metadata";
|
|
310
|
+
readonly metadata: CommandMetaData;
|
|
311
|
+
} | {
|
|
312
|
+
readonly _tag: "done";
|
|
313
|
+
readonly metadata: CommandMetaData;
|
|
314
|
+
};
|
|
315
|
+
/**
|
|
316
|
+
* Stream chunk schema for stream failures with metadata.
|
|
317
|
+
* Used to signal a stream failure while still carrying cache invalidation keys
|
|
318
|
+
* accumulated thus far.
|
|
319
|
+
*/
|
|
320
|
+
export declare const StreamFailureChunk: <E extends S.Top>(error: E) => S.Struct<{
|
|
321
|
+
readonly _tag: S.Literal<"error">;
|
|
322
|
+
readonly error: E;
|
|
323
|
+
readonly metadata: S.Struct<{
|
|
324
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
325
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
326
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
327
|
+
}> & {
|
|
328
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
329
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
330
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
331
|
+
}>>;
|
|
332
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
333
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
334
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
335
|
+
}>>;
|
|
336
|
+
};
|
|
337
|
+
}>;
|
|
338
|
+
}> & ({} extends (import("effect/Schema").Struct.MakeIn_<{
|
|
339
|
+
readonly _tag: S.Literal<"error">;
|
|
340
|
+
readonly error: E;
|
|
341
|
+
readonly metadata: S.Struct<{
|
|
342
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
343
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
344
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
345
|
+
}> & {
|
|
346
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
347
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
348
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
349
|
+
}>>;
|
|
350
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
351
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
352
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
353
|
+
}>>;
|
|
354
|
+
};
|
|
355
|
+
}>;
|
|
356
|
+
}, (E extends {
|
|
357
|
+
readonly "~type.optionality": "optional";
|
|
358
|
+
} ? "error" : never) | (E extends {
|
|
359
|
+
readonly "~type.constructor.default": "with-default";
|
|
360
|
+
} ? "error" : never)> extends infer T ? { [K in keyof T]: T[K]; } : never) ? {
|
|
361
|
+
make(input?: (import("effect/Schema").Struct.MakeIn_<{
|
|
362
|
+
readonly _tag: S.Literal<"error">;
|
|
363
|
+
readonly error: E;
|
|
364
|
+
readonly metadata: S.Struct<{
|
|
365
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
366
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
367
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
368
|
+
}> & {
|
|
369
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
370
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
371
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
372
|
+
}>>;
|
|
373
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
374
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
375
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
376
|
+
}>>;
|
|
377
|
+
};
|
|
378
|
+
}>;
|
|
379
|
+
}, (E extends {
|
|
380
|
+
readonly "~type.optionality": "optional";
|
|
381
|
+
} ? "error" : never) | (E extends {
|
|
382
|
+
readonly "~type.constructor.default": "with-default";
|
|
383
|
+
} ? "error" : never)> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never) | undefined, options?: S.MakeOptions): import("effect/Schema").Struct.Type_<{
|
|
384
|
+
readonly _tag: S.Literal<"error">;
|
|
385
|
+
readonly error: E;
|
|
386
|
+
readonly metadata: S.Struct<{
|
|
387
|
+
readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
388
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
389
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
390
|
+
}> & {
|
|
391
|
+
withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
392
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
393
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
394
|
+
}>>;
|
|
395
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
|
|
396
|
+
withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
397
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
|
|
398
|
+
}>>;
|
|
399
|
+
};
|
|
400
|
+
}>;
|
|
401
|
+
}, E extends {
|
|
402
|
+
readonly "~type.optionality": "optional";
|
|
403
|
+
} ? "error" : never, E extends {
|
|
404
|
+
readonly "~type.mutability": "mutable";
|
|
405
|
+
} ? "error" : never> extends infer T_2 ? { [K in keyof T_2]: T_2[K]; } : never;
|
|
406
|
+
} : {});
|
|
407
|
+
export type StreamFailureChunk<E> = {
|
|
408
|
+
readonly _tag: "error";
|
|
409
|
+
readonly error: E;
|
|
410
|
+
readonly metadata: CommandMetaData;
|
|
411
|
+
};
|
|
139
412
|
/**
|
|
140
413
|
* Context annotation for declaring static cache invalidation keys on a low-level `Rpc` definition.
|
|
141
414
|
* These keys are always included in the command response metadata, regardless of the handler logic.
|
|
@@ -166,6 +439,12 @@ export type Invalidates = typeof Invalidates;
|
|
|
166
439
|
export interface InvalidationSetService {
|
|
167
440
|
readonly add: (key: InvalidationKey) => Effect.Effect<void>;
|
|
168
441
|
readonly get: Effect.Effect<ReadonlyArray<InvalidationKey>>;
|
|
442
|
+
/**
|
|
443
|
+
* V3: Reads all currently accumulated keys and resets the bucket to empty.
|
|
444
|
+
* Used by the stream routing layer to emit intermediate "metadata" chunks
|
|
445
|
+
* without re-sending keys that have already been forwarded to the client.
|
|
446
|
+
*/
|
|
447
|
+
readonly drain: Effect.Effect<ReadonlyArray<InvalidationKey>>;
|
|
169
448
|
}
|
|
170
449
|
/**
|
|
171
450
|
* Request-scoped service for accumulating invalidation keys dynamically inside a handler.
|
|
@@ -208,4 +487,4 @@ export declare const InvalidationSet: Context.Reference<InvalidationSetService>;
|
|
|
208
487
|
export type InvalidationSet = typeof InvalidationSet;
|
|
209
488
|
/** Creates a fresh `InvalidationSet` implementation backed by a `Ref`. */
|
|
210
489
|
export declare const makeInvalidationSet: (ref: Ref.Ref<ReadonlyArray<InvalidationKey>>) => InvalidationSetService;
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
490
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnBjL0ludmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEtBQUssQ0FBQyxNQUFNLGNBQWMsQ0FBQTtBQUVqQzs7OztHQUlHO0FBQ0gsZUFBTyxNQUFNLHNCQUFzQix1Q0FBUyxDQUFBO0FBQzVDLE1BQU0sTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLHNCQUFzQixDQUFDLENBQUE7QUFFakYsNkdBQTZHO0FBQzdHLGVBQU8sTUFBTSxlQUFlOzs7Q0FBa0MsQ0FBQTtBQUM5RCxNQUFNLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUE7QUFFbkUsb0ZBQW9GO0FBQ3BGLGVBQU8sTUFBTSxnQkFBZ0I7Ozs7Ozs7Ozs7OztDQUEyQixDQUFBO0FBQ3hELE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLGdCQUFnQixDQUFDLENBQUE7QUFFckUsd0ZBQXdGO0FBQ3hGLGVBQU8sTUFBTSxlQUFlOzs7Ozs7Ozs7Ozs7OztFQUFvRCxDQUFBO0FBQ2hGLE1BQU0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxlQUFlLENBQUMsQ0FBQTtBQUVuRTs7Ozs7R0FLRztBQUNILGVBQU8sTUFBTSwyQkFBMkIsR0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -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,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC;;;;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;;;;;;;;;;;;;;EAAoD,CAAA;AAChF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OACZ,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,WAAW,mDAGvB,CAAA;AACD,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAA;AAE5C,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;
|
|
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
|
@@ -21,6 +21,36 @@ export const CommandMetaData = S.Struct({ invalidateQueries: InvalidationKeys })
|
|
|
21
21
|
* the plain payload — wrapping/unwrapping is handled internally by the routing layer.
|
|
22
22
|
*/
|
|
23
23
|
export const CommandResponseWithMetaData = (success) => S.Struct({ payload: success, metadata: CommandMetaData });
|
|
24
|
+
/**
|
|
25
|
+
* Wraps a command's failure schema so that the wire format carries both the `error`
|
|
26
|
+
* (the handler's actual failure value) and `metadata` (server-driven cache invalidation keys
|
|
27
|
+
* accumulated thus far before the failure occurred).
|
|
28
|
+
* Transparent to users: the server handler fails with the plain error and the client receives
|
|
29
|
+
* the plain error — wrapping/unwrapping is handled internally by the routing layer.
|
|
30
|
+
*/
|
|
31
|
+
export const CommandFailureWithMetaData = (error) => S.Struct({ _tag: S.Literal("CommandFailureWithMetaData"), error, metadata: CommandMetaData });
|
|
32
|
+
/**
|
|
33
|
+
* Stream chunk schema for stream responses with metadata.
|
|
34
|
+
* Each item is either a data value, an intermediate "metadata" signal carrying cache
|
|
35
|
+
* invalidation keys accumulated since the previous drain, or a final "done" signal.
|
|
36
|
+
* Transparent to users: stream handlers return plain values and clients receive plain values —
|
|
37
|
+
* wrapping/unwrapping is handled internally by the routing layer.
|
|
38
|
+
*
|
|
39
|
+
* The "done" chunk is always the last item in the stream and carries any remaining invalidation
|
|
40
|
+
* keys. An optional "metadata" chunk may appear after any "value" chunk and carries keys
|
|
41
|
+
* accumulated since the last drain (V3: mid-stream invalidation).
|
|
42
|
+
*/
|
|
43
|
+
export const StreamResponseChunk = (success) => S.Union([
|
|
44
|
+
S.Struct({ _tag: S.Literal("value"), value: success }),
|
|
45
|
+
S.Struct({ _tag: S.Literal("metadata"), metadata: CommandMetaData }),
|
|
46
|
+
S.Struct({ _tag: S.Literal("done"), metadata: CommandMetaData })
|
|
47
|
+
]);
|
|
48
|
+
/**
|
|
49
|
+
* Stream chunk schema for stream failures with metadata.
|
|
50
|
+
* Used to signal a stream failure while still carrying cache invalidation keys
|
|
51
|
+
* accumulated thus far.
|
|
52
|
+
*/
|
|
53
|
+
export const StreamFailureChunk = (error) => S.Struct({ _tag: S.Literal("error"), error, metadata: CommandMetaData });
|
|
24
54
|
/**
|
|
25
55
|
* Context annotation for declaring static cache invalidation keys on a low-level `Rpc` definition.
|
|
26
56
|
* These keys are always included in the command response metadata, regardless of the handler logic.
|
|
@@ -86,12 +116,14 @@ export const Invalidates = Context.Reference("effect-app/rpc/Invalidates", { def
|
|
|
86
116
|
export const InvalidationSet = Context.Reference("effect-app/rpc/InvalidationSet", {
|
|
87
117
|
defaultValue: () => ({
|
|
88
118
|
add: (_key) => Effect.void,
|
|
89
|
-
get: Effect.succeed([])
|
|
119
|
+
get: Effect.succeed([]),
|
|
120
|
+
drain: Effect.succeed([])
|
|
90
121
|
})
|
|
91
122
|
});
|
|
92
123
|
/** Creates a fresh `InvalidationSet` implementation backed by a `Ref`. */
|
|
93
124
|
export const makeInvalidationSet = (ref) => ({
|
|
94
125
|
add: (key) => Ref.update(ref, (keys) => [...keys, key]),
|
|
95
|
-
get: Ref.get(ref)
|
|
126
|
+
get: Ref.get(ref),
|
|
127
|
+
drain: Ref.getAndSet(ref, [])
|
|
96
128
|
});
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JwYy9JbnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUE7QUFDakMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUE7QUFFakM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFHNUMsNkdBQTZHO0FBQzdHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7QUFHOUQsb0ZBQW9GO0FBQ3BGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUE7QUFHeEQsd0ZBQXdGO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO0FBR2hGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBa0IsT0FBVSxFQUFFLEVBQUUsQ0FDekUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUE7QUFFM0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBa0IsS0FBUSxFQUFFLEVBQUUsQ0FDdEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO0FBRS9GOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFrQixPQUFVLEVBQUUsRUFBRSxDQUNqRSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN0RCxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7Q0FDakUsQ0FBQyxDQUFBO0FBT0o7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQWtCLEtBQVEsRUFBRSxFQUFFLENBQzlELENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUE7QUFJMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQzFDLDRCQUE0QixFQUM1QixFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDM0IsQ0FBQTtBQWVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FDOUMsZ0NBQWdDLEVBQ2hDO0lBQ0UsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbkIsR0FBRyxFQUFFLENBQUMsSUFBcUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDM0MsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBb0MsQ0FBQztRQUN6RCxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFvQyxDQUFDO0tBQzVELENBQUM7Q0FDSCxDQUNGLENBQUE7QUFHRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUE0QyxFQUEwQixFQUFFLENBQUMsQ0FBQztJQUM1RyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQixLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0NBQzlCLENBQUMsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -29,10 +29,22 @@ export const InvalidationKeysFromServer = Context.Reference<InvalidationKeysServ
|
|
|
29
29
|
)
|
|
30
30
|
export type InvalidationKeysFromServer = typeof InvalidationKeysFromServer
|
|
31
31
|
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Creates a fresh `InvalidationKeysService` implementation backed by a `Ref`.
|
|
34
|
+
*
|
|
35
|
+
* @param ref - The `Ref` that stores the accumulated keys.
|
|
36
|
+
* @param onAdded - V3: Optional Effect run after a key is added. Use to trigger mid-stream
|
|
37
|
+
* query invalidation without waiting for the stream to complete.
|
|
38
|
+
*/
|
|
33
39
|
export const makeInvalidationKeysService = (
|
|
34
|
-
ref: Ref.Ref<ReadonlyArray<InvalidationKey
|
|
40
|
+
ref: Ref.Ref<ReadonlyArray<InvalidationKey>>,
|
|
41
|
+
onAdded?: (key: InvalidationKey) => Effect.Effect<void>
|
|
35
42
|
): InvalidationKeysService => ({
|
|
36
|
-
|
|
43
|
+
// When onAdded is set, fire it immediately without accumulating in the ref —
|
|
44
|
+
// the key is handled on arrival and must not be re-processed at stream end.
|
|
45
|
+
add: (key) =>
|
|
46
|
+
onAdded
|
|
47
|
+
? onAdded(key)
|
|
48
|
+
: Ref.update(ref, (keys) => [...keys, key]),
|
|
37
49
|
get: Ref.get(ref)
|
|
38
50
|
})
|
|
@@ -131,8 +131,14 @@ export const makeRpcGroupFromRequestsAndModuleName = <M extends RequestsAny, con
|
|
|
131
131
|
payload: r,
|
|
132
132
|
success: r.type === "command"
|
|
133
133
|
? Invalidation.CommandResponseWithMetaData(r.success)
|
|
134
|
+
: isStream
|
|
135
|
+
? Invalidation.StreamResponseChunk(r.success)
|
|
134
136
|
: r.success,
|
|
135
|
-
error: r.
|
|
137
|
+
error: r.type === "command"
|
|
138
|
+
? Invalidation.CommandFailureWithMetaData(r.error)
|
|
139
|
+
: isStream
|
|
140
|
+
? Invalidation.StreamFailureChunk(r.error)
|
|
141
|
+
: r.error,
|
|
136
142
|
...isStream ? { stream: true as const } : {}
|
|
137
143
|
})
|
|
138
144
|
})
|
|
@@ -200,6 +206,18 @@ const makeApiClientFactory = Effect
|
|
|
200
206
|
yield* Effect.forEach(keys, (key) => invalidationKeys.add(key), { discard: true })
|
|
201
207
|
return result.payload
|
|
202
208
|
})
|
|
209
|
+
),
|
|
210
|
+
// V2: unwrap CommandFailureWithMetaData failures — forward keys, re-fail with the
|
|
211
|
+
// original error so callers see the unmodified error type.
|
|
212
|
+
Effect.catch((result: any) =>
|
|
213
|
+
result?._tag === "CommandFailureWithMetaData"
|
|
214
|
+
? Effect.gen(function*() {
|
|
215
|
+
const keys: ReadonlyArray<Invalidation.InvalidationKey> = result.metadata?.invalidateQueries ?? []
|
|
216
|
+
const invalidationKeys = yield* InvalidationKeysFromServer
|
|
217
|
+
yield* Effect.forEach(keys, (key) => invalidationKeys.add(key), { discard: true })
|
|
218
|
+
return yield* Effect.fail(result.error)
|
|
219
|
+
})
|
|
220
|
+
: Effect.fail(result)
|
|
203
221
|
)
|
|
204
222
|
)
|
|
205
223
|
|
|
@@ -257,6 +275,38 @@ const makeApiClientFactory = Effect
|
|
|
257
275
|
Request.make(input)
|
|
258
276
|
) as Stream.Stream<any, any, any>
|
|
259
277
|
return rpcStream.pipe(
|
|
278
|
+
// Collect server invalidation keys from the "done" chunk, then discard it.
|
|
279
|
+
Stream.tap((item: any) =>
|
|
280
|
+
item._tag === "done" || item._tag === "metadata"
|
|
281
|
+
? InvalidationKeysFromServer.use((svc) =>
|
|
282
|
+
Effect.forEach(
|
|
283
|
+
(item.metadata as Invalidation.CommandMetaData).invalidateQueries,
|
|
284
|
+
svc.add,
|
|
285
|
+
{ discard: true }
|
|
286
|
+
)
|
|
287
|
+
)
|
|
288
|
+
: Effect.void
|
|
289
|
+
),
|
|
290
|
+
Stream.filter((item: any) => item._tag === "value"),
|
|
291
|
+
Stream.map((item: any) => item.value),
|
|
292
|
+
// V2: unwrap StreamFailureChunk — forward keys from failures too,
|
|
293
|
+
// then re-fail with the original error so callers see the unmodified
|
|
294
|
+
// error type.
|
|
295
|
+
Stream.catch((err: any) =>
|
|
296
|
+
err?._tag === "error" && err?.metadata
|
|
297
|
+
? Stream.fromEffect(
|
|
298
|
+
InvalidationKeysFromServer.use((svc) =>
|
|
299
|
+
Effect
|
|
300
|
+
.forEach(
|
|
301
|
+
(err.metadata as Invalidation.CommandMetaData).invalidateQueries,
|
|
302
|
+
svc.add,
|
|
303
|
+
{ discard: true }
|
|
304
|
+
)
|
|
305
|
+
.pipe(Effect.flatMap(() => Effect.fail(err.error)))
|
|
306
|
+
)
|
|
307
|
+
)
|
|
308
|
+
: Stream.fail(err)
|
|
309
|
+
),
|
|
260
310
|
Stream.provide(layers),
|
|
261
311
|
Stream.provide(svcs)
|
|
262
312
|
)
|
package/src/rpc/Invalidation.ts
CHANGED
|
@@ -32,6 +32,49 @@ export type CommandMetaData = S.Schema.Type<typeof CommandMetaData>
|
|
|
32
32
|
export const CommandResponseWithMetaData = <S extends S.Top>(success: S) =>
|
|
33
33
|
S.Struct({ payload: success, metadata: CommandMetaData })
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Wraps a command's failure schema so that the wire format carries both the `error`
|
|
37
|
+
* (the handler's actual failure value) and `metadata` (server-driven cache invalidation keys
|
|
38
|
+
* accumulated thus far before the failure occurred).
|
|
39
|
+
* Transparent to users: the server handler fails with the plain error and the client receives
|
|
40
|
+
* the plain error — wrapping/unwrapping is handled internally by the routing layer.
|
|
41
|
+
*/
|
|
42
|
+
export const CommandFailureWithMetaData = <E extends S.Top>(error: E) =>
|
|
43
|
+
S.Struct({ _tag: S.Literal("CommandFailureWithMetaData"), error, metadata: CommandMetaData })
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Stream chunk schema for stream responses with metadata.
|
|
47
|
+
* Each item is either a data value, an intermediate "metadata" signal carrying cache
|
|
48
|
+
* invalidation keys accumulated since the previous drain, or a final "done" signal.
|
|
49
|
+
* Transparent to users: stream handlers return plain values and clients receive plain values —
|
|
50
|
+
* wrapping/unwrapping is handled internally by the routing layer.
|
|
51
|
+
*
|
|
52
|
+
* The "done" chunk is always the last item in the stream and carries any remaining invalidation
|
|
53
|
+
* keys. An optional "metadata" chunk may appear after any "value" chunk and carries keys
|
|
54
|
+
* accumulated since the last drain (V3: mid-stream invalidation).
|
|
55
|
+
*/
|
|
56
|
+
export const StreamResponseChunk = <S extends S.Top>(success: S) =>
|
|
57
|
+
S.Union([
|
|
58
|
+
S.Struct({ _tag: S.Literal("value"), value: success }),
|
|
59
|
+
S.Struct({ _tag: S.Literal("metadata"), metadata: CommandMetaData }),
|
|
60
|
+
S.Struct({ _tag: S.Literal("done"), metadata: CommandMetaData })
|
|
61
|
+
])
|
|
62
|
+
|
|
63
|
+
export type StreamResponseChunk<A> =
|
|
64
|
+
| { readonly _tag: "value"; readonly value: A }
|
|
65
|
+
| { readonly _tag: "metadata"; readonly metadata: CommandMetaData }
|
|
66
|
+
| { readonly _tag: "done"; readonly metadata: CommandMetaData }
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Stream chunk schema for stream failures with metadata.
|
|
70
|
+
* Used to signal a stream failure while still carrying cache invalidation keys
|
|
71
|
+
* accumulated thus far.
|
|
72
|
+
*/
|
|
73
|
+
export const StreamFailureChunk = <E extends S.Top>(error: E) =>
|
|
74
|
+
S.Struct({ _tag: S.Literal("error"), error, metadata: CommandMetaData })
|
|
75
|
+
|
|
76
|
+
export type StreamFailureChunk<E> = { readonly _tag: "error"; readonly error: E; readonly metadata: CommandMetaData }
|
|
77
|
+
|
|
35
78
|
/**
|
|
36
79
|
* Context annotation for declaring static cache invalidation keys on a low-level `Rpc` definition.
|
|
37
80
|
* These keys are always included in the command response metadata, regardless of the handler logic.
|
|
@@ -66,6 +109,12 @@ export type Invalidates = typeof Invalidates
|
|
|
66
109
|
export interface InvalidationSetService {
|
|
67
110
|
readonly add: (key: InvalidationKey) => Effect.Effect<void>
|
|
68
111
|
readonly get: Effect.Effect<ReadonlyArray<InvalidationKey>>
|
|
112
|
+
/**
|
|
113
|
+
* V3: Reads all currently accumulated keys and resets the bucket to empty.
|
|
114
|
+
* Used by the stream routing layer to emit intermediate "metadata" chunks
|
|
115
|
+
* without re-sending keys that have already been forwarded to the client.
|
|
116
|
+
*/
|
|
117
|
+
readonly drain: Effect.Effect<ReadonlyArray<InvalidationKey>>
|
|
69
118
|
}
|
|
70
119
|
|
|
71
120
|
/**
|
|
@@ -110,7 +159,8 @@ export const InvalidationSet = Context.Reference<InvalidationSetService>(
|
|
|
110
159
|
{
|
|
111
160
|
defaultValue: () => ({
|
|
112
161
|
add: (_key: InvalidationKey) => Effect.void,
|
|
113
|
-
get: Effect.succeed([] as ReadonlyArray<InvalidationKey>)
|
|
162
|
+
get: Effect.succeed([] as ReadonlyArray<InvalidationKey>),
|
|
163
|
+
drain: Effect.succeed([] as ReadonlyArray<InvalidationKey>)
|
|
114
164
|
})
|
|
115
165
|
}
|
|
116
166
|
)
|
|
@@ -119,5 +169,6 @@ export type InvalidationSet = typeof InvalidationSet
|
|
|
119
169
|
/** Creates a fresh `InvalidationSet` implementation backed by a `Ref`. */
|
|
120
170
|
export const makeInvalidationSet = (ref: Ref.Ref<ReadonlyArray<InvalidationKey>>): InvalidationSetService => ({
|
|
121
171
|
add: (key) => Ref.update(ref, (keys) => [...keys, key]),
|
|
122
|
-
get: Ref.get(ref)
|
|
172
|
+
get: Ref.get(ref),
|
|
173
|
+
drain: Ref.getAndSet(ref, [])
|
|
123
174
|
})
|