effect-app 4.0.0-beta.21 → 4.0.0-beta.210

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.
Files changed (219) hide show
  1. package/CHANGELOG.md +952 -0
  2. package/dist/Array.d.ts +1 -1
  3. package/dist/Chunk.d.ts +1 -1
  4. package/dist/Chunk.d.ts.map +1 -1
  5. package/dist/Config/SecretURL.d.ts +1 -1
  6. package/dist/Config/SecretURL.d.ts.map +1 -1
  7. package/dist/Config/SecretURL.js +2 -2
  8. package/dist/Config/internal/configSecretURL.d.ts +1 -1
  9. package/dist/Config/internal/configSecretURL.d.ts.map +1 -1
  10. package/dist/Config.d.ts +7 -0
  11. package/dist/Config.d.ts.map +1 -0
  12. package/dist/Config.js +6 -0
  13. package/dist/ConfigProvider.d.ts +39 -0
  14. package/dist/ConfigProvider.d.ts.map +1 -0
  15. package/dist/ConfigProvider.js +42 -0
  16. package/dist/Context.d.ts +40 -0
  17. package/dist/Context.d.ts.map +1 -0
  18. package/dist/Context.js +67 -0
  19. package/dist/Effect.d.ts +9 -10
  20. package/dist/Effect.d.ts.map +1 -1
  21. package/dist/Effect.js +3 -6
  22. package/dist/Function.d.ts +1 -1
  23. package/dist/Function.d.ts.map +1 -1
  24. package/dist/Inputify.type.d.ts +1 -1
  25. package/dist/Layer.d.ts +7 -6
  26. package/dist/Layer.d.ts.map +1 -1
  27. package/dist/Layer.js +1 -1
  28. package/dist/NonEmptySet.d.ts +1 -1
  29. package/dist/NonEmptySet.d.ts.map +1 -1
  30. package/dist/Option.d.ts +1 -1
  31. package/dist/Option.d.ts.map +1 -1
  32. package/dist/Pure.d.ts +5 -5
  33. package/dist/Pure.d.ts.map +1 -1
  34. package/dist/Pure.js +13 -13
  35. package/dist/Schema/Class.d.ts +66 -20
  36. package/dist/Schema/Class.d.ts.map +1 -1
  37. package/dist/Schema/Class.js +189 -22
  38. package/dist/Schema/FastCheck.d.ts +1 -1
  39. package/dist/Schema/FastCheck.d.ts.map +1 -1
  40. package/dist/Schema/Methods.d.ts +1 -1
  41. package/dist/Schema/SchemaParser.d.ts +5 -0
  42. package/dist/Schema/SchemaParser.d.ts.map +1 -0
  43. package/dist/Schema/SchemaParser.js +6 -0
  44. package/dist/Schema/SpecialJsonSchema.d.ts +33 -0
  45. package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -0
  46. package/dist/Schema/SpecialJsonSchema.js +122 -0
  47. package/dist/Schema/SpecialOpenApi.d.ts +32 -0
  48. package/dist/Schema/SpecialOpenApi.d.ts.map +1 -0
  49. package/dist/Schema/SpecialOpenApi.js +123 -0
  50. package/dist/Schema/brand.d.ts +4 -2
  51. package/dist/Schema/brand.d.ts.map +1 -1
  52. package/dist/Schema/brand.js +1 -1
  53. package/dist/Schema/email.d.ts +1 -1
  54. package/dist/Schema/email.d.ts.map +1 -1
  55. package/dist/Schema/email.js +7 -4
  56. package/dist/Schema/ext.d.ts +117 -45
  57. package/dist/Schema/ext.d.ts.map +1 -1
  58. package/dist/Schema/ext.js +131 -42
  59. package/dist/Schema/moreStrings.d.ts +37 -25
  60. package/dist/Schema/moreStrings.d.ts.map +1 -1
  61. package/dist/Schema/moreStrings.js +15 -16
  62. package/dist/Schema/numbers.d.ts +15 -15
  63. package/dist/Schema/numbers.d.ts.map +1 -1
  64. package/dist/Schema/numbers.js +10 -12
  65. package/dist/Schema/phoneNumber.d.ts +1 -1
  66. package/dist/Schema/phoneNumber.d.ts.map +1 -1
  67. package/dist/Schema/phoneNumber.js +6 -3
  68. package/dist/Schema/schema.d.ts +1 -1
  69. package/dist/Schema/strings.d.ts +5 -5
  70. package/dist/Schema/strings.d.ts.map +1 -1
  71. package/dist/Schema/strings.js +1 -5
  72. package/dist/Schema.d.ts +147 -15
  73. package/dist/Schema.d.ts.map +1 -1
  74. package/dist/Schema.js +131 -16
  75. package/dist/Set.d.ts +1 -1
  76. package/dist/Set.d.ts.map +1 -1
  77. package/dist/TypeTest.d.ts +1 -1
  78. package/dist/Types.d.ts +1 -1
  79. package/dist/Widen.type.d.ts +1 -1
  80. package/dist/_ext/Array.d.ts +1 -1
  81. package/dist/_ext/Array.d.ts.map +1 -1
  82. package/dist/_ext/date.d.ts +1 -1
  83. package/dist/_ext/misc.d.ts +1 -1
  84. package/dist/_ext/ord.ext.d.ts +1 -1
  85. package/dist/_ext/ord.ext.d.ts.map +1 -1
  86. package/dist/builtin.d.ts +1 -1
  87. package/dist/builtin.d.ts.map +1 -1
  88. package/dist/client/InvalidationKeys.d.ts +29 -0
  89. package/dist/client/InvalidationKeys.d.ts.map +1 -0
  90. package/dist/client/InvalidationKeys.js +33 -0
  91. package/dist/client/apiClientFactory.d.ts +20 -32
  92. package/dist/client/apiClientFactory.d.ts.map +1 -1
  93. package/dist/client/apiClientFactory.js +95 -32
  94. package/dist/client/clientFor.d.ts +51 -17
  95. package/dist/client/clientFor.d.ts.map +1 -1
  96. package/dist/client/clientFor.js +9 -1
  97. package/dist/client/errors.d.ts +49 -25
  98. package/dist/client/errors.d.ts.map +1 -1
  99. package/dist/client/errors.js +43 -17
  100. package/dist/client/makeClient.d.ts +481 -33
  101. package/dist/client/makeClient.d.ts.map +1 -1
  102. package/dist/client/makeClient.js +66 -24
  103. package/dist/client.d.ts +2 -1
  104. package/dist/client.d.ts.map +1 -1
  105. package/dist/client.js +2 -1
  106. package/dist/faker.d.ts +1 -1
  107. package/dist/faker.d.ts.map +1 -1
  108. package/dist/http/Request.d.ts +2 -2
  109. package/dist/http/Request.d.ts.map +1 -1
  110. package/dist/http/internal/lib.d.ts +1 -1
  111. package/dist/http.d.ts +1 -1
  112. package/dist/ids.d.ts +12 -12
  113. package/dist/ids.d.ts.map +1 -1
  114. package/dist/ids.js +3 -2
  115. package/dist/index.d.ts +5 -8
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +6 -8
  118. package/dist/logger.d.ts +1 -1
  119. package/dist/middleware.d.ts +14 -8
  120. package/dist/middleware.d.ts.map +1 -1
  121. package/dist/middleware.js +14 -8
  122. package/dist/rpc/Invalidation.d.ts +402 -0
  123. package/dist/rpc/Invalidation.d.ts.map +1 -0
  124. package/dist/rpc/Invalidation.js +150 -0
  125. package/dist/rpc/MiddlewareMaker.d.ts +5 -4
  126. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  127. package/dist/rpc/MiddlewareMaker.js +57 -37
  128. package/dist/rpc/RpcContextMap.d.ts +3 -3
  129. package/dist/rpc/RpcContextMap.d.ts.map +1 -1
  130. package/dist/rpc/RpcContextMap.js +4 -4
  131. package/dist/rpc/RpcMiddleware.d.ts +5 -4
  132. package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
  133. package/dist/rpc/RpcMiddleware.js +1 -1
  134. package/dist/rpc.d.ts +2 -2
  135. package/dist/rpc.d.ts.map +1 -1
  136. package/dist/rpc.js +2 -2
  137. package/dist/transform.d.ts +1 -1
  138. package/dist/transform.d.ts.map +1 -1
  139. package/dist/transform.js +3 -3
  140. package/dist/utils/effectify.d.ts +1 -1
  141. package/dist/utils/extend.d.ts +1 -1
  142. package/dist/utils/extend.d.ts.map +1 -1
  143. package/dist/utils/gen.d.ts +2 -2
  144. package/dist/utils/gen.d.ts.map +1 -1
  145. package/dist/utils/logLevel.d.ts +2 -2
  146. package/dist/utils/logLevel.d.ts.map +1 -1
  147. package/dist/utils/logger.d.ts +3 -3
  148. package/dist/utils/logger.d.ts.map +1 -1
  149. package/dist/utils/logger.js +3 -3
  150. package/dist/utils.d.ts +31 -38
  151. package/dist/utils.d.ts.map +1 -1
  152. package/dist/utils.js +12 -25
  153. package/dist/validation/validators.d.ts +1 -1
  154. package/dist/validation/validators.d.ts.map +1 -1
  155. package/dist/validation.d.ts +1 -1
  156. package/dist/validation.d.ts.map +1 -1
  157. package/package.json +46 -24
  158. package/src/Config/SecretURL.ts +2 -1
  159. package/src/Config.ts +14 -0
  160. package/src/ConfigProvider.ts +48 -0
  161. package/src/{ServiceMap.ts → Context.ts} +52 -59
  162. package/src/Effect.ts +12 -14
  163. package/src/Layer.ts +6 -5
  164. package/src/Pure.ts +17 -18
  165. package/src/Schema/Class.ts +268 -62
  166. package/src/Schema/SchemaParser.ts +12 -0
  167. package/src/Schema/SpecialJsonSchema.ts +137 -0
  168. package/src/Schema/SpecialOpenApi.ts +130 -0
  169. package/src/Schema/brand.ts +21 -1
  170. package/src/Schema/email.ts +7 -2
  171. package/src/Schema/ext.ts +204 -72
  172. package/src/Schema/moreStrings.ts +40 -37
  173. package/src/Schema/numbers.ts +14 -16
  174. package/src/Schema/phoneNumber.ts +5 -1
  175. package/src/Schema/strings.ts +4 -8
  176. package/src/Schema.ts +314 -20
  177. package/src/client/InvalidationKeys.ts +50 -0
  178. package/src/client/apiClientFactory.ts +223 -129
  179. package/src/client/clientFor.ts +95 -29
  180. package/src/client/errors.ts +52 -26
  181. package/src/client/makeClient.ts +572 -71
  182. package/src/client.ts +1 -0
  183. package/src/ids.ts +3 -2
  184. package/src/index.ts +5 -10
  185. package/src/middleware.ts +13 -9
  186. package/src/rpc/Invalidation.ts +226 -0
  187. package/src/rpc/MiddlewareMaker.ts +65 -60
  188. package/src/rpc/README.md +2 -2
  189. package/src/rpc/RpcContextMap.ts +6 -5
  190. package/src/rpc/RpcMiddleware.ts +5 -4
  191. package/src/rpc.ts +1 -1
  192. package/src/transform.ts +2 -2
  193. package/src/utils/gen.ts +1 -1
  194. package/src/utils/logger.ts +2 -2
  195. package/src/utils.ts +50 -132
  196. package/test/dist/rpc.test.d.ts.map +1 -1
  197. package/test/dist/secretURL.test.d.ts.map +1 -0
  198. package/test/dist/special.test.d.ts.map +1 -0
  199. package/test/dist/stream-error.types.d.ts +2 -0
  200. package/test/dist/stream-error.types.d.ts.map +1 -0
  201. package/test/dist/stream-error.types.js +27 -0
  202. package/test/rpc.test.ts +45 -6
  203. package/test/schema.test.ts +581 -7
  204. package/test/secretURL.test.ts +157 -0
  205. package/test/special.test.ts +1023 -0
  206. package/test/utils.test.ts +6 -6
  207. package/tsconfig.base.json +3 -4
  208. package/tsconfig.json +0 -1
  209. package/tsconfig.json.bak +2 -2
  210. package/tsconfig.src.json +29 -29
  211. package/tsconfig.test.json +2 -2
  212. package/dist/Operations.d.ts +0 -123
  213. package/dist/Operations.d.ts.map +0 -1
  214. package/dist/Operations.js +0 -29
  215. package/dist/ServiceMap.d.ts +0 -44
  216. package/dist/ServiceMap.d.ts.map +0 -1
  217. package/dist/ServiceMap.js +0 -91
  218. package/eslint.config.mjs +0 -26
  219. package/src/Operations.ts +0 -55
@@ -0,0 +1,402 @@
1
+ import * as Ref from "effect/Ref";
2
+ import { Rpc } from "effect/unstable/rpc";
3
+ import * as Context from "../Context.js";
4
+ import * as Effect from "../Effect.js";
5
+ import * as S from "../Schema.js";
6
+ /**
7
+ * A single segment within an `InvalidationKey` array.
8
+ * Accepts any JSON-compatible value: string, number, boolean, null,
9
+ * arrays and objects recursively — matching TanStack Query's `queryKey` element type.
10
+ */
11
+ export declare const InvalidationKeySegment: S.Codec<S.Json, S.Json, never, never>;
12
+ export type InvalidationKeySegment = S.Schema.Type<typeof InvalidationKeySegment>;
13
+ /** Schema for a single invalidation key – an array of segments compatible with TanStack Query `queryKey`. */
14
+ export declare const InvalidationKey: S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
15
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
16
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
17
+ };
18
+ export type InvalidationKey = S.Schema.Type<typeof InvalidationKey>;
19
+ /** Schema for the full set of invalidation keys – an array of `InvalidationKey`. */
20
+ export declare const InvalidationKeys: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
21
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
22
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
23
+ }> & {
24
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
25
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
26
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
27
+ }>>;
28
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
29
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
30
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
31
+ }>>;
32
+ };
33
+ export type InvalidationKeys = S.Schema.Type<typeof InvalidationKeys>;
34
+ /** Metadata included in every command response for server-driven cache invalidation. */
35
+ export declare const CommandMetaData: S.Struct<{
36
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
37
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
38
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
39
+ }> & {
40
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
41
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
42
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
43
+ }>>;
44
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
45
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
46
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
47
+ }>>;
48
+ };
49
+ }>;
50
+ export type CommandMetaData = S.Schema.Type<typeof CommandMetaData>;
51
+ /**
52
+ * Wraps a command's success schema so that the wire format carries both the `payload`
53
+ * (the handler's actual return value) and `metadata` (server-driven cache invalidation keys).
54
+ * Transparent to users: the server handler returns the plain payload and the client receives
55
+ * the plain payload — wrapping/unwrapping is handled internally by the routing layer.
56
+ */
57
+ export declare const CommandResponseWithMetaData: <S extends S.Top>(success: S) => S.Struct<{
58
+ readonly payload: S;
59
+ readonly metadata: S.Struct<{
60
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
61
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
62
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
63
+ }> & {
64
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
65
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
66
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
67
+ }>>;
68
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
69
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
70
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
71
+ }>>;
72
+ };
73
+ }>;
74
+ }>;
75
+ /**
76
+ * Wraps a command's failure schema so that the wire format carries both the `error`
77
+ * (the handler's actual failure value) and `metadata` (server-driven cache invalidation keys
78
+ * accumulated thus far before the failure occurred).
79
+ * Transparent to users: the server handler fails with the plain error and the client receives
80
+ * the plain error — wrapping/unwrapping is handled internally by the routing layer.
81
+ */
82
+ export declare const CommandFailureWithMetaData: <E extends S.Top>(error: E) => S.Struct<{
83
+ readonly _tag: S.Literal<"CommandFailureWithMetaData">;
84
+ readonly error: E;
85
+ readonly metadata: S.Struct<{
86
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
87
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
88
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
89
+ }> & {
90
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
91
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
92
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
93
+ }>>;
94
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
95
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
96
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
97
+ }>>;
98
+ };
99
+ }>;
100
+ }>;
101
+ /**
102
+ * Stream chunk schema for stream responses with metadata.
103
+ * Each item is either a data value, an intermediate "metadata" signal carrying cache
104
+ * invalidation keys accumulated since the previous drain, or a final "done" signal.
105
+ * Transparent to users: stream handlers return plain values and clients receive plain values —
106
+ * wrapping/unwrapping is handled internally by the routing layer.
107
+ *
108
+ * The "done" chunk is always the last item in the stream and carries any remaining invalidation
109
+ * keys. An optional "metadata" chunk may appear after any "value" chunk and carries keys
110
+ * accumulated since the last drain (V3: mid-stream invalidation).
111
+ */
112
+ export declare const StreamResponseChunk: <S extends S.Top>(success: S) => S.Union<readonly [S.Struct<{
113
+ readonly _tag: S.Literal<"value">;
114
+ readonly value: S;
115
+ }>, S.Struct<{
116
+ readonly _tag: S.Literal<"metadata">;
117
+ readonly metadata: S.Struct<{
118
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
119
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
120
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
121
+ }> & {
122
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
123
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
124
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
125
+ }>>;
126
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
127
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
128
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
129
+ }>>;
130
+ };
131
+ }>;
132
+ }>, S.Struct<{
133
+ readonly _tag: S.Literal<"done">;
134
+ readonly metadata: S.Struct<{
135
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
136
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
137
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
138
+ }> & {
139
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
140
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
141
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
142
+ }>>;
143
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
144
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
145
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
146
+ }>>;
147
+ };
148
+ }>;
149
+ }>]>;
150
+ export type StreamResponseChunk<A> = {
151
+ readonly _tag: "value";
152
+ readonly value: A;
153
+ } | {
154
+ readonly _tag: "metadata";
155
+ readonly metadata: CommandMetaData;
156
+ } | {
157
+ readonly _tag: "done";
158
+ readonly metadata: CommandMetaData;
159
+ };
160
+ /**
161
+ * Stream chunk schema for stream failures with metadata.
162
+ * Used to signal a stream failure while still carrying cache invalidation keys
163
+ * accumulated thus far.
164
+ */
165
+ export declare const StreamFailureChunk: <E extends S.Top>(error: E) => S.Struct<{
166
+ readonly _tag: S.Literal<"error">;
167
+ readonly error: E;
168
+ readonly metadata: S.Struct<{
169
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
170
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
171
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
172
+ }> & {
173
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
174
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
175
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
176
+ }>>;
177
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
178
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
179
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
180
+ }>>;
181
+ };
182
+ }>;
183
+ }>;
184
+ export type StreamFailureChunk<E> = {
185
+ readonly _tag: "error";
186
+ readonly error: E;
187
+ readonly metadata: CommandMetaData;
188
+ };
189
+ /**
190
+ * Context annotation for declaring static cache invalidation keys on a low-level `Rpc` definition.
191
+ * These keys are always included in the command response metadata, regardless of the handler logic.
192
+ *
193
+ * Prefer using `makeQueryKey` over raw string arrays to stay in sync with the actual query
194
+ * definitions without manual string maintenance:
195
+ *
196
+ * ```ts
197
+ * import { makeQueryKey } from "effect-app/client"
198
+ * import { Invalidation } from "effect-app/rpc"
199
+ * import * as UserRsc from "../User/index.js" // separate module to avoid circular deps
200
+ *
201
+ * class UpdateProfile extends Rpc.make("UpdateProfile", { ... })
202
+ * .annotate(Invalidation.Invalidates, [makeQueryKey(UserRsc.GetMe), makeQueryKey(UserRsc.GetProfile)]) {}
203
+ * ```
204
+ *
205
+ * **Circular dependency note:** if mutations and queries live in the same file you may hit a
206
+ * circular reference at evaluation time. The idiomatic fix is to move mutations into their own
207
+ * module (e.g. `User/mutations.ts`) that directly imports the relevant query classes rather than
208
+ * re-exporting them through a barrel.
209
+ *
210
+ * For the higher-level `Command`/`Query` builders from `makeRpcClient`, use the
211
+ * `invalidatesQueries` callback argument instead (it receives the same query keys at runtime).
212
+ */
213
+ export declare const Invalidates: Context.Reference<readonly (readonly S.Json[])[]>;
214
+ export type Invalidates = typeof Invalidates;
215
+ /** The shape of the per-request service that accumulates invalidation keys. */
216
+ export interface InvalidationSetService {
217
+ readonly add: (key: InvalidationKey) => Effect.Effect<void>;
218
+ readonly get: Effect.Effect<ReadonlyArray<InvalidationKey>>;
219
+ /**
220
+ * V3: Reads all currently accumulated keys and resets the bucket to empty.
221
+ * Used by the stream routing layer to emit intermediate "metadata" chunks
222
+ * without re-sending keys that have already been forwarded to the client.
223
+ */
224
+ readonly drain: Effect.Effect<ReadonlyArray<InvalidationKey>>;
225
+ }
226
+ /**
227
+ * Request-scoped service for accumulating invalidation keys dynamically inside a handler.
228
+ * Provided by `InvalidationMiddlewareLive` for every RPC call; has a no-op default so it is
229
+ * safe to use even when the HTTP middleware is absent (tests, workers, etc.).
230
+ *
231
+ * Use `InvalidationSet.use(_ => _.add(key))` (or `.useSync` for non-Effect callbacks) as a
232
+ * shorthand instead of yielding the service manually.
233
+ *
234
+ * Prefer `makeQueryKey` over raw string arrays so invalidation keys stay in sync with the
235
+ * actual query definitions automatically:
236
+ *
237
+ * ```ts
238
+ * import { makeQueryKey } from "effect-app/client"
239
+ * import { Effect } from "effect"
240
+ * import { Invalidation } from "effect-app/rpc"
241
+ * import * as CartRsc from "../Cart/queries.js"
242
+ * import * as UserRsc from "../User/queries.js"
243
+ *
244
+ * const handler = Effect.fnUntraced(function*(req: UpdateCartRequest) {
245
+ * const cart = yield* CartRepo.save(req.cart)
246
+ *
247
+ * // Stage 1 – unconditional: always invalidate after saving
248
+ * yield* Invalidation.InvalidationSet.use(_ => _.add(makeQueryKey(UserRsc.GetMe)))
249
+ *
250
+ * // Stage 2 – conditional: only if the cart changed state
251
+ * if (cart.isCheckedOut) {
252
+ * yield* Invalidation.InvalidationSet.use(_ => _.add(makeQueryKey(CartRsc.GetCartStats)))
253
+ * }
254
+ *
255
+ * return cart
256
+ * })
257
+ * ```
258
+ *
259
+ * You can combine static (`Invalidates` annotation) and dynamic (`InvalidationSet.use`) keys:
260
+ * the annotation pre-populates the set before the handler runs; dynamic additions accumulate
261
+ * throughout the handler. All keys are included in the command response metadata.
262
+ */
263
+ export declare const InvalidationSet: Context.Reference<InvalidationSetService>;
264
+ export type InvalidationSet = typeof InvalidationSet;
265
+ /** Creates a fresh `InvalidationSet` implementation backed by a `Ref`. */
266
+ export declare const makeInvalidationSet: (ref: Ref.Ref<ReadonlyArray<InvalidationKey>>) => InvalidationSetService;
267
+ /**
268
+ * `Rpc.Custom` definition for command RPCs that wrap the success/error schemas
269
+ * with `CommandResponseWithMetaData` / `CommandFailureWithMetaData`. The wrap
270
+ * lets server forward accumulated invalidation keys on both success and
271
+ * handler-thrown failure paths. Middleware-thrown errors bypass the wrap
272
+ * (the handler never ran, so no metadata) and flow raw at the Cause level —
273
+ * the client decodes them via the `rpc.middlewares[*].error` failure-union
274
+ * channel of `Rpc.exitSchema`.
275
+ */
276
+ export interface CommandRpc extends Rpc.Custom {
277
+ readonly out: Rpc.Custom.Out<ReturnType<typeof CommandResponseWithMetaData<this["success"] & S.Top>>, ReturnType<typeof CommandFailureWithMetaData<this["error"] & S.Top>>>;
278
+ }
279
+ /**
280
+ * Custom Rpc constructor for command RPCs.
281
+ * Wraps the success schema with `CommandResponseWithMetaData` and the error
282
+ * schema with `CommandFailureWithMetaData`.
283
+ */
284
+ export declare const makeCommandRpc: <const Tag extends string, Payload extends S.Top | import("effect/Schema").Struct.Fields = S.Void, Success extends S.Top = S.Void, Error extends S.Top = S.Never, const Stream extends boolean = false, Out extends Rpc.Custom.OutDefault = Rpc.Custom.Out<S.Struct<{
285
+ readonly payload: S.Top & Success;
286
+ readonly metadata: S.Struct<{
287
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
288
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
289
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
290
+ }> & {
291
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
292
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
293
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
294
+ }>>;
295
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
296
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
297
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
298
+ }>>;
299
+ };
300
+ }>;
301
+ }>, S.Struct<{
302
+ readonly _tag: S.Literal<"CommandFailureWithMetaData">;
303
+ readonly error: S.Top & Error;
304
+ readonly metadata: S.Struct<{
305
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
306
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
307
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
308
+ }> & {
309
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
310
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
311
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
312
+ }>>;
313
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
314
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
315
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
316
+ }>>;
317
+ };
318
+ }>;
319
+ }>>>(tag: Tag, options?: {
320
+ readonly payload?: Payload;
321
+ readonly success?: Success;
322
+ readonly error?: Error;
323
+ readonly defect?: Rpc.DefectSchema;
324
+ readonly stream?: Stream;
325
+ readonly primaryKey?: [Payload] extends [import("effect/Schema").Struct.Fields] ? (payload: Payload extends import("effect/Schema").Struct.Fields ? (import("effect/Schema").Struct.Type_<Payload, import("effect/Schema").Struct.TypeOptionalKeys<Payload>, import("effect/Schema").Struct.TypeMutableKeys<Payload>> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never) extends infer T ? { [K in keyof T]: T[K]; } : never : Payload["Type"]) => string : never;
326
+ } | undefined) => Rpc.Rpc<Tag, Payload extends import("effect/Schema").Struct.Fields ? import("effect/Schema").Struct<Payload> : Payload, Stream extends true ? import("effect/unstable/rpc/RpcSchema").Stream<Out["success"], Out["error"]> : Out["success"], Stream extends true ? S.Never : Out["error"], never, never>;
327
+ /**
328
+ * `Rpc.Custom` definition for stream RPCs that wrap the success/error schemas
329
+ * with `StreamResponseChunk` / `StreamFailureChunk`.
330
+ */
331
+ export interface StreamRpc extends Rpc.Custom {
332
+ readonly out: Rpc.Custom.Out<ReturnType<typeof StreamResponseChunk<this["success"] & S.Top>>, ReturnType<typeof StreamFailureChunk<this["error"] & S.Top>>>;
333
+ }
334
+ /**
335
+ * Custom Rpc constructor for stream RPCs.
336
+ * Wraps the success schema with `StreamResponseChunk` and
337
+ * the error schema with `StreamFailureChunk`.
338
+ */
339
+ export declare const makeStreamRpc: <const Tag extends string, Payload extends S.Top | import("effect/Schema").Struct.Fields = S.Void, Success extends S.Top = S.Void, Error extends S.Top = S.Never, const Stream extends boolean = false, Out extends Rpc.Custom.OutDefault = Rpc.Custom.Out<S.Union<readonly [S.Struct<{
340
+ readonly _tag: S.Literal<"value">;
341
+ readonly value: S.Top & Success;
342
+ }>, S.Struct<{
343
+ readonly _tag: S.Literal<"metadata">;
344
+ readonly metadata: S.Struct<{
345
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
346
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
347
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
348
+ }> & {
349
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
350
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
351
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
352
+ }>>;
353
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
354
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
355
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
356
+ }>>;
357
+ };
358
+ }>;
359
+ }>, S.Struct<{
360
+ readonly _tag: S.Literal<"done">;
361
+ readonly metadata: S.Struct<{
362
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
363
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
364
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
365
+ }> & {
366
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
367
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
368
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
369
+ }>>;
370
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
371
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
372
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
373
+ }>>;
374
+ };
375
+ }>;
376
+ }>]>, S.Struct<{
377
+ readonly _tag: S.Literal<"error">;
378
+ readonly error: S.Top & Error;
379
+ readonly metadata: S.Struct<{
380
+ readonly invalidateQueries: S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
381
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
382
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
383
+ }> & {
384
+ withDefault: S.withConstructorDefault<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
385
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
386
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
387
+ }>>;
388
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.$Array<S.Codec<S.Json, S.Json, never, never>> & {
389
+ withDefault: S.withConstructorDefault<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
390
+ withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.Codec<S.Json, S.Json, never, never>>>;
391
+ }>>;
392
+ };
393
+ }>;
394
+ }>>>(tag: Tag, options?: {
395
+ readonly payload?: Payload;
396
+ readonly success?: Success;
397
+ readonly error?: Error;
398
+ readonly defect?: Rpc.DefectSchema;
399
+ readonly stream?: Stream;
400
+ readonly primaryKey?: [Payload] extends [import("effect/Schema").Struct.Fields] ? (payload: Payload extends import("effect/Schema").Struct.Fields ? (import("effect/Schema").Struct.Type_<Payload, import("effect/Schema").Struct.TypeOptionalKeys<Payload>, import("effect/Schema").Struct.TypeMutableKeys<Payload>> extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never) extends infer T ? { [K in keyof T]: T[K]; } : never : Payload["Type"]) => string : never;
401
+ } | undefined) => Rpc.Rpc<Tag, Payload extends import("effect/Schema").Struct.Fields ? import("effect/Schema").Struct<Payload> : Payload, Stream extends true ? import("effect/unstable/rpc/RpcSchema").Stream<Out["success"], Out["error"]> : Out["success"], Stream extends true ? S.Never : Out["error"], never, never>;
402
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnBjL0ludmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQTtBQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDekMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUE7QUFFakM7Ozs7R0FJRztBQUNILGVBQU8sTUFBTSxzQkFBc0IsdUNBQVMsQ0FBQTtBQUM1QyxNQUFNLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxzQkFBc0IsQ0FBQyxDQUFBO0FBRWpGLDZHQUE2RztBQUM3RyxlQUFPLE1BQU0sZUFBZTs7O0NBQWtDLENBQUE7QUFDOUQsTUFBTSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFBO0FBRW5FLG9GQUFvRjtBQUNwRixlQUFPLE1BQU0sZ0JBQWdCOzs7Ozs7Ozs7Ozs7Q0FBMkIsQ0FBQTtBQUN4RCxNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBRXJFLHdGQUF3RjtBQUN4RixlQUFPLE1BQU0sZUFBZTs7Ozs7Ozs7Ozs7Ozs7RUFBb0QsQ0FBQTtBQUNoRixNQUFNLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUE7QUFFbkU7Ozs7O0dBS0c7QUFDSCxlQUFPLE1BQU0sMkJBQTJCLEdBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFdB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Invalidation.d.ts","sourceRoot":"","sources":["../../src/rpc/Invalidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ import * as Ref from "effect/Ref";
2
+ import { Rpc } from "effect/unstable/rpc";
3
+ import * as Context from "../Context.js";
4
+ import * as Effect from "../Effect.js";
5
+ import * as S from "../Schema.js";
6
+ /**
7
+ * A single segment within an `InvalidationKey` array.
8
+ * Accepts any JSON-compatible value: string, number, boolean, null,
9
+ * arrays and objects recursively — matching TanStack Query's `queryKey` element type.
10
+ */
11
+ export const InvalidationKeySegment = S.Json;
12
+ /** Schema for a single invalidation key – an array of segments compatible with TanStack Query `queryKey`. */
13
+ export const InvalidationKey = S.Array(InvalidationKeySegment);
14
+ /** Schema for the full set of invalidation keys – an array of `InvalidationKey`. */
15
+ export const InvalidationKeys = S.Array(InvalidationKey);
16
+ /** Metadata included in every command response for server-driven cache invalidation. */
17
+ export const CommandMetaData = S.Struct({ invalidateQueries: InvalidationKeys });
18
+ /**
19
+ * Wraps a command's success schema so that the wire format carries both the `payload`
20
+ * (the handler's actual return value) and `metadata` (server-driven cache invalidation keys).
21
+ * Transparent to users: the server handler returns the plain payload and the client receives
22
+ * the plain payload — wrapping/unwrapping is handled internally by the routing layer.
23
+ */
24
+ export const CommandResponseWithMetaData = (success) => S.Struct({ payload: success, metadata: CommandMetaData });
25
+ /**
26
+ * Wraps a command's failure schema so that the wire format carries both the `error`
27
+ * (the handler's actual failure value) and `metadata` (server-driven cache invalidation keys
28
+ * accumulated thus far before the failure occurred).
29
+ * Transparent to users: the server handler fails with the plain error and the client receives
30
+ * the plain error — wrapping/unwrapping is handled internally by the routing layer.
31
+ */
32
+ export const CommandFailureWithMetaData = (error) => S.Struct({ _tag: S.Literal("CommandFailureWithMetaData"), error, metadata: CommandMetaData });
33
+ /**
34
+ * Stream chunk schema for stream responses with metadata.
35
+ * Each item is either a data value, an intermediate "metadata" signal carrying cache
36
+ * invalidation keys accumulated since the previous drain, or a final "done" signal.
37
+ * Transparent to users: stream handlers return plain values and clients receive plain values —
38
+ * wrapping/unwrapping is handled internally by the routing layer.
39
+ *
40
+ * The "done" chunk is always the last item in the stream and carries any remaining invalidation
41
+ * keys. An optional "metadata" chunk may appear after any "value" chunk and carries keys
42
+ * accumulated since the last drain (V3: mid-stream invalidation).
43
+ */
44
+ export const StreamResponseChunk = (success) => S.Union([
45
+ S.Struct({ _tag: S.Literal("value"), value: success }),
46
+ S.Struct({ _tag: S.Literal("metadata"), metadata: CommandMetaData }),
47
+ S.Struct({ _tag: S.Literal("done"), metadata: CommandMetaData })
48
+ ]);
49
+ /**
50
+ * Stream chunk schema for stream failures with metadata.
51
+ * Used to signal a stream failure while still carrying cache invalidation keys
52
+ * accumulated thus far.
53
+ */
54
+ export const StreamFailureChunk = (error) => S.Struct({ _tag: S.Literal("error"), error, metadata: CommandMetaData });
55
+ /**
56
+ * Context annotation for declaring static cache invalidation keys on a low-level `Rpc` definition.
57
+ * These keys are always included in the command response metadata, regardless of the handler logic.
58
+ *
59
+ * Prefer using `makeQueryKey` over raw string arrays to stay in sync with the actual query
60
+ * definitions without manual string maintenance:
61
+ *
62
+ * ```ts
63
+ * import { makeQueryKey } from "effect-app/client"
64
+ * import { Invalidation } from "effect-app/rpc"
65
+ * import * as UserRsc from "../User/index.js" // separate module to avoid circular deps
66
+ *
67
+ * class UpdateProfile extends Rpc.make("UpdateProfile", { ... })
68
+ * .annotate(Invalidation.Invalidates, [makeQueryKey(UserRsc.GetMe), makeQueryKey(UserRsc.GetProfile)]) {}
69
+ * ```
70
+ *
71
+ * **Circular dependency note:** if mutations and queries live in the same file you may hit a
72
+ * circular reference at evaluation time. The idiomatic fix is to move mutations into their own
73
+ * module (e.g. `User/mutations.ts`) that directly imports the relevant query classes rather than
74
+ * re-exporting them through a barrel.
75
+ *
76
+ * For the higher-level `Command`/`Query` builders from `makeRpcClient`, use the
77
+ * `invalidatesQueries` callback argument instead (it receives the same query keys at runtime).
78
+ */
79
+ export const Invalidates = Context.Reference("effect-app/rpc/Invalidates", { defaultValue: () => [] });
80
+ /**
81
+ * Request-scoped service for accumulating invalidation keys dynamically inside a handler.
82
+ * Provided by `InvalidationMiddlewareLive` for every RPC call; has a no-op default so it is
83
+ * safe to use even when the HTTP middleware is absent (tests, workers, etc.).
84
+ *
85
+ * Use `InvalidationSet.use(_ => _.add(key))` (or `.useSync` for non-Effect callbacks) as a
86
+ * shorthand instead of yielding the service manually.
87
+ *
88
+ * Prefer `makeQueryKey` over raw string arrays so invalidation keys stay in sync with the
89
+ * actual query definitions automatically:
90
+ *
91
+ * ```ts
92
+ * import { makeQueryKey } from "effect-app/client"
93
+ * import { Effect } from "effect"
94
+ * import { Invalidation } from "effect-app/rpc"
95
+ * import * as CartRsc from "../Cart/queries.js"
96
+ * import * as UserRsc from "../User/queries.js"
97
+ *
98
+ * const handler = Effect.fnUntraced(function*(req: UpdateCartRequest) {
99
+ * const cart = yield* CartRepo.save(req.cart)
100
+ *
101
+ * // Stage 1 – unconditional: always invalidate after saving
102
+ * yield* Invalidation.InvalidationSet.use(_ => _.add(makeQueryKey(UserRsc.GetMe)))
103
+ *
104
+ * // Stage 2 – conditional: only if the cart changed state
105
+ * if (cart.isCheckedOut) {
106
+ * yield* Invalidation.InvalidationSet.use(_ => _.add(makeQueryKey(CartRsc.GetCartStats)))
107
+ * }
108
+ *
109
+ * return cart
110
+ * })
111
+ * ```
112
+ *
113
+ * You can combine static (`Invalidates` annotation) and dynamic (`InvalidationSet.use`) keys:
114
+ * the annotation pre-populates the set before the handler runs; dynamic additions accumulate
115
+ * throughout the handler. All keys are included in the command response metadata.
116
+ */
117
+ export const InvalidationSet = Context.Reference("effect-app/rpc/InvalidationSet", {
118
+ defaultValue: () => ({
119
+ add: (_key) => Effect.void,
120
+ get: Effect.succeed([]),
121
+ drain: Effect.succeed([])
122
+ })
123
+ });
124
+ /** Creates a fresh `InvalidationSet` implementation backed by a `Ref`. */
125
+ export const makeInvalidationSet = (ref) => ({
126
+ add: (key) => Ref.update(ref, (keys) => [...keys, key]),
127
+ get: Ref.get(ref),
128
+ drain: Ref.getAndSet(ref, [])
129
+ });
130
+ /**
131
+ * Custom Rpc constructor for command RPCs.
132
+ * Wraps the success schema with `CommandResponseWithMetaData` and the error
133
+ * schema with `CommandFailureWithMetaData`.
134
+ */
135
+ export const makeCommandRpc = Rpc.custom(({ defect, error, success }) => ({
136
+ success: CommandResponseWithMetaData(success),
137
+ error: CommandFailureWithMetaData(error),
138
+ defect
139
+ }));
140
+ /**
141
+ * Custom Rpc constructor for stream RPCs.
142
+ * Wraps the success schema with `StreamResponseChunk` and
143
+ * the error schema with `StreamFailureChunk`.
144
+ */
145
+ export const makeStreamRpc = Rpc.custom(({ defect, error, success }) => ({
146
+ success: StreamResponseChunk(success),
147
+ error: StreamFailureChunk(error),
148
+ defect
149
+ }));
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW52YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JwYy9JbnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUE7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxDQUFDLE1BQU0sY0FBYyxDQUFBO0FBRWpDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBRzVDLDZHQUE2RztBQUM3RyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0FBRzlELG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0FBR3hELHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtBQUdoRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQWtCLE9BQVUsRUFBRSxFQUFFLENBQ3pFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO0FBRTNEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQWtCLEtBQVEsRUFBRSxFQUFFLENBQ3RFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FB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
@@ -1,8 +1,9 @@
1
- import { Effect, Layer, type Schema, Schema as S, type Scope, ServiceMap } from "effect";
1
+ import { Effect, Layer, type Schema, Schema as S, type Scope } from "effect";
2
2
  import { type NonEmptyArray, type NonEmptyReadonlyArray } from "effect/Array";
3
3
  import { type Simplify } from "effect/Types";
4
4
  import { Rpc, type RpcGroup, type RpcSchema } from "effect/unstable/rpc";
5
5
  import { type HandlersFrom } from "effect/unstable/rpc/RpcGroup";
6
+ import * as Context from "../Context.js";
6
7
  import { type TypeTestId } from "../TypeTest.js";
7
8
  import { type GetContextConfig, type RequestContextMapTagAny, type RpcContextMap } from "./RpcContextMap.js";
8
9
  import { type AddMiddleware, type AnyDynamic, type RpcDynamic, type TagClassAny } from "./RpcMiddleware.js";
@@ -18,11 +19,11 @@ export interface MiddlewareMaker<Self, Id extends string, RequestContextMap exte
18
19
  provides: MiddlewareMaker.ManyProvided<MiddlewareProviders> extends never ? never : MakeTags<MiddlewareMaker.ManyProvided<MiddlewareProviders>>;
19
20
  requires: Exclude<MiddlewareMaker.ManyRequired<MiddlewareProviders>, MiddlewareMaker.ManyProvided<MiddlewareProviders>> extends never ? never : MakeTags<Exclude<MiddlewareMaker.ManyRequired<MiddlewareProviders>, MiddlewareMaker.ManyProvided<MiddlewareProviders>>>;
20
21
  }> {
21
- readonly layer: Layer.Layer<Self, never, ServiceMap.Service.Identifier<MiddlewareProviders[number]>>;
22
+ readonly layer: Layer.Layer<Self, never, Context.Service.Identifier<MiddlewareProviders[number]>>;
22
23
  readonly requestContext: RequestContextTag<RequestContextMap>;
23
24
  readonly requestContextMap: RequestContextMap;
24
25
  }
25
- export interface RequestContextTag<RequestContextMap extends Record<string, RpcContextMap.Any>> extends ServiceMap.Service<"RequestContextConfig", GetContextConfig<RequestContextMap>> {
26
+ export interface RequestContextTag<RequestContextMap extends Record<string, RpcContextMap.Any>> extends Context.Service<"RequestContextConfig", GetContextConfig<RequestContextMap>> {
26
27
  }
27
28
  export declare namespace MiddlewareMaker {
28
29
  type Any = TagClassAny;
@@ -131,4 +132,4 @@ export declare const middlewareGroup: <RequestContextMap extends Record<string,
131
132
  toLayerDynamic: <Handlers extends HandlersFrom<AddMiddleware<R, Middleware>>, EX = never, RX = never>(build: Handlers | Effect.Effect<Handlers, EX, RX>) => Layer.Layer<Rpc.ToHandler<AddMiddleware<R, Middleware>>, EX, Exclude<RX, Scope.Scope> | RpcMiddlewareX.HandlersContext<AddMiddleware<R, Middleware>, Handlers>>;
132
133
  };
133
134
  export {};
134
- //# sourceMappingURL=MiddlewareMaker.d.ts.map
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlkZGxld2FyZU1ha2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnBjL01pZGRsZXdhcmVNYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzdFLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDeEUsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDaEUsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUE7QUFFeEMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsS0FBSyx1QkFBdUIsRUFBRSxLQUFLLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzVHLE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLFVBQVUsRUFBd0IsS0FBSyxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNqSSxPQUFPLEtBQUssY0FBYyxNQUFNLG9CQUFvQixDQUFBO0FBSXBELEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7QUFFcEIsTUFBTSxXQUFXLGVBQWUsQ0FDOUIsSUFBSSxFQUNKLEVBQUUsU0FBUyxNQUFNLEVBQ2pCLGlCQUFpQixTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdB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QUMsQ0FBQztLQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDdEQ7U0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUFFLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFOUMsS0FBWSxZQUFZLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3pHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkIsS0FBWSxZQUFZLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3pHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkIsS0FBWSxVQUFVLENBQUMsQ0FBQyxTQUFTLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsV0FBVyxDQUFDLEdBQ3ZHO1NBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FBRSxDQUFDLE1BQU0sQ0FBQyxHQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFckIsS0FBWSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxXQUFXLEdBQUcsQ0FBQyxTQUFTO1FBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFBO0tBQUUsR0FBRyxFQUFFLEdBQ25GLEtBQUssR0FDTCxLQUFLLENBQUE7SUFFVCxLQUFZLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLFdBQVcsR0FBRyxDQUFDLFNBQVM7UUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtLQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQ2xHLEtBQUssR0FDTCxLQUFLLENBQUE7SUFFVCxLQUFZLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLFdBQVcsR0FBRyxDQUFDLFNBQVM7UUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUE7S0FBRSxHQUFHLEVBQUUsR0FDbkYsS0FBSyxHQUNMLEtBQUssQ0FBQTtDQUNWO0FBTUQsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsZUFBZSxDQUFDLEdBQUcsSUFBSSxFQUFFLFNBQVM7SUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUE7Q0FBRSxHQUFHO0tBQ2xILENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FDdEcsS0FBSztDQUNWLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsR0FDdEIsS0FBSyxDQUFBO0FBRVQsS0FBSywwQkFBMEIsQ0FDN0IsR0FBRyxTQUFTLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQzlDLGlCQUFpQixTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUN6RDtLQUNELENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtLQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUM5RyxLQUFLO0NBQ1YsQ0FBQTtBQUVELEtBQUssMEJBQTBCLENBQzdCLEdBQUcsRUFDSCxDQUFDLFNBQVM7SUFDUixJQUFJLEVBQUUsR0FBRyxDQUFBO0lBQ1QsRUFBRSxFQUFFLE1BQU0sQ0FBQTtJQUNWLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEIsV0FBVyxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDL0MsR0FBRyxFQUFFLEdBQUcsQ0FBQTtJQUNSLFdBQVcsRUFBRSxHQUFHLENBQUE7Q0FDakIsSUFDQyxHQUFHLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FDbEIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLElBQUksU0FBUyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDN0QsQ0FBQyxTQUFTLGVBQWUsQ0FBQyxHQUFHLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFO0lBQy9ELElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDZixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ1gsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUdiLFFBQVEsRUFBRSxPQUFPLENBQ2YsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBRW5GLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUNwQixDQUFBO0lBQ0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDckMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUU3RSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQ1I7U0FDQyxDQUFDLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztLQUNuRixDQUFBO0lBQ0wsV0FBVyxFQUFFLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0NBQ3RFLENBQUMsR0FHRiwyQ0FBMkMsR0FDN0MsS0FBSyxDQUFBO0FBRVQsTUFBTSxXQUFXLGtCQUFrQixDQUNqQyxJQUFJLEVBQ0osRUFBRSxTQUFTLE1BQU0sRUFDakIsaUJBQWlCLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQzNELFFBQVEsU0FBUyxNQUFNLGlCQUFpQixFQUN4QyxXQUFXLFNBQVMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFDdEQsMEJBQTBCLEVBQzFCLEdBQUcsQ0FBQyxXQUFXLFNBQVM7SUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FBRyxLQUFLO0lBRWhELEdBQUcsRUFBRSxDQUNILEtBQUssQ0FBQyxHQUFHLFNBQVMsTUFBTSxFQUN4QixPQUFPLFNBQVMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQ3RFLE9BQU8sU0FBUyxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxDQUFDLElBQUksRUFDL0MsS0FBSyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUM5QyxLQUFLLENBQUMsTUFBTSxTQUFTLE9BQU8sR0FBRyxLQUFLLEVBQ3BDLE1BQU0sU0FBUyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsRUFDdkQsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFBO1FBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUE7UUFDMUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQTtRQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO1FBQ3hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUE7UUFDeEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FDOUQsT0FBTyxFQUFFLE9BQU8sU0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FDdkcsTUFBTSxDQUFDLEdBQ1YsS0FBSyxDQUFBO0tBQ1YsS0FDRyxHQUFHLENBQUMsR0FBRyxDQUNQLEdBQUcsRUFDSCxPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEVBQ3ZFLE1BQU0sU0FBUyxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUNoRSxNQUFNLFNBQVMsSUFBSSxHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQ2xELEdBQ0M7UUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUE7SUFFL0IsVUFBVSxDQUFDLEdBQUcsU0FBUyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUN2RCxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQ1QsMEJBQTBCLENBQUMsR0FBRyxFQUFFO1FBQ2pDLElBQUksRUFBRSxJQUFJLENBQUE7UUFDVixFQUFFLEVBQUUsRUFBRSxDQUFBO1FBQ04sR0FBRyxFQUFFLGlCQUFpQixDQUFBO1FBQ3RCLFFBQVEsRUFBRSxRQUFRLENBQUE7UUFDbEIsV0FBVyxFQUFFLFdBQVcsQ0FBQTtRQUN4QixHQUFHLEVBQUUsMEJBQTBCLENBQUE7UUFDL0IsV0FBVyxFQUFFLFdBQVcsQ0FBQTtLQUN6QixDQUFDLFNBQVMsTUFBTSxHQUFHLFNBQVM7UUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQTtRQUNULEVBQUUsRUFBRSxNQUFNLENBQUE7UUFDVixHQUFHLEVBQUUsaUJBQWlCLENBQUE7UUFDdEIsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7UUFDakMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0MsR0FBRyxFQUFFLEdBQUcsQ0FBQTtRQUNSLFdBQVcsRUFBRSxHQUFHLENBQUE7S0FDakIsR0FBRyxrQkFBa0IsQ0FDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFDVCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQ1YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFDbEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUNWLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDbkIsR0FDQyxLQUFLLENBQUE7SUFHVCxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNyQix5QkFBeUIsRUFBRSxPQUFPLENBQUMsTUFBTSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNyRSxjQUFjLEVBQUUsV0FBVyxDQUFBO0tBQzVCLENBQUE7Q0FDRjtBQUVELE1BQU0sTUFBTSxrQkFBa0IsQ0FDNUIsSUFBSSxFQUNKLEVBQUUsU0FBUyxNQUFNLEVBQ2pCLGlCQUFpQixTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUMzRCxRQUFRLFNBQVMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQ2hELFdBQVcsU0FBUyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFDM0QsMEJBQTBCLEdBQUcsT0FBTyxFQUNwQyxXQUFXLFNBQVM7SUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FBRyxLQUFLLElBRTFDLGtCQUFrQixDQUNsQixJQUFJLEVBQ0osRUFBRSxFQUNGLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsV0FBVyxFQUNYLDBCQUEwQixFQUMxQixXQUFXLENBQ1osR0FDQywrR0FBK0c7QUFFakgsQ0FBQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FDbEcsSUFBSSxFQUNKLEVBQUUsRUFDRixpQkFBaUIsRUFDakIsV0FBVyxDQUNaLEdBQ0Q7SUFBRSxLQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFBO0NBQUUsR0FDckI7SUFBRSxLQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFBO0NBQUUsQ0FBQyxDQUFBO0FBZ0k1QixlQUFPLE1BQU0sR0FBRyxHQUFJLElBQUksUUFFdEIsS0FBSyxDQUFDLEVBQUUsU0FBUyxNQUFNLEVBQ3ZCLGlCQUFpQixTQUFTLHVCQUF1QixNQUM3QyxFQUFFLE9BQU8saUJBQWlCLEtBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FrRTFGLENBQUE7QUFHRCxlQUFPLE1BQU0sZUFBZSxHQUMxQixpQkFBaUIsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFDM0QsVUFBVSxTQUFTLGNBQWMsQ0FBQyxXQUFXLEdBQUc7SUFDOUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQzdELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQTtDQUM5QyxjQUVXLFVBQVUsTUFFdkIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7cUJBTXpDLFFBQVEsU0FBUyxZQUFZLDhCQUFJLEVBQ2pDLEVBQUUsR0FBRyxLQUFLLEVBQ1YsRUFBRSxHQUFHLEtBQUssU0FHTixRQUFRLEdBQ1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUNsQyxLQUFLLENBQUMsS0FBSyxDQUNaLEdBQUcsQ0FBQyxTQUFTLDhCQUFJLEVBQ2pCLEVBQUUsRUFDQSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FDeEIsY0FBYyxDQUFDLGVBQWUsK0JBQUssUUFBUSxDQUFDLENBQy9DO0NBSUosQ0FBQSJ9