effect-app 4.0.0-beta.27 → 4.0.0-beta.272

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 (342) hide show
  1. package/CHANGELOG.md +1275 -0
  2. package/dist/Array.d.ts +2 -1
  3. package/dist/Array.d.ts.map +1 -1
  4. package/dist/Array.js +4 -4
  5. package/dist/Chunk.d.ts.map +1 -1
  6. package/dist/Config/SecretURL.d.ts +3 -1
  7. package/dist/Config/SecretURL.d.ts.map +1 -1
  8. package/dist/Config/SecretURL.js +3 -6
  9. package/dist/Config/internal/configSecretURL.d.ts.map +1 -1
  10. package/dist/Config/internal/configSecretURL.js +2 -2
  11. package/dist/Config.d.ts +2 -0
  12. package/dist/Config.d.ts.map +1 -0
  13. package/dist/Config.js +8 -0
  14. package/dist/ConfigProvider.d.ts +2 -0
  15. package/dist/ConfigProvider.d.ts.map +1 -0
  16. package/dist/ConfigProvider.js +6 -0
  17. package/dist/{ServiceMap.d.ts → Context.d.ts} +18 -20
  18. package/dist/Context.d.ts.map +1 -0
  19. package/dist/Context.js +67 -0
  20. package/dist/Effect.d.ts +10 -9
  21. package/dist/Effect.d.ts.map +1 -1
  22. package/dist/Effect.js +5 -8
  23. package/dist/Emailer.d.ts +51 -0
  24. package/dist/Emailer.d.ts.map +1 -0
  25. package/dist/Emailer.js +7 -0
  26. package/dist/Function.d.ts.map +1 -1
  27. package/dist/Layer.d.ts +10 -6
  28. package/dist/Layer.d.ts.map +1 -1
  29. package/dist/Layer.js +3 -2
  30. package/dist/Model/Repository/Registry.d.ts +22 -0
  31. package/dist/Model/Repository/Registry.d.ts.map +1 -0
  32. package/dist/Model/Repository/Registry.js +18 -0
  33. package/dist/Model/Repository/ext.d.ts +60 -0
  34. package/dist/Model/Repository/ext.d.ts.map +1 -0
  35. package/dist/Model/Repository/ext.js +122 -0
  36. package/dist/Model/Repository/internal/internal.d.ts +63 -0
  37. package/dist/Model/Repository/internal/internal.d.ts.map +1 -0
  38. package/dist/Model/Repository/internal/internal.js +430 -0
  39. package/dist/Model/Repository/legacy.d.ts +21 -0
  40. package/dist/Model/Repository/legacy.d.ts.map +1 -0
  41. package/dist/Model/Repository/legacy.js +2 -0
  42. package/dist/Model/Repository/makeRepo.d.ts +54 -0
  43. package/dist/Model/Repository/makeRepo.d.ts.map +1 -0
  44. package/dist/Model/Repository/makeRepo.js +27 -0
  45. package/dist/Model/Repository/service.d.ts +121 -0
  46. package/dist/Model/Repository/service.d.ts.map +1 -0
  47. package/dist/Model/Repository/service.js +2 -0
  48. package/dist/Model/Repository/validation.d.ts +58 -0
  49. package/dist/Model/Repository/validation.d.ts.map +1 -0
  50. package/dist/Model/Repository/validation.js +32 -0
  51. package/dist/Model/Repository.d.ts +7 -0
  52. package/dist/Model/Repository.d.ts.map +1 -0
  53. package/dist/Model/Repository.js +7 -0
  54. package/dist/Model/dsl.d.ts +33 -0
  55. package/dist/Model/dsl.d.ts.map +1 -0
  56. package/dist/Model/dsl.js +43 -0
  57. package/dist/Model/filter/filterApi.d.ts +30 -0
  58. package/dist/Model/filter/filterApi.d.ts.map +1 -0
  59. package/dist/Model/filter/filterApi.js +2 -0
  60. package/dist/Model/filter/types/errors.d.ts +29 -0
  61. package/dist/Model/filter/types/errors.d.ts.map +1 -0
  62. package/dist/Model/filter/types/errors.js +2 -0
  63. package/dist/Model/filter/types/fields.d.ts +15 -0
  64. package/dist/Model/filter/types/fields.d.ts.map +1 -0
  65. package/dist/Model/filter/types/fields.js +2 -0
  66. package/dist/Model/filter/types/path/common.d.ts +316 -0
  67. package/dist/Model/filter/types/path/common.d.ts.map +1 -0
  68. package/dist/Model/filter/types/path/common.js +2 -0
  69. package/dist/Model/filter/types/path/eager.d.ts +94 -0
  70. package/dist/Model/filter/types/path/eager.d.ts.map +1 -0
  71. package/dist/Model/filter/types/path/eager.js +36 -0
  72. package/dist/Model/filter/types/path/index.d.ts +4 -0
  73. package/dist/Model/filter/types/path/index.d.ts.map +1 -0
  74. package/dist/Model/filter/types/path/index.js +3 -0
  75. package/dist/Model/filter/types/utils.d.ts +79 -0
  76. package/dist/Model/filter/types/utils.d.ts.map +1 -0
  77. package/dist/Model/filter/types/utils.js +2 -0
  78. package/dist/Model/filter/types/validator.d.ts +30 -0
  79. package/dist/Model/filter/types/validator.d.ts.map +1 -0
  80. package/dist/Model/filter/types/validator.js +2 -0
  81. package/dist/Model/filter/types.d.ts +5 -0
  82. package/dist/Model/filter/types.d.ts.map +1 -0
  83. package/dist/Model/filter/types.js +7 -0
  84. package/dist/Model/query/dsl.d.ts +493 -0
  85. package/dist/Model/query/dsl.d.ts.map +1 -0
  86. package/dist/Model/query/dsl.js +376 -0
  87. package/dist/Model/query/new-kid-interpreter.d.ts +136 -0
  88. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -0
  89. package/dist/Model/query/new-kid-interpreter.js +336 -0
  90. package/dist/Model/query.d.ts +15 -0
  91. package/dist/Model/query.d.ts.map +1 -0
  92. package/dist/Model/query.js +3 -0
  93. package/dist/Model.d.ts +5 -0
  94. package/dist/Model.d.ts.map +1 -0
  95. package/dist/Model.js +5 -0
  96. package/dist/NonEmptySet.d.ts +3 -1
  97. package/dist/NonEmptySet.d.ts.map +1 -1
  98. package/dist/NonEmptySet.js +2 -2
  99. package/dist/Option.d.ts +1 -0
  100. package/dist/Option.d.ts.map +1 -1
  101. package/dist/Option.js +3 -1
  102. package/dist/Pure.d.ts +7 -5
  103. package/dist/Pure.d.ts.map +1 -1
  104. package/dist/Pure.js +17 -14
  105. package/dist/QueueMaker.d.ts +13 -0
  106. package/dist/QueueMaker.d.ts.map +1 -0
  107. package/dist/QueueMaker.js +4 -0
  108. package/dist/RequestContext.d.ts +154 -0
  109. package/dist/RequestContext.d.ts.map +1 -0
  110. package/dist/RequestContext.js +54 -0
  111. package/dist/Schema/Class.d.ts +160 -19
  112. package/dist/Schema/Class.d.ts.map +1 -1
  113. package/dist/Schema/Class.js +260 -17
  114. package/dist/Schema/FastCheck.d.ts.map +1 -1
  115. package/dist/Schema/SchemaParser.d.ts +5 -0
  116. package/dist/Schema/SchemaParser.d.ts.map +1 -0
  117. package/dist/Schema/SchemaParser.js +6 -0
  118. package/dist/Schema/SpecialJsonSchema.d.ts +34 -0
  119. package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -0
  120. package/dist/Schema/SpecialJsonSchema.js +118 -0
  121. package/dist/Schema/SpecialOpenApi.d.ts +32 -0
  122. package/dist/Schema/SpecialOpenApi.d.ts.map +1 -0
  123. package/dist/Schema/SpecialOpenApi.js +123 -0
  124. package/dist/Schema/brand.d.ts +4 -2
  125. package/dist/Schema/brand.d.ts.map +1 -1
  126. package/dist/Schema/brand.js +3 -1
  127. package/dist/Schema/email.d.ts.map +1 -1
  128. package/dist/Schema/email.js +7 -4
  129. package/dist/Schema/ext.d.ts +338 -55
  130. package/dist/Schema/ext.d.ts.map +1 -1
  131. package/dist/Schema/ext.js +358 -53
  132. package/dist/Schema/moreStrings.d.ts +82 -36
  133. package/dist/Schema/moreStrings.d.ts.map +1 -1
  134. package/dist/Schema/moreStrings.js +49 -42
  135. package/dist/Schema/numbers.d.ts +34 -21
  136. package/dist/Schema/numbers.d.ts.map +1 -1
  137. package/dist/Schema/numbers.js +55 -12
  138. package/dist/Schema/phoneNumber.d.ts.map +1 -1
  139. package/dist/Schema/phoneNumber.js +6 -3
  140. package/dist/Schema/strings.d.ts +18 -4
  141. package/dist/Schema/strings.d.ts.map +1 -1
  142. package/dist/Schema/strings.js +1 -5
  143. package/dist/Schema.d.ts +213 -7
  144. package/dist/Schema.d.ts.map +1 -1
  145. package/dist/Schema.js +190 -11
  146. package/dist/Set.d.ts +4 -1
  147. package/dist/Set.d.ts.map +1 -1
  148. package/dist/Set.js +3 -2
  149. package/dist/Store.d.ts +170 -0
  150. package/dist/Store.d.ts.map +1 -0
  151. package/dist/Store.js +121 -0
  152. package/dist/_ext/Array.d.ts +1 -1
  153. package/dist/_ext/Array.d.ts.map +1 -1
  154. package/dist/_ext/Array.js +4 -2
  155. package/dist/_ext/misc.d.ts +4 -1
  156. package/dist/_ext/misc.d.ts.map +1 -1
  157. package/dist/_ext/misc.js +4 -2
  158. package/dist/_ext/ord.ext.d.ts +2 -1
  159. package/dist/_ext/ord.ext.d.ts.map +1 -1
  160. package/dist/_ext/ord.ext.js +2 -2
  161. package/dist/client/InvalidationKeys.d.ts +29 -0
  162. package/dist/client/InvalidationKeys.d.ts.map +1 -0
  163. package/dist/client/InvalidationKeys.js +33 -0
  164. package/dist/client/apiClientFactory.d.ts +19 -31
  165. package/dist/client/apiClientFactory.d.ts.map +1 -1
  166. package/dist/client/apiClientFactory.js +104 -34
  167. package/dist/client/clientFor.d.ts +52 -18
  168. package/dist/client/clientFor.d.ts.map +1 -1
  169. package/dist/client/clientFor.js +9 -1
  170. package/dist/client/errors.d.ts +82 -27
  171. package/dist/client/errors.d.ts.map +1 -1
  172. package/dist/client/errors.js +75 -19
  173. package/dist/client/makeClient.d.ts +494 -32
  174. package/dist/client/makeClient.d.ts.map +1 -1
  175. package/dist/client/makeClient.js +66 -24
  176. package/dist/client.d.ts +1 -0
  177. package/dist/client.d.ts.map +1 -1
  178. package/dist/client.js +2 -1
  179. package/dist/faker.d.ts.map +1 -1
  180. package/dist/http/Request.d.ts +1 -1
  181. package/dist/http/Request.d.ts.map +1 -1
  182. package/dist/http/Request.js +2 -2
  183. package/dist/ids.d.ts +42 -14
  184. package/dist/ids.d.ts.map +1 -1
  185. package/dist/ids.js +30 -5
  186. package/dist/index.d.ts +6 -7
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +8 -8
  189. package/dist/middleware.d.ts +13 -7
  190. package/dist/middleware.d.ts.map +1 -1
  191. package/dist/middleware.js +14 -8
  192. package/dist/rpc/Invalidation.d.ts +420 -0
  193. package/dist/rpc/Invalidation.d.ts.map +1 -0
  194. package/dist/rpc/Invalidation.js +168 -0
  195. package/dist/rpc/MiddlewareMaker.d.ts +11 -7
  196. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  197. package/dist/rpc/MiddlewareMaker.js +59 -38
  198. package/dist/rpc/RpcContextMap.d.ts +3 -3
  199. package/dist/rpc/RpcContextMap.d.ts.map +1 -1
  200. package/dist/rpc/RpcContextMap.js +4 -4
  201. package/dist/rpc/RpcMiddleware.d.ts +14 -10
  202. package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
  203. package/dist/rpc/RpcMiddleware.js +1 -1
  204. package/dist/rpc.d.ts +1 -1
  205. package/dist/rpc.d.ts.map +1 -1
  206. package/dist/rpc.js +2 -2
  207. package/dist/runtime.d.ts +19 -0
  208. package/dist/runtime.d.ts.map +1 -0
  209. package/dist/runtime.js +40 -0
  210. package/dist/setupRequest.d.ts +19 -0
  211. package/dist/setupRequest.d.ts.map +1 -0
  212. package/dist/setupRequest.js +69 -0
  213. package/dist/toast.d.ts +51 -0
  214. package/dist/toast.d.ts.map +1 -0
  215. package/dist/toast.js +34 -0
  216. package/dist/transform.d.ts +1 -1
  217. package/dist/transform.d.ts.map +1 -1
  218. package/dist/transform.js +4 -5
  219. package/dist/utils/effectify.d.ts +1 -1
  220. package/dist/utils/effectify.d.ts.map +1 -1
  221. package/dist/utils/effectify.js +2 -2
  222. package/dist/utils/extend.d.ts.map +1 -1
  223. package/dist/utils/gen.d.ts +4 -4
  224. package/dist/utils/gen.d.ts.map +1 -1
  225. package/dist/utils/logLevel.d.ts +2 -2
  226. package/dist/utils/logLevel.d.ts.map +1 -1
  227. package/dist/utils/logger.d.ts +4 -3
  228. package/dist/utils/logger.d.ts.map +1 -1
  229. package/dist/utils/logger.js +4 -4
  230. package/dist/utils.d.ts +34 -39
  231. package/dist/utils.d.ts.map +1 -1
  232. package/dist/utils.js +33 -37
  233. package/dist/validation/validators.d.ts.map +1 -1
  234. package/dist/validation.d.ts.map +1 -1
  235. package/dist/withToast.d.ts +30 -0
  236. package/dist/withToast.d.ts.map +1 -0
  237. package/dist/withToast.js +64 -0
  238. package/package.json +22 -247
  239. package/src/Array.ts +5 -5
  240. package/src/Chunk.ts +3 -3
  241. package/src/Config/SecretURL.ts +6 -3
  242. package/src/Config/internal/configSecretURL.ts +2 -2
  243. package/src/Config.ts +7 -0
  244. package/src/ConfigProvider.ts +5 -0
  245. package/src/{ServiceMap.ts → Context.ts} +56 -63
  246. package/src/Effect.ts +14 -16
  247. package/src/Emailer.ts +51 -0
  248. package/src/Inputify.type.ts +1 -1
  249. package/src/Layer.ts +11 -7
  250. package/src/Model/Repository/Registry.ts +35 -0
  251. package/src/Model/Repository/ext.ts +375 -0
  252. package/src/Model/Repository/internal/internal.ts +741 -0
  253. package/src/Model/Repository/legacy.ts +29 -0
  254. package/src/Model/Repository/makeRepo.ts +145 -0
  255. package/src/Model/Repository/service.ts +676 -0
  256. package/src/Model/Repository/validation.ts +31 -0
  257. package/src/Model/Repository.ts +6 -0
  258. package/src/Model/dsl.ts +129 -0
  259. package/src/Model/filter/filterApi.ts +60 -0
  260. package/src/Model/filter/types/errors.ts +47 -0
  261. package/src/Model/filter/types/fields.ts +50 -0
  262. package/src/Model/filter/types/path/common.ts +404 -0
  263. package/src/Model/filter/types/path/eager.ts +329 -0
  264. package/src/Model/filter/types/path/index.ts +4 -0
  265. package/src/Model/filter/types/utils.ts +128 -0
  266. package/src/Model/filter/types/validator.ts +46 -0
  267. package/src/Model/filter/types.ts +6 -0
  268. package/src/Model/query/dsl.ts +2694 -0
  269. package/src/Model/query/new-kid-interpreter.ts +484 -0
  270. package/src/Model/query.ts +13 -0
  271. package/src/Model.ts +4 -0
  272. package/src/NonEmptySet.ts +6 -4
  273. package/src/Option.ts +2 -0
  274. package/src/Pure.ts +22 -20
  275. package/src/QueueMaker.ts +19 -0
  276. package/src/RequestContext.ts +95 -0
  277. package/src/Schema/Class.ts +593 -59
  278. package/src/Schema/SchemaParser.ts +12 -0
  279. package/src/Schema/SpecialJsonSchema.ts +139 -0
  280. package/src/Schema/SpecialOpenApi.ts +130 -0
  281. package/src/Schema/brand.ts +22 -2
  282. package/src/Schema/email.ts +9 -4
  283. package/src/Schema/ext.ts +446 -91
  284. package/src/Schema/moreStrings.ts +147 -68
  285. package/src/Schema/numbers.ts +97 -28
  286. package/src/Schema/phoneNumber.ts +9 -5
  287. package/src/Schema/strings.ts +23 -14
  288. package/src/Schema.ts +389 -25
  289. package/src/Set.ts +6 -2
  290. package/src/Store.ts +277 -0
  291. package/src/_ext/Array.ts +4 -2
  292. package/src/_ext/misc.ts +4 -1
  293. package/src/_ext/ord.ext.ts +2 -1
  294. package/src/client/InvalidationKeys.ts +50 -0
  295. package/src/client/apiClientFactory.ts +234 -135
  296. package/src/client/clientFor.ts +105 -34
  297. package/src/client/errors.ts +100 -29
  298. package/src/client/makeClient.ts +594 -73
  299. package/src/client.ts +5 -4
  300. package/src/http/Request.ts +3 -3
  301. package/src/http.ts +1 -1
  302. package/src/ids.ts +33 -6
  303. package/src/index.ts +20 -23
  304. package/src/middleware.ts +13 -9
  305. package/src/rpc/Invalidation.ts +261 -0
  306. package/src/rpc/MiddlewareMaker.ts +88 -80
  307. package/src/rpc/README.md +2 -2
  308. package/src/rpc/RpcContextMap.ts +7 -6
  309. package/src/rpc/RpcMiddleware.ts +19 -13
  310. package/src/rpc.ts +4 -4
  311. package/src/runtime.ts +56 -0
  312. package/src/setupRequest.ts +134 -0
  313. package/src/toast.ts +54 -0
  314. package/src/transform.ts +4 -4
  315. package/src/utils/effectify.ts +1 -1
  316. package/src/utils/gen.ts +8 -8
  317. package/src/utils/logLevel.ts +1 -1
  318. package/src/utils/logger.ts +4 -3
  319. package/src/utils.ts +85 -158
  320. package/src/validation.ts +2 -2
  321. package/src/withToast.ts +133 -0
  322. package/test/dist/rpc.test.d.ts.map +1 -1
  323. package/test/dist/secretURL.test.d.ts.map +1 -0
  324. package/test/dist/special.test.d.ts.map +1 -0
  325. package/test/moreStrings.test.ts +1 -1
  326. package/test/rpc.test.ts +46 -6
  327. package/test/schema.test.ts +459 -30
  328. package/test/secretURL.test.ts +160 -0
  329. package/test/special.test.ts +1258 -0
  330. package/test/utils.test.ts +7 -7
  331. package/tsconfig.base.json +6 -5
  332. package/tsconfig.json +3 -1
  333. package/tsconfig.json.bak +2 -2
  334. package/tsconfig.src.json +29 -29
  335. package/tsconfig.test.json +2 -2
  336. package/dist/Operations.d.ts +0 -123
  337. package/dist/Operations.d.ts.map +0 -1
  338. package/dist/Operations.js +0 -29
  339. package/dist/ServiceMap.d.ts.map +0 -1
  340. package/dist/ServiceMap.js +0 -91
  341. package/eslint.config.mjs +0 -26
  342. package/src/Operations.ts +0 -55
@@ -0,0 +1,676 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import type * as Scope from "effect/Scope"
3
+ import type { DatabaseError, InvalidStateError, NotFoundError, OptimisticConcurrencyException } from "../../client/errors.ts"
4
+ import type * as Effect from "../../Effect.ts"
5
+ import type * as Option from "../../Option.ts"
6
+ import type * as S from "../../Schema.ts"
7
+ import type { NonNegativeInt } from "../../Schema/numbers.ts"
8
+ import type { FieldValues, IsNever, ResolveFirstLevel } from "../filter/types.ts"
9
+ import type { QAll, Query, QueryProjection, RawQuery } from "../query.ts"
10
+ import type { Mapped } from "./legacy.ts"
11
+ import type { ValidationResult } from "./validation.ts"
12
+
13
+ /**
14
+ * Event emitted by a repository's ChangeFeed.
15
+ *
16
+ * Tuple shape: `[items, op, namespace]` — `namespace` is the `storeId`
17
+ * context value at publish time (defaults to `"primary"`).
18
+ */
19
+ export type ChangeFeedEvent<T> = readonly [items: T[], op: "save" | "remove", namespace: string]
20
+
21
+ /**
22
+ * Synchronous broadcast channel for repository change events.
23
+ *
24
+ * `publish` only completes after every matching handler's Effect has
25
+ * finished — callers must await all handlers before continuing. Subscribers
26
+ * can target a single namespace via `options.namespace`, or omit it to
27
+ * receive events from every namespace (wildcard).
28
+ *
29
+ * Handlers are auto-removed when the subscriber's Scope closes; the full
30
+ * handler set is cleared when the repository's own scope closes.
31
+ */
32
+ export interface ChangeFeed<T> {
33
+ readonly publish: (evt: [T[], "save" | "remove"]) => Effect.Effect<void>
34
+ readonly subscribe: (
35
+ handler: (evt: ChangeFeedEvent<T>) => Effect.Effect<void>,
36
+ options?: { readonly namespace?: string }
37
+ ) => Effect.Effect<void, never, Scope.Scope>
38
+ }
39
+
40
+ export interface Repository<
41
+ T,
42
+ Encoded extends FieldValues,
43
+ Evt,
44
+ ItemType extends string,
45
+ IdKey extends keyof T,
46
+ RSchema,
47
+ RPublish,
48
+ RProvided = never
49
+ > {
50
+ readonly itemType: ItemType
51
+ readonly idKey: IdKey
52
+ readonly find: (id: T[IdKey]) => Effect.Effect<Option.Option<T>, DatabaseError, RSchema>
53
+ readonly all: Effect.Effect<T[], DatabaseError, RSchema>
54
+ readonly saveAndPublish: (
55
+ items: Iterable<T>,
56
+ events?: Iterable<Evt>
57
+ ) => Effect.Effect<void, InvalidStateError | OptimisticConcurrencyException | DatabaseError, RSchema | RPublish>
58
+ readonly changeFeed: ChangeFeed<T>
59
+ readonly removeAndPublish: (
60
+ items: Iterable<T>,
61
+ events?: Iterable<Evt>
62
+ ) => Effect.Effect<void, DatabaseError, RSchema | RPublish>
63
+
64
+ readonly removeById: (
65
+ idOrIds: T[IdKey] | ReadonlyArray<T[IdKey]>
66
+ ) => Effect.Effect<void, DatabaseError, RSchema>
67
+
68
+ readonly queryRaw: <T, Out, R>(
69
+ schema: S.Codec<T, Out, R>,
70
+ raw: RawQuery<Encoded, Out>
71
+ ) => Effect.Effect<readonly T[], S.SchemaError | DatabaseError, R>
72
+
73
+ /**
74
+ * Explicitly seed a namespace. Primary is seeded eagerly on initialization.
75
+ * Non-primary namespaces must be seeded explicitly before use.
76
+ */
77
+ readonly seedNamespace: (namespace: string) => Effect.Effect<void, DatabaseError>
78
+
79
+ readonly query: {
80
+ // ending with projection
81
+ <
82
+ A,
83
+ R,
84
+ From extends FieldValues,
85
+ TType extends "one" | "many" | "count" = "many",
86
+ E extends boolean = false
87
+ >(
88
+ q: (
89
+ initial: Query<Encoded>
90
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
91
+ ): Effect.Effect<
92
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
93
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
94
+ | (TType extends "count" ? never : S.SchemaError)
95
+ | DatabaseError,
96
+ Exclude<R, RProvided> | RSchema
97
+ >
98
+ <
99
+ A,
100
+ R,
101
+ From extends FieldValues,
102
+ TType extends "one" | "many" | "count" = "many",
103
+ $A = never,
104
+ E extends boolean = false
105
+ >(
106
+ q1: (
107
+ initial: Query<Encoded>
108
+ ) => $A,
109
+ q2: (
110
+ _: $A
111
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
112
+ ): Effect.Effect<
113
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
114
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
115
+ | (TType extends "count" ? never : S.SchemaError)
116
+ | DatabaseError,
117
+ Exclude<R, RProvided> | RSchema
118
+ >
119
+ <
120
+ A,
121
+ R,
122
+ From extends FieldValues,
123
+ TType extends "one" | "many" | "count" = "many",
124
+ $A = never,
125
+ $B = never,
126
+ E extends boolean = false
127
+ >(
128
+ q1: (
129
+ initial: Query<Encoded>
130
+ ) => $A,
131
+ q2: (_: $A) => $B,
132
+ q3: (
133
+ _: $B
134
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
135
+ ): Effect.Effect<
136
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
137
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
138
+ | (TType extends "count" ? never : S.SchemaError)
139
+ | DatabaseError,
140
+ Exclude<R, RProvided> | RSchema
141
+ >
142
+ <
143
+ A,
144
+ R,
145
+ From extends FieldValues,
146
+ TType extends "one" | "many" | "count" = "many",
147
+ $A = never,
148
+ $B = never,
149
+ $C = never,
150
+ E extends boolean = false
151
+ >(
152
+ q1: (
153
+ initial: Query<Encoded>
154
+ ) => $A,
155
+ q2: (_: $A) => $B,
156
+ q3: (_: $B) => $C,
157
+ q4: (
158
+ _: $C
159
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
160
+ ): Effect.Effect<
161
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
162
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
163
+ | (TType extends "count" ? never : S.SchemaError)
164
+ | DatabaseError,
165
+ Exclude<R, RProvided> | RSchema
166
+ >
167
+ <
168
+ A,
169
+ R,
170
+ From extends FieldValues,
171
+ TType extends "one" | "many" | "count" = "many",
172
+ $A = never,
173
+ $B = never,
174
+ $C = never,
175
+ $D = never,
176
+ E extends boolean = false
177
+ >(
178
+ q1: (
179
+ initial: Query<Encoded>
180
+ ) => $A,
181
+ q2: (_: $A) => $B,
182
+ q3: (_: $B) => $C,
183
+ q4: (_: $C) => $D,
184
+ q5: (
185
+ _: $D
186
+ ) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
187
+ ): Effect.Effect<
188
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
189
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
190
+ | (TType extends "count" ? never : S.SchemaError)
191
+ | DatabaseError,
192
+ Exclude<R, RProvided> | RSchema
193
+ >
194
+ <
195
+ A,
196
+ R,
197
+ From extends FieldValues,
198
+ TType extends "one" | "many" | "count" = "many",
199
+ $A = never,
200
+ $B = never,
201
+ $C = never,
202
+ $D = never,
203
+ $E = never,
204
+ E extends boolean = false
205
+ >(
206
+ q1: (
207
+ initial: Query<Encoded>
208
+ ) => $A,
209
+ q2: (_: $A) => $B,
210
+ q3: (_: $B) => $C,
211
+ q4: (_: $C) => $D,
212
+ q5: (_: $D) => $E,
213
+ q6: (_: $E) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
214
+ ): Effect.Effect<
215
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
216
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
217
+ | (TType extends "count" ? never : S.SchemaError)
218
+ | DatabaseError,
219
+ Exclude<R, RProvided> | RSchema
220
+ >
221
+ <
222
+ A,
223
+ R,
224
+ From extends FieldValues,
225
+ TType extends "one" | "many" | "count" = "many",
226
+ $A = never,
227
+ $B = never,
228
+ $C = never,
229
+ $D = never,
230
+ $E = never,
231
+ $F = never,
232
+ E extends boolean = false
233
+ >(
234
+ q1: (
235
+ initial: Query<Encoded>
236
+ ) => $A,
237
+ q2: (_: $A) => $B,
238
+ q3: (_: $B) => $C,
239
+ q4: (_: $C) => $D,
240
+ q5: (_: $D) => $E,
241
+ q6: (_: $E) => $F,
242
+ q7: (_: $F) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
243
+ ): Effect.Effect<
244
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
245
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
246
+ | (TType extends "count" ? never : S.SchemaError)
247
+ | DatabaseError,
248
+ Exclude<R, RProvided> | RSchema
249
+ >
250
+ <
251
+ A,
252
+ R,
253
+ From extends FieldValues,
254
+ TType extends "one" | "many" | "count" = "many",
255
+ $A = never,
256
+ $B = never,
257
+ $C = never,
258
+ $D = never,
259
+ $E = never,
260
+ $F = never,
261
+ $G = never,
262
+ E extends boolean = false
263
+ >(
264
+ q1: (
265
+ initial: Query<Encoded>
266
+ ) => $A,
267
+ q2: (_: $A) => $B,
268
+ q3: (_: $B) => $C,
269
+ q4: (_: $C) => $D,
270
+ q5: (_: $D) => $E,
271
+ q6: (_: $E) => $F,
272
+ q7: (_: $F) => $G,
273
+ q8: (_: $G) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
274
+ ): Effect.Effect<
275
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
276
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
277
+ | (TType extends "count" ? never : S.SchemaError)
278
+ | DatabaseError,
279
+ Exclude<R, RProvided> | RSchema
280
+ >
281
+ <
282
+ A,
283
+ R,
284
+ From extends FieldValues,
285
+ TType extends "one" | "many" | "count" = "many",
286
+ $A = never,
287
+ $B = never,
288
+ $C = never,
289
+ $D = never,
290
+ $E = never,
291
+ $F = never,
292
+ $G = never,
293
+ $H = never,
294
+ E extends boolean = false
295
+ >(
296
+ q1: (
297
+ initial: Query<Encoded>
298
+ ) => $A,
299
+ q2: (_: $A) => $B,
300
+ q3: (_: $B) => $C,
301
+ q4: (_: $C) => $D,
302
+ q5: (_: $D) => $E,
303
+ q6: (_: $E) => $F,
304
+ q7: (_: $F) => $G,
305
+ q8: (_: $G) => $H,
306
+ q9: (_: $H) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
307
+ ): Effect.Effect<
308
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
309
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
310
+ | (TType extends "count" ? never : S.SchemaError)
311
+ | DatabaseError,
312
+ Exclude<R, RProvided> | RSchema
313
+ >
314
+ <
315
+ A,
316
+ R,
317
+ From extends FieldValues,
318
+ TType extends "one" | "many" | "count" = "many",
319
+ $A = never,
320
+ $B = never,
321
+ $C = never,
322
+ $D = never,
323
+ $E = never,
324
+ $F = never,
325
+ $G = never,
326
+ $H = never,
327
+ $I = never,
328
+ E extends boolean = false
329
+ >(
330
+ q1: (
331
+ initial: Query<Encoded>
332
+ ) => $A,
333
+ q2: (_: $A) => $B,
334
+ q3: (_: $B) => $C,
335
+ q4: (_: $C) => $D,
336
+ q5: (_: $D) => $E,
337
+ q6: (_: $E) => $F,
338
+ q7: (_: $F) => $G,
339
+ q8: (_: $G) => $H,
340
+ q9: (_: $H) => $I,
341
+ q10: (_: $I) => QueryProjection<From extends Encoded ? From : never, A, R, TType, E>
342
+ ): Effect.Effect<
343
+ TType extends "many" ? readonly A[] : TType extends "count" ? NonNegativeInt : A,
344
+ | (TType extends "many" ? never : NotFoundError<ItemType>)
345
+ | (TType extends "count" ? never : S.SchemaError)
346
+ | DatabaseError,
347
+ Exclude<R, RProvided> | RSchema
348
+ >
349
+
350
+ // ending with generic query
351
+ <
352
+ R = never,
353
+ TType extends "one" | "many" = "many",
354
+ EncodedRefined extends Encoded = Encoded,
355
+ E extends boolean = false
356
+ >(
357
+ q: (initial: Query<Encoded>) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
358
+ ): Effect.Effect<
359
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
360
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
361
+ Exclude<R, RProvided> | RSchema
362
+ >
363
+ <
364
+ R = never,
365
+ TType extends "one" | "many" = "many",
366
+ EncodedRefined extends Encoded = Encoded,
367
+ $A = never,
368
+ E extends boolean = false
369
+ >(
370
+ q1: (initial: Query<Encoded>) => $A,
371
+ q2: (
372
+ _: $A
373
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
374
+ ): Effect.Effect<
375
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
376
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
377
+ Exclude<R, RProvided> | RSchema
378
+ >
379
+ <
380
+ R = never,
381
+ TType extends "one" | "many" = "many",
382
+ EncodedRefined extends Encoded = Encoded,
383
+ $A = never,
384
+ $B = never,
385
+ E extends boolean = false
386
+ >(
387
+ q1: (initial: Query<Encoded>) => $A,
388
+ q2: (
389
+ _: $A
390
+ ) => $B,
391
+ q3: (
392
+ _: $B
393
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
394
+ ): Effect.Effect<
395
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
396
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
397
+ Exclude<R, RProvided> | RSchema
398
+ >
399
+ <
400
+ R = never,
401
+ TType extends "one" | "many" = "many",
402
+ EncodedRefined extends Encoded = Encoded,
403
+ $A = never,
404
+ $B = never,
405
+ $C = never,
406
+ E extends boolean = false
407
+ >(
408
+ q1: (initial: Query<Encoded>) => $A,
409
+ q2: (_: $A) => $B,
410
+ q3: (_: $B) => $C,
411
+ q4: (
412
+ _: $C
413
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
414
+ ): Effect.Effect<
415
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
416
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
417
+ Exclude<R, RProvided> | RSchema
418
+ >
419
+ <
420
+ R = never,
421
+ TType extends "one" | "many" = "many",
422
+ EncodedRefined extends Encoded = Encoded,
423
+ $A = never,
424
+ $B = never,
425
+ $C = never,
426
+ $D = never,
427
+ E extends boolean = false
428
+ >(
429
+ q1: (initial: Query<Encoded>) => $A,
430
+ q2: (_: $A) => $B,
431
+ q3: (_: $B) => $C,
432
+ q4: (_: $C) => $D,
433
+ q5: (
434
+ _: $D
435
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
436
+ ): Effect.Effect<
437
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
438
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
439
+ Exclude<R, RProvided> | RSchema
440
+ >
441
+ <
442
+ R = never,
443
+ TType extends "one" | "many" = "many",
444
+ EncodedRefined extends Encoded = Encoded,
445
+ $A = never,
446
+ $B = never,
447
+ $C = never,
448
+ $D = never,
449
+ $E = never,
450
+ E extends boolean = false
451
+ >(
452
+ q1: (initial: Query<Encoded>) => $A,
453
+ q2: (_: $A) => $B,
454
+ q3: (_: $B) => $C,
455
+ q4: (_: $C) => $D,
456
+ q5: (_: $D) => $E,
457
+ q6: (
458
+ _: $E
459
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
460
+ ): Effect.Effect<
461
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
462
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
463
+ Exclude<R, RProvided> | RSchema
464
+ >
465
+ <
466
+ R = never,
467
+ TType extends "one" | "many" = "many",
468
+ EncodedRefined extends Encoded = Encoded,
469
+ $A = never,
470
+ $B = never,
471
+ $C = never,
472
+ $D = never,
473
+ $E = never,
474
+ $F = never,
475
+ E extends boolean = false
476
+ >(
477
+ q1: (initial: Query<Encoded>) => $A,
478
+ q2: (_: $A) => $B,
479
+ q3: (_: $B) => $C,
480
+ q4: (_: $C) => $D,
481
+ q5: (_: $D) => $E,
482
+ q6: (_: $E) => $F,
483
+ q7: (
484
+ _: $F
485
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
486
+ ): Effect.Effect<
487
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined> : RefineTHelper<T, EncodedRefined>,
488
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
489
+ Exclude<R, RProvided> | RSchema
490
+ >
491
+ <
492
+ R = never,
493
+ TType extends "one" | "many" = "many",
494
+ EncodedRefined extends Encoded = Encoded,
495
+ $A = never,
496
+ $B = never,
497
+ $C = never,
498
+ $D = never,
499
+ $E = never,
500
+ $F = never,
501
+ $G = never,
502
+ E extends boolean = false
503
+ >(
504
+ q1: (initial: Query<Encoded>) => $A,
505
+ q2: (_: $A) => $B,
506
+ q3: (_: $B) => $C,
507
+ q4: (_: $C) => $D,
508
+ q5: (_: $D) => $E,
509
+ q6: (_: $E) => $F,
510
+ q7: (_: $F) => $G,
511
+ q8: (
512
+ _: $G
513
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
514
+ ): Effect.Effect<
515
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
516
+ : RefineTHelper<T, EncodedRefined>,
517
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
518
+ Exclude<R, RProvided> | RSchema
519
+ >
520
+ <
521
+ R = never,
522
+ TType extends "one" | "many" = "many",
523
+ EncodedRefined extends Encoded = Encoded,
524
+ $A = never,
525
+ $B = never,
526
+ $C = never,
527
+ $D = never,
528
+ $E = never,
529
+ $F = never,
530
+ $G = never,
531
+ $H = never,
532
+ E extends boolean = false
533
+ >(
534
+ q1: (initial: Query<Encoded>) => $A,
535
+ q2: (_: $A) => $B,
536
+ q3: (_: $B) => $C,
537
+ q4: (_: $C) => $D,
538
+ q5: (_: $D) => $E,
539
+ q6: (_: $E) => $F,
540
+ q7: (_: $F) => $G,
541
+ q8: (_: $G) => $H,
542
+ q9: (
543
+ _: $H
544
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
545
+ ): Effect.Effect<
546
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
547
+ : RefineTHelper<T, EncodedRefined>,
548
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
549
+ Exclude<R, RProvided> | RSchema
550
+ >
551
+ <
552
+ R = never,
553
+ TType extends "one" | "many" = "many",
554
+ EncodedRefined extends Encoded = Encoded,
555
+ $A = never,
556
+ $B = never,
557
+ $C = never,
558
+ $D = never,
559
+ $E = never,
560
+ $F = never,
561
+ $G = never,
562
+ $H = never,
563
+ $I = never,
564
+ E extends boolean = false
565
+ >(
566
+ q1: (initial: Query<Encoded>) => $A,
567
+ q2: (_: $A) => $B,
568
+ q3: (_: $B) => $C,
569
+ q4: (_: $C) => $D,
570
+ q5: (_: $D) => $E,
571
+ q6: (_: $E) => $F,
572
+ q7: (_: $F) => $G,
573
+ q8: (_: $G) => $H,
574
+ q9: (_: $H) => $I,
575
+ q10: (
576
+ _: $I
577
+ ) => QAll<Encoded, EncodedRefined, RefineTHelper<T, EncodedRefined>, R, TType, E>
578
+ ): Effect.Effect<
579
+ TType extends "many" ? DistributeQueryIfExclusiveOnArray<E, T, EncodedRefined>
580
+ : RefineTHelper<T, EncodedRefined>,
581
+ (TType extends "many" ? never : NotFoundError<ItemType>) | DatabaseError,
582
+ Exclude<R, RProvided> | RSchema
583
+ >
584
+ }
585
+
586
+ /** @deprecated use query */
587
+ readonly mapped: Mapped<Encoded>
588
+
589
+ /**
590
+ * Validates a random sample of repository items by applying jitM and schema decode.
591
+ * Useful for testing that migrations and schema changes work correctly on existing data.
592
+ */
593
+ readonly validateSample: (options?: {
594
+ /** percentage of items to sample (0.0-1.0), default 0.1 (10%) */
595
+ percentage?: number
596
+ /** optional maximum number of items to sample */
597
+ maxItems?: number
598
+ }) => Effect.Effect<ValidationResult, DatabaseError, RSchema>
599
+ }
600
+
601
+ type DistributeQueryIfExclusiveOnArray<Exclusive extends boolean, T, EncodedRefined> = [Exclusive] extends [true]
602
+ ? T extends any ? RefineTHelper<T, EncodedRefined> extends infer R ? IsNever<R> extends true ? never
603
+ : readonly R[]
604
+ : never
605
+ : never
606
+ : readonly RefineTHelper<T, EncodedRefined>[]
607
+
608
+ type NullableRefined<T, EncodedRefined> = {
609
+ // EncodedRefined may be a union, so if you just keyof you'll get just common keys
610
+ // p.s. NullableRefined is homomorphic in T so it distributes itself over T
611
+ [k in keyof T]: [null] extends [T[k]] ? [null] extends [Extract<EncodedRefined, { [j in k]: any }>[k]] ? T[k]
612
+ : Exclude<T[k], null>
613
+ : T[k]
614
+ }
615
+
616
+ // for DX purposes
617
+ type ShouldRecursiveExtractTagged<T, EncodedRefined> = true extends {
618
+ [k in keyof T]: "_tag" extends keyof T[k]
619
+ ? k extends keyof EncodedRefined ? "_tag" extends keyof EncodedRefined[k] ? true
620
+ : false
621
+ : false
622
+ : false
623
+ }[keyof T] ? true
624
+ : false
625
+
626
+ // support is not 100% but we have to make compromises
627
+ type RecursiveExtractTagged<T, EncodedRefined> = ShouldRecursiveExtractTagged<T, EncodedRefined> extends true ? {
628
+ [k in keyof T]: "_tag" extends keyof T[k]
629
+ ? k extends keyof EncodedRefined ? "_tag" extends keyof EncodedRefined[k] ? ExtractTagged<T[k], EncodedRefined[k]>
630
+ : T[k]
631
+ : T[k]
632
+ : T[k]
633
+ }
634
+ : T
635
+
636
+ type ExtractTagged_<T, EncodedRefined> = EncodedRefined extends { _tag: string }
637
+ ? T extends { _tag: string } ? Extract<T, { _tag: EncodedRefined["_tag"] }>
638
+ : T
639
+ : T
640
+
641
+ type ExtractTagged<T, EncodedRefined> = ExtractTagged_<T, EncodedRefined> extends infer R
642
+ ? RecursiveExtractTagged<RecusiveExtractIded<R, EncodedRefined>, EncodedRefined>
643
+ : never
644
+
645
+ type ShouldRecursiveExtractIded<T, EncodedRefined> = true extends {
646
+ [k in keyof T]: "id" extends keyof T[k] ? k extends keyof EncodedRefined ? "id" extends keyof EncodedRefined[k] ? true
647
+ : false
648
+ : false
649
+ : false
650
+ }[keyof T] ? true
651
+ : false
652
+
653
+ type RecusiveExtractIded<T, EncodedRefined> = ShouldRecursiveExtractIded<T, EncodedRefined> extends true ? {
654
+ [k in keyof T]: "id" extends keyof T[k]
655
+ ? k extends keyof EncodedRefined ? "id" extends keyof EncodedRefined[k] ? ExtractIded<T[k], EncodedRefined[k]>
656
+ : T[k]
657
+ : T[k]
658
+ : T[k]
659
+ }
660
+ : T
661
+
662
+ type ExtractIded_<T, EncodedRefined> = EncodedRefined extends { id: string }
663
+ ? T extends { id: string } ? Extract<T, { id: EncodedRefined["id"] }>
664
+ : T
665
+ : T
666
+
667
+ type ExtractIded<T, EncodedRefined> = ExtractIded_<T, EncodedRefined> extends infer R
668
+ ? RecusiveExtractIded<RecursiveExtractTagged<R, EncodedRefined>, EncodedRefined>
669
+ : never
670
+
671
+ export type RefineTHelper<T, EncodedRefined> = ResolveFirstLevel<
672
+ NullableRefined<
673
+ ExtractIded<ExtractTagged<T, EncodedRefined>, EncodedRefined>,
674
+ EncodedRefined
675
+ >
676
+ >
@@ -0,0 +1,31 @@
1
+ import * as S from "../../Schema.ts"
2
+ import { NonNegativeInt } from "../../Schema.ts"
3
+
4
+ /**
5
+ * Represents a single validation error when decoding a repository item.
6
+ * Contains full context for debugging: raw data, jitM result, and decode error.
7
+ */
8
+ export class ValidationError extends S.Opaque<ValidationError>()(S.Struct({
9
+ /** the id of the item that failed validation */
10
+ id: S.Unknown,
11
+ /** the raw data from the database before jitM */
12
+ rawData: S.Unknown,
13
+ /** the data after applying jitM transformation */
14
+ jitMResult: S.Unknown,
15
+ /** the S.SchemaError from schema decode */
16
+ error: S.Unknown
17
+ })) {}
18
+
19
+ /**
20
+ * Result of validating a sample of repository items.
21
+ */
22
+ export class ValidationResult extends S.Opaque<ValidationResult>()(S.Struct({
23
+ /** total number of items in the repository */
24
+ total: NonNegativeInt,
25
+ /** number of items that were sampled for validation */
26
+ sampled: NonNegativeInt,
27
+ /** number of items that passed validation */
28
+ valid: NonNegativeInt,
29
+ /** list of validation errors with full context */
30
+ errors: S.Array(ValidationError)
31
+ })) {}