effect-app 4.0.0-beta.31 → 4.0.0-beta.310

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 (369) hide show
  1. package/CHANGELOG.md +1486 -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/DataDependencies.d.ts +280 -0
  21. package/dist/DataDependencies.d.ts.map +1 -0
  22. package/dist/DataDependencies.js +112 -0
  23. package/dist/Effect.d.ts +10 -9
  24. package/dist/Effect.d.ts.map +1 -1
  25. package/dist/Effect.js +5 -8
  26. package/dist/Emailer.d.ts +51 -0
  27. package/dist/Emailer.d.ts.map +1 -0
  28. package/dist/Emailer.js +7 -0
  29. package/dist/Function.d.ts.map +1 -1
  30. package/dist/Layer.d.ts +10 -6
  31. package/dist/Layer.d.ts.map +1 -1
  32. package/dist/Layer.js +3 -2
  33. package/dist/Model/Repository/Registry.d.ts +22 -0
  34. package/dist/Model/Repository/Registry.d.ts.map +1 -0
  35. package/dist/Model/Repository/Registry.js +18 -0
  36. package/dist/Model/Repository/dependency.d.ts +6 -0
  37. package/dist/Model/Repository/dependency.d.ts.map +1 -0
  38. package/dist/Model/Repository/dependency.js +29 -0
  39. package/dist/Model/Repository/ext.d.ts +60 -0
  40. package/dist/Model/Repository/ext.d.ts.map +1 -0
  41. package/dist/Model/Repository/ext.js +124 -0
  42. package/dist/Model/Repository/internal/internal.d.ts +68 -0
  43. package/dist/Model/Repository/internal/internal.d.ts.map +1 -0
  44. package/dist/Model/Repository/internal/internal.js +537 -0
  45. package/dist/Model/Repository/legacy.d.ts +21 -0
  46. package/dist/Model/Repository/legacy.d.ts.map +1 -0
  47. package/dist/Model/Repository/legacy.js +2 -0
  48. package/dist/Model/Repository/makeRepo.d.ts +63 -0
  49. package/dist/Model/Repository/makeRepo.d.ts.map +1 -0
  50. package/dist/Model/Repository/makeRepo.js +27 -0
  51. package/dist/Model/Repository/service.d.ts +121 -0
  52. package/dist/Model/Repository/service.d.ts.map +1 -0
  53. package/dist/Model/Repository/service.js +2 -0
  54. package/dist/Model/Repository/validation.d.ts +58 -0
  55. package/dist/Model/Repository/validation.d.ts.map +1 -0
  56. package/dist/Model/Repository/validation.js +32 -0
  57. package/dist/Model/Repository.d.ts +8 -0
  58. package/dist/Model/Repository.d.ts.map +1 -0
  59. package/dist/Model/Repository.js +8 -0
  60. package/dist/Model/dsl.d.ts +33 -0
  61. package/dist/Model/dsl.d.ts.map +1 -0
  62. package/dist/Model/dsl.js +43 -0
  63. package/dist/Model/filter/filterApi.d.ts +30 -0
  64. package/dist/Model/filter/filterApi.d.ts.map +1 -0
  65. package/dist/Model/filter/filterApi.js +2 -0
  66. package/dist/Model/filter/types/errors.d.ts +29 -0
  67. package/dist/Model/filter/types/errors.d.ts.map +1 -0
  68. package/dist/Model/filter/types/errors.js +2 -0
  69. package/dist/Model/filter/types/fields.d.ts +15 -0
  70. package/dist/Model/filter/types/fields.d.ts.map +1 -0
  71. package/dist/Model/filter/types/fields.js +2 -0
  72. package/dist/Model/filter/types/path/common.d.ts +316 -0
  73. package/dist/Model/filter/types/path/common.d.ts.map +1 -0
  74. package/dist/Model/filter/types/path/common.js +2 -0
  75. package/dist/Model/filter/types/path/eager.d.ts +94 -0
  76. package/dist/Model/filter/types/path/eager.d.ts.map +1 -0
  77. package/dist/Model/filter/types/path/eager.js +36 -0
  78. package/dist/Model/filter/types/path/index.d.ts +4 -0
  79. package/dist/Model/filter/types/path/index.d.ts.map +1 -0
  80. package/dist/Model/filter/types/path/index.js +3 -0
  81. package/dist/Model/filter/types/utils.d.ts +79 -0
  82. package/dist/Model/filter/types/utils.d.ts.map +1 -0
  83. package/dist/Model/filter/types/utils.js +2 -0
  84. package/dist/Model/filter/types/validator.d.ts +30 -0
  85. package/dist/Model/filter/types/validator.d.ts.map +1 -0
  86. package/dist/Model/filter/types/validator.js +2 -0
  87. package/dist/Model/filter/types.d.ts +5 -0
  88. package/dist/Model/filter/types.d.ts.map +1 -0
  89. package/dist/Model/filter/types.js +7 -0
  90. package/dist/Model/query/dsl.d.ts +614 -0
  91. package/dist/Model/query/dsl.d.ts.map +1 -0
  92. package/dist/Model/query/dsl.js +376 -0
  93. package/dist/Model/query/new-kid-interpreter.d.ts +132 -0
  94. package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -0
  95. package/dist/Model/query/new-kid-interpreter.js +361 -0
  96. package/dist/Model/query.d.ts +15 -0
  97. package/dist/Model/query.d.ts.map +1 -0
  98. package/dist/Model/query.js +3 -0
  99. package/dist/Model.d.ts +6 -0
  100. package/dist/Model.d.ts.map +1 -0
  101. package/dist/Model.js +6 -0
  102. package/dist/NonEmptySet.d.ts +3 -1
  103. package/dist/NonEmptySet.d.ts.map +1 -1
  104. package/dist/NonEmptySet.js +2 -2
  105. package/dist/Option.d.ts +1 -0
  106. package/dist/Option.d.ts.map +1 -1
  107. package/dist/Option.js +3 -1
  108. package/dist/Pure.d.ts +7 -5
  109. package/dist/Pure.d.ts.map +1 -1
  110. package/dist/Pure.js +7 -4
  111. package/dist/QueueMaker.d.ts +11 -0
  112. package/dist/QueueMaker.d.ts.map +1 -0
  113. package/dist/QueueMaker.js +11 -0
  114. package/dist/RequestContext.d.ts +87 -0
  115. package/dist/RequestContext.d.ts.map +1 -0
  116. package/dist/RequestContext.js +45 -0
  117. package/dist/RequestScopedDependencies.d.ts +21 -0
  118. package/dist/RequestScopedDependencies.d.ts.map +1 -0
  119. package/dist/RequestScopedDependencies.js +16 -0
  120. package/dist/Schema/Class.d.ts +188 -19
  121. package/dist/Schema/Class.d.ts.map +1 -1
  122. package/dist/Schema/Class.js +260 -17
  123. package/dist/Schema/FastCheck.d.ts.map +1 -1
  124. package/dist/Schema/SchemaParser.d.ts +5 -0
  125. package/dist/Schema/SchemaParser.d.ts.map +1 -0
  126. package/dist/Schema/SchemaParser.js +6 -0
  127. package/dist/Schema/SpecialJsonSchema.d.ts +34 -0
  128. package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -0
  129. package/dist/Schema/SpecialJsonSchema.js +118 -0
  130. package/dist/Schema/SpecialOpenApi.d.ts +32 -0
  131. package/dist/Schema/SpecialOpenApi.d.ts.map +1 -0
  132. package/dist/Schema/SpecialOpenApi.js +123 -0
  133. package/dist/Schema/brand.d.ts +4 -2
  134. package/dist/Schema/brand.d.ts.map +1 -1
  135. package/dist/Schema/brand.js +3 -1
  136. package/dist/Schema/email.d.ts.map +1 -1
  137. package/dist/Schema/email.js +7 -4
  138. package/dist/Schema/ext.d.ts +374 -56
  139. package/dist/Schema/ext.d.ts.map +1 -1
  140. package/dist/Schema/ext.js +393 -54
  141. package/dist/Schema/moreStrings.d.ts +82 -36
  142. package/dist/Schema/moreStrings.d.ts.map +1 -1
  143. package/dist/Schema/moreStrings.js +49 -42
  144. package/dist/Schema/numbers.d.ts +34 -21
  145. package/dist/Schema/numbers.d.ts.map +1 -1
  146. package/dist/Schema/numbers.js +55 -12
  147. package/dist/Schema/phoneNumber.d.ts.map +1 -1
  148. package/dist/Schema/phoneNumber.js +6 -3
  149. package/dist/Schema/schema.d.ts +1 -1
  150. package/dist/Schema/schema.d.ts.map +1 -1
  151. package/dist/Schema/schema.js +2 -2
  152. package/dist/Schema/strings.d.ts +18 -4
  153. package/dist/Schema/strings.d.ts.map +1 -1
  154. package/dist/Schema/strings.js +1 -5
  155. package/dist/Schema.d.ts +222 -8
  156. package/dist/Schema.d.ts.map +1 -1
  157. package/dist/Schema.js +191 -12
  158. package/dist/SchemaAST.d.ts +2 -0
  159. package/dist/SchemaAST.d.ts.map +1 -0
  160. package/dist/SchemaAST.js +2 -0
  161. package/dist/Set.d.ts +4 -1
  162. package/dist/Set.d.ts.map +1 -1
  163. package/dist/Set.js +3 -2
  164. package/dist/Store.d.ts +163 -0
  165. package/dist/Store.d.ts.map +1 -0
  166. package/dist/Store.js +113 -0
  167. package/dist/_ext/Array.d.ts +1 -1
  168. package/dist/_ext/Array.d.ts.map +1 -1
  169. package/dist/_ext/Array.js +4 -2
  170. package/dist/_ext/misc.d.ts +4 -1
  171. package/dist/_ext/misc.d.ts.map +1 -1
  172. package/dist/_ext/misc.js +4 -2
  173. package/dist/_ext/ord.ext.d.ts +2 -1
  174. package/dist/_ext/ord.ext.d.ts.map +1 -1
  175. package/dist/_ext/ord.ext.js +2 -2
  176. package/dist/builtin.d.ts +2 -14
  177. package/dist/builtin.d.ts.map +1 -1
  178. package/dist/builtin.js +1 -1
  179. package/dist/client/InvalidationKeys.d.ts +30 -0
  180. package/dist/client/InvalidationKeys.d.ts.map +1 -0
  181. package/dist/client/InvalidationKeys.js +37 -0
  182. package/dist/client/apiClientFactory.d.ts +19 -31
  183. package/dist/client/apiClientFactory.d.ts.map +1 -1
  184. package/dist/client/apiClientFactory.js +155 -35
  185. package/dist/client/clientFor.d.ts +54 -18
  186. package/dist/client/clientFor.d.ts.map +1 -1
  187. package/dist/client/clientFor.js +9 -1
  188. package/dist/client/errors.d.ts +82 -27
  189. package/dist/client/errors.d.ts.map +1 -1
  190. package/dist/client/errors.js +75 -19
  191. package/dist/client/makeClient.d.ts +490 -34
  192. package/dist/client/makeClient.d.ts.map +1 -1
  193. package/dist/client/makeClient.js +62 -36
  194. package/dist/client.d.ts +2 -0
  195. package/dist/client.d.ts.map +1 -1
  196. package/dist/client.js +3 -1
  197. package/dist/faker.d.ts.map +1 -1
  198. package/dist/http/Request.d.ts +1 -1
  199. package/dist/http/Request.d.ts.map +1 -1
  200. package/dist/http/Request.js +2 -2
  201. package/dist/ids.d.ts +42 -14
  202. package/dist/ids.d.ts.map +1 -1
  203. package/dist/ids.js +30 -5
  204. package/dist/index.d.ts +6 -7
  205. package/dist/index.d.ts.map +1 -1
  206. package/dist/index.js +8 -8
  207. package/dist/middleware.d.ts +13 -7
  208. package/dist/middleware.d.ts.map +1 -1
  209. package/dist/middleware.js +14 -8
  210. package/dist/rpc/Invalidation.d.ts +2276 -0
  211. package/dist/rpc/Invalidation.d.ts.map +1 -0
  212. package/dist/rpc/Invalidation.js +178 -0
  213. package/dist/rpc/MiddlewareMaker.d.ts +11 -7
  214. package/dist/rpc/MiddlewareMaker.d.ts.map +1 -1
  215. package/dist/rpc/MiddlewareMaker.js +59 -38
  216. package/dist/rpc/RpcContextMap.d.ts +3 -3
  217. package/dist/rpc/RpcContextMap.d.ts.map +1 -1
  218. package/dist/rpc/RpcContextMap.js +4 -4
  219. package/dist/rpc/RpcMiddleware.d.ts +14 -10
  220. package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
  221. package/dist/rpc/RpcMiddleware.js +1 -1
  222. package/dist/rpc.d.ts +1 -1
  223. package/dist/rpc.d.ts.map +1 -1
  224. package/dist/rpc.js +2 -2
  225. package/dist/runtime.d.ts +19 -0
  226. package/dist/runtime.d.ts.map +1 -0
  227. package/dist/runtime.js +40 -0
  228. package/dist/setupRequest.d.ts +20 -0
  229. package/dist/setupRequest.d.ts.map +1 -0
  230. package/dist/setupRequest.js +72 -0
  231. package/dist/toast.d.ts +51 -0
  232. package/dist/toast.d.ts.map +1 -0
  233. package/dist/toast.js +34 -0
  234. package/dist/transform.d.ts +1 -1
  235. package/dist/transform.d.ts.map +1 -1
  236. package/dist/transform.js +4 -5
  237. package/dist/utils/effectify.d.ts +1 -1
  238. package/dist/utils/effectify.d.ts.map +1 -1
  239. package/dist/utils/effectify.js +2 -2
  240. package/dist/utils/extend.d.ts.map +1 -1
  241. package/dist/utils/gen.d.ts +4 -4
  242. package/dist/utils/gen.d.ts.map +1 -1
  243. package/dist/utils/logLevel.d.ts +2 -2
  244. package/dist/utils/logLevel.d.ts.map +1 -1
  245. package/dist/utils/logger.d.ts +4 -3
  246. package/dist/utils/logger.d.ts.map +1 -1
  247. package/dist/utils/logger.js +4 -4
  248. package/dist/utils.d.ts +34 -39
  249. package/dist/utils.d.ts.map +1 -1
  250. package/dist/utils.js +33 -37
  251. package/dist/validation/validators.d.ts.map +1 -1
  252. package/dist/validation.d.ts.map +1 -1
  253. package/dist/withToast.d.ts +30 -0
  254. package/dist/withToast.d.ts.map +1 -0
  255. package/dist/withToast.js +64 -0
  256. package/package.json +27 -251
  257. package/src/Array.ts +5 -5
  258. package/src/Chunk.ts +3 -3
  259. package/src/Config/SecretURL.ts +6 -3
  260. package/src/Config/internal/configSecretURL.ts +2 -2
  261. package/src/Config.ts +7 -0
  262. package/src/ConfigProvider.ts +5 -0
  263. package/src/{ServiceMap.ts → Context.ts} +56 -63
  264. package/src/DataDependencies.ts +171 -0
  265. package/src/Effect.ts +14 -16
  266. package/src/Emailer.ts +51 -0
  267. package/src/Inputify.type.ts +1 -1
  268. package/src/Layer.ts +11 -7
  269. package/src/Model/Repository/Registry.ts +35 -0
  270. package/src/Model/Repository/dependency.ts +32 -0
  271. package/src/Model/Repository/ext.ts +374 -0
  272. package/src/Model/Repository/internal/internal.ts +905 -0
  273. package/src/Model/Repository/legacy.ts +29 -0
  274. package/src/Model/Repository/makeRepo.ts +156 -0
  275. package/src/Model/Repository/service.ts +676 -0
  276. package/src/Model/Repository/validation.ts +31 -0
  277. package/src/Model/Repository.ts +7 -0
  278. package/src/Model/dsl.ts +129 -0
  279. package/src/Model/filter/filterApi.ts +60 -0
  280. package/src/Model/filter/types/errors.ts +47 -0
  281. package/src/Model/filter/types/fields.ts +50 -0
  282. package/src/Model/filter/types/path/common.ts +404 -0
  283. package/src/Model/filter/types/path/eager.ts +329 -0
  284. package/src/Model/filter/types/path/index.ts +4 -0
  285. package/src/Model/filter/types/utils.ts +128 -0
  286. package/src/Model/filter/types/validator.ts +46 -0
  287. package/src/Model/filter/types.ts +6 -0
  288. package/src/Model/query/dsl.ts +2911 -0
  289. package/src/Model/query/new-kid-interpreter.ts +526 -0
  290. package/src/Model/query.ts +13 -0
  291. package/src/Model.ts +5 -0
  292. package/src/NonEmptySet.ts +6 -4
  293. package/src/Option.ts +2 -0
  294. package/src/Pure.ts +10 -7
  295. package/src/QueueMaker.ts +11 -0
  296. package/src/RequestContext.ts +48 -0
  297. package/src/RequestScopedDependencies.ts +45 -0
  298. package/src/Schema/Class.ts +633 -59
  299. package/src/Schema/SchemaParser.ts +12 -0
  300. package/src/Schema/SpecialJsonSchema.ts +139 -0
  301. package/src/Schema/SpecialOpenApi.ts +130 -0
  302. package/src/Schema/brand.ts +22 -2
  303. package/src/Schema/email.ts +9 -4
  304. package/src/Schema/ext.ts +517 -93
  305. package/src/Schema/moreStrings.ts +147 -68
  306. package/src/Schema/numbers.ts +97 -28
  307. package/src/Schema/phoneNumber.ts +9 -5
  308. package/src/Schema/schema.ts +1 -1
  309. package/src/Schema/strings.ts +23 -14
  310. package/src/Schema.ts +397 -26
  311. package/src/SchemaAST.ts +1 -0
  312. package/src/Set.ts +6 -2
  313. package/src/Store.ts +273 -0
  314. package/src/_ext/Array.ts +4 -2
  315. package/src/_ext/misc.ts +4 -1
  316. package/src/_ext/ord.ext.ts +2 -1
  317. package/src/builtin-json.d.ts +24 -0
  318. package/src/builtin.ts +16 -21
  319. package/src/client/InvalidationKeys.ts +55 -0
  320. package/src/client/apiClientFactory.ts +299 -134
  321. package/src/client/clientFor.ts +107 -34
  322. package/src/client/errors.ts +100 -29
  323. package/src/client/makeClient.ts +593 -92
  324. package/src/client.ts +6 -4
  325. package/src/http/Request.ts +3 -3
  326. package/src/http.ts +1 -1
  327. package/src/ids.ts +33 -6
  328. package/src/index.ts +20 -23
  329. package/src/middleware.ts +13 -9
  330. package/src/rpc/Invalidation.ts +278 -0
  331. package/src/rpc/MiddlewareMaker.ts +88 -80
  332. package/src/rpc/README.md +2 -2
  333. package/src/rpc/RpcContextMap.ts +7 -6
  334. package/src/rpc/RpcMiddleware.ts +19 -13
  335. package/src/rpc.ts +4 -4
  336. package/src/runtime.ts +56 -0
  337. package/src/setupRequest.ts +138 -0
  338. package/src/toast.ts +54 -0
  339. package/src/transform.ts +4 -4
  340. package/src/utils/effectify.ts +1 -1
  341. package/src/utils/gen.ts +8 -8
  342. package/src/utils/logLevel.ts +1 -1
  343. package/src/utils/logger.ts +4 -3
  344. package/src/utils.ts +85 -158
  345. package/src/validation.ts +2 -2
  346. package/src/withToast.ts +133 -0
  347. package/test/dist/rpc.test.d.ts.map +1 -1
  348. package/test/dist/rpcMiddlewareContext.test.d.ts.map +1 -0
  349. package/test/dist/secretURL.test.d.ts.map +1 -0
  350. package/test/dist/special.test.d.ts.map +1 -0
  351. package/test/moreStrings.test.ts +1 -1
  352. package/test/rpc.test.ts +42 -13
  353. package/test/rpcMiddlewareContext.test.ts +63 -0
  354. package/test/schema.test.ts +504 -30
  355. package/test/secretURL.test.ts +160 -0
  356. package/test/special.test.ts +1258 -0
  357. package/test/utils.test.ts +7 -7
  358. package/tsconfig.base.json +6 -5
  359. package/tsconfig.json +9 -2
  360. package/tsconfig.src.json +29 -29
  361. package/tsconfig.test.json +2 -2
  362. package/dist/Operations.d.ts +0 -123
  363. package/dist/Operations.d.ts.map +0 -1
  364. package/dist/Operations.js +0 -29
  365. package/dist/ServiceMap.d.ts.map +0 -1
  366. package/dist/ServiceMap.js +0 -91
  367. package/eslint.config.mjs +0 -26
  368. package/src/Operations.ts +0 -55
  369. package/tsconfig.json.bak +0 -12
@@ -1,80 +1,371 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/no-unsafe-return */
3
- import { Effect, Option, pipe, Schema, SchemaGetter, SchemaIssue, SchemaTransformation, ServiceMap } from "effect";
3
+ /**
4
+ * # `withConstructorDefault` policy
5
+ *
6
+ * The `withConstructorDefault` properties exported throughout this module
7
+ * (and from `numbers.ts`, `moreStrings.ts`, `ids.ts`) attach a default value
8
+ * that is **only** applied during construction — i.e. when the field is
9
+ * omitted from the input to a Schema constructor / `.make(...)` call.
10
+ *
11
+ * They are **NOT** applied during `decode` (JSON, database rows, RPC payloads,
12
+ * etc.). Decoding a payload with a missing field will still fail with a parse
13
+ * error, exactly as if the default were not present.
14
+ *
15
+ * Concretely this means `withConstructorDefault` MUST NOT be relied on as a
16
+ * just-in-time migration mechanism for database fields. If a stored record is
17
+ * missing a newly added field, the constructor default will not fill it in on
18
+ * read — decoding will fail.
19
+ *
20
+ * ## Don't reach for `withDecodingDefault*` either
21
+ *
22
+ * The sibling `withDecodingDefaultType` (and `withDecodingDefault`) extensions
23
+ * exist, but they are discouraged for migrating persisted data. A missing
24
+ * field in a stored record is just as likely to be data corruption as it is
25
+ * an old-shape document; silently substituting a default hides the problem
26
+ * and can poison downstream aggregates.
27
+ *
28
+ * Prefer an **explicit, preferably versioned** migration of database data
29
+ * (a schema-version field, a one-shot backfill, or a transform on read that
30
+ * is gated on an explicit version marker) over shoving missing fields under
31
+ * the rug with a decode-time default.
32
+ */
33
+ import * as Config from "effect/Config";
34
+ import * as Effect from "effect/Effect";
35
+ import { pipe } from "effect/Function";
36
+ import * as Function from "effect/Function";
37
+ import * as Option from "effect/Option";
4
38
  import * as S from "effect/Schema";
39
+ import { isDateValid } from "effect/Schema";
40
+ import * as SchemaIssue from "effect/SchemaIssue";
41
+ import * as SchemaTransformation from "effect/SchemaTransformation";
42
+ import * as Struct from "effect/Struct";
43
+ import * as Context from "../Context.js";
44
+ import * as SchemaAST from "../SchemaAST.js";
5
45
  import { extendM, typedKeysOf } from "../utils.js";
6
- // TODO: v4 migration — withConstructorDefault signature changed, propertySignature removed
7
- // Constraint relaxed from `Self extends S.Top & S.WithoutConstructorDefault` to `Self extends S.Top`
8
- // because `.pipe()` widens the schema type to `Top` which doesn't satisfy `WithoutConstructorDefault`.
9
- // The narrowing assertions below are safe — we're asserting "this schema hasn't had a default applied yet".
10
- export const withDefaultConstructor = (makeDefault) => (self) => {
11
- return S.withConstructorDefault(() => Option.some(makeDefault()))(self);
46
+ const concurrencySetting = Effect.runSync(Config
47
+ .literal("unbounded", "SCHEMA_CONCURRENCY")
48
+ .pipe(Config.orElse(() => Config.number("SCHEMA_CONCURRENCY")), Config.option));
49
+ export const DefaultParseOptions = {
50
+ concurrency: Option.getOrElse(concurrencySetting, () => "unbounded")
12
51
  };
13
- // TODO: v4 migration - Date is no longer by default encoded to string.
14
- const DateFromString = Schema.Date.pipe(Schema.encodeTo(Schema.String, {
15
- decode: SchemaGetter.Date(),
16
- encode: SchemaGetter.transform((_) => _.toISOString())
17
- }));
18
52
  /**
19
- * Like the default Schema `Date` but from String with `withDefault` => now
53
+ * Parse-options annotation used on schema constructors for decode paths where callers
54
+ * cannot currently pass parse options (notably some RPC / HttpApi integration paths).
55
+ *
56
+ * Keep this annotation in place so those framework-managed decodes still run with
57
+ * unbounded concurrency by default.
20
58
  */
21
- export const Date = Object.assign(DateFromString, {
22
- withDefault: DateFromString.pipe(withDefaultConstructor(() => new global.Date()))
59
+ export const concurrencyUnbounded = { parseOptions: DefaultParseOptions };
60
+ export const withDefaultParseOptions = (decode, defaultParseOptions = DefaultParseOptions) => ((schema) => {
61
+ const run = decode(schema);
62
+ return (input, options) => run(input, { ...defaultParseOptions, ...options });
63
+ });
64
+ // TODO: v4 migration - Date is no longer by default encoded to string.
65
+ const DateString = S.String.annotate({
66
+ identifier: "DateOrInvalid",
67
+ description: "an ISO 8601 date string that will be decoded as a Date (may be invalid)",
68
+ format: "date-time"
23
69
  });
24
70
  /**
25
- * Like the default Schema `Boolean` but with `withDefault` => false
71
+ * A transformation schema that parses an ISO 8601 string into a `Date`.
72
+ *
73
+ * Decoding:
74
+ * - A `string` is decoded as a `Date`.
75
+ *
76
+ * Encoding:
77
+ * - A `Date` is encoded as a `string`.
78
+ *
79
+ * @since 4.0.0
26
80
  */
81
+ export const DateFromString = DateString.pipe(S.decodeTo(S.Date, SchemaTransformation.dateFromString));
82
+ /** Like the default Schema `Date` but from String, with default helpers. */
83
+ export const Date = extendM(DateFromString, (s) => ({
84
+ /**
85
+ * Construction-only default `new Date()`. Applied only when the field is
86
+ * omitted from `.make(...)` input. NOT applied during decode — cannot be
87
+ * used to JIT-migrate database fields. See file-level note.
88
+ */
89
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => new global.Date()))),
90
+ /**
91
+ * Decode-time default `new Date()`. **Discouraged for persisted data:** a
92
+ * missing field may be data corruption, not an old-shape document; silently
93
+ * substituting `new Date()` hides the problem. Prefer an explicit,
94
+ * preferably versioned migration over a decode-time fallback. See
95
+ * file-level note.
96
+ */
97
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => new global.Date())))
98
+ }));
99
+ const DateValidString = S.String.annotate({
100
+ identifier: "Date",
101
+ description: "a valid ISO 8601 date string that will be decoded as a Date",
102
+ format: "date-time"
103
+ });
104
+ const DateValidFromString = DateValidString
105
+ .pipe(S.decodeTo(S.Date, SchemaTransformation.dateFromString))
106
+ .check(isDateValid());
107
+ /** Like the default Schema `DateValid` but from String, with default helpers. */
108
+ export const DateValid = extendM(DateValidFromString, (s) => ({
109
+ /**
110
+ * Construction-only default `new Date()`. Applied only when the field is
111
+ * omitted from `.make(...)` input. NOT applied during decode — cannot be
112
+ * used to JIT-migrate database fields. See file-level note.
113
+ */
114
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => new global.Date()))),
115
+ /**
116
+ * Decode-time default `new Date()`. **Discouraged for persisted data:** a
117
+ * missing field may be data corruption, not an old-shape document; silently
118
+ * substituting `new Date()` hides the problem. Prefer an explicit,
119
+ * preferably versioned migration over a decode-time fallback. See
120
+ * file-level note.
121
+ */
122
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => new global.Date())))
123
+ }));
124
+ /** Like the default Schema `Boolean` but with default helpers. */
27
125
  export const Boolean = Object.assign(S.Boolean, {
28
- withDefault: S.Boolean.pipe(withDefaultConstructor(() => false))
126
+ /**
127
+ * Construction-only default `false`. Applied only when the field is
128
+ * omitted from `.make(...)` input. NOT applied during decode — cannot be
129
+ * used to JIT-migrate database fields. See file-level note.
130
+ */
131
+ withConstructorDefault: S.Boolean.pipe(S.withConstructorDefault(Effect.succeed(false))),
132
+ /**
133
+ * Decode-time default `false`. **Discouraged for persisted data:** a
134
+ * missing field may be data corruption, not an old-shape document; silently
135
+ * substituting `false` hides the problem. Prefer an explicit, preferably
136
+ * versioned migration over a decode-time fallback. See file-level note.
137
+ */
138
+ withDecodingDefaultType: S.Boolean.pipe(S.withDecodingDefaultType(Effect.succeed(false)))
29
139
  });
30
140
  /**
31
- * Like the default Schema `Number` but with `withDefault` => 0
141
+ * You probably want to use `Finite` instead of this. Like the default Schema
142
+ * `Number` but with default helpers.
32
143
  */
33
- export const Number = Object.assign(S.Number, { withDefault: S.Number.pipe(withDefaultConstructor(() => 0)) });
34
- /**
35
- * Like the default Schema `Literal` but with `withDefault` => literals[0]
36
- */
37
- export const Literal = (...literals) => pipe(S.Literals(literals), (s) => Object.assign(s, {
144
+ export const Number = Object.assign(S.Number, {
145
+ /**
146
+ * Construction-only default `0`. Applied only when the field is omitted
147
+ * from `.make(...)` input. NOT applied during decode — cannot be used to
148
+ * JIT-migrate database fields. See file-level note.
149
+ */
150
+ withConstructorDefault: S.Number.pipe(S.withConstructorDefault(Effect.succeed(0))),
151
+ /**
152
+ * Decode-time default `0`. **Discouraged for persisted data:** a missing
153
+ * field may be data corruption, not an old-shape document; silently
154
+ * substituting `0` hides the problem. Prefer an explicit, preferably
155
+ * versioned migration over a decode-time fallback. See file-level note.
156
+ */
157
+ withDecodingDefaultType: S.Number.pipe(S.withDecodingDefaultType(Effect.succeed(0)))
158
+ });
159
+ /** Like the default Schema `Finite` but with default helpers. */
160
+ export const Finite = Object.assign(S.Finite, {
161
+ /**
162
+ * Construction-only default `0`. Applied only when the field is omitted
163
+ * from `.make(...)` input. NOT applied during decode — cannot be used to
164
+ * JIT-migrate database fields. See file-level note.
165
+ */
166
+ withConstructorDefault: S.Finite.pipe(S.withConstructorDefault(Effect.succeed(0))),
167
+ /**
168
+ * Decode-time default `0`. **Discouraged for persisted data:** a missing
169
+ * field may be data corruption, not an old-shape document; silently
170
+ * substituting `0` hides the problem. Prefer an explicit, preferably
171
+ * versioned migration over a decode-time fallback. See file-level note.
172
+ */
173
+ withDecodingDefaultType: S.Finite.pipe(S.withDecodingDefaultType(Effect.succeed(0)))
174
+ });
175
+ /** Like the default Schema `Literals` but with default helpers. Default value is `literals[0]`. */
176
+ export const Literals = (literals) => pipe(S.Literals(literals), (s) => Object.assign(s, {
177
+ /** Override the default literal value used by `withConstructorDefault` / `withDecodingDefaultType`. */
38
178
  changeDefault: (a) => {
39
179
  return Object.assign(S.Literals(literals), {
40
180
  Default: a,
41
- withDefault: s.pipe(withDefaultConstructor(() => a))
181
+ /**
182
+ * Construction-only default. Applied only when the field is
183
+ * omitted from `.make(...)` input. NOT applied during decode —
184
+ * cannot be used to JIT-migrate database fields. See file-level
185
+ * note.
186
+ */
187
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.succeed(a))),
188
+ /**
189
+ * Decode-time default. **Discouraged for persisted data:** a
190
+ * missing field may be data corruption, not an old-shape
191
+ * document; silently substituting hides the problem. Prefer an
192
+ * explicit, preferably versioned migration over a decode-time
193
+ * fallback. See file-level note.
194
+ */
195
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.succeed(a)))
42
196
  }); // todo: copy annotations from original?
43
197
  },
198
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- load-bearing: Object.assign widens the field type without it, breaking `expectTypeOf(l.Default).toEqualTypeOf<"a">()` in tests
44
199
  Default: literals[0],
45
- withDefault: s.pipe(withDefaultConstructor(() => literals[0]))
200
+ /**
201
+ * Construction-only default `literals[0]`. Applied only when the
202
+ * field is omitted from `.make(...)` input. NOT applied during
203
+ * decode — cannot be used to JIT-migrate database fields. See
204
+ * file-level note.
205
+ */
206
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.succeed(literals[0]))),
207
+ /**
208
+ * Decode-time default `literals[0]`. **Discouraged for persisted
209
+ * data:** a missing field may be data corruption, not an old-shape
210
+ * document; silently substituting hides the problem. Prefer an
211
+ * explicit, preferably versioned migration over a decode-time
212
+ * fallback. See file-level note.
213
+ */
214
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.succeed(literals[0])))
46
215
  }));
47
- /**
48
- * Like the default Schema `Array` but with `withDefault` => []
49
- */
216
+ /** Like the default Schema `Array` but with default helpers. */
50
217
  export function Array(value) {
51
- return pipe(S.Array(value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => [])) }));
218
+ return pipe(S.Array(value).annotate(concurrencyUnbounded), (s) => Object.assign(s, {
219
+ /**
220
+ * Construction-only default `[]`. Applied only when the field is
221
+ * omitted from `.make(...)` input. NOT applied during decode —
222
+ * cannot be used to JIT-migrate database fields. See file-level
223
+ * note.
224
+ */
225
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => []))),
226
+ /**
227
+ * Decode-time default `[]`. **Discouraged for persisted data:** a
228
+ * missing field may be data corruption, not an old-shape document;
229
+ * silently substituting `[]` hides the problem. Prefer an explicit,
230
+ * preferably versioned migration over a decode-time fallback. See
231
+ * file-level note.
232
+ */
233
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => [])))
234
+ }));
52
235
  }
53
236
  /**
54
- * Like the default Schema `Map` but with `withDefault` => []
237
+ * An annotated `S.Array` of unique items that decodes to a `ReadonlySet`.
55
238
  */
56
- function Map_(input) {
57
- return pipe(S.ReadonlyMap(input.key, input.value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new global.Map())) }));
58
- }
59
- export { Map_ as Map };
239
+ export const ReadonlySetFromArray = (value) => {
240
+ const from = S
241
+ .Array(value)
242
+ .annotate({ ...concurrencyUnbounded, expected: "an array of unique items that will be decoded as a ReadonlySet" });
243
+ const to = S.instanceOf(Set);
244
+ const schema = from.pipe(S.decodeTo(to, SchemaTransformation.transform({
245
+ decode: (arr) => new Set(arr),
246
+ encode: (set) => [...set]
247
+ })));
248
+ return schema;
249
+ };
60
250
  /**
61
- * Like the default Schema `ReadonlySet` but with `withDefault` => new Set()
251
+ * An annotated `S.Array` of key-value tuples that decodes to a `ReadonlyMap`.
62
252
  */
63
- export const ReadonlySet = (value) => pipe(S.ReadonlySet(value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Set())) }));
253
+ export const ReadonlyMapFromArray = (pair) => {
254
+ const from = S
255
+ .Array(S.Tuple([pair.key, pair.value]))
256
+ .annotate({
257
+ ...concurrencyUnbounded,
258
+ expected: "an array of key-value tuples that will be decoded as a ReadonlyMap"
259
+ });
260
+ const to = S.instanceOf(Map);
261
+ const schema = from.pipe(S.decodeTo(to, SchemaTransformation.transform({
262
+ decode: (arr) => new Map(arr),
263
+ encode: (map) => [...map.entries()] // fu
264
+ })));
265
+ return schema;
266
+ };
267
+ /** Like the default Schema `ReadonlySet` but from Array, with default helpers. */
268
+ export const ReadonlySet = (value) => pipe(ReadonlySetFromArray(value), (s) => Object.assign(s, {
269
+ /**
270
+ * Construction-only default `new Set()`. Applied only when the field
271
+ * is omitted from `.make(...)` input. NOT applied during decode —
272
+ * cannot be used to JIT-migrate database fields. See file-level
273
+ * note.
274
+ */
275
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => new Set()))),
276
+ /**
277
+ * Decode-time default `new Set()`. **Discouraged for persisted
278
+ * data:** a missing field may be data corruption, not an old-shape
279
+ * document; silently substituting an empty set hides the problem.
280
+ * Prefer an explicit, preferably versioned migration over a
281
+ * decode-time fallback. See file-level note.
282
+ */
283
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => new Set())))
284
+ }));
285
+ /** Like the default Schema `ReadonlyMap` but from Array, with default helpers. */
286
+ export const ReadonlyMap = (pair) => pipe(ReadonlyMapFromArray(pair), (s) => Object.assign(s, {
287
+ /**
288
+ * Construction-only default `new Map()`. Applied only when the field
289
+ * is omitted from `.make(...)` input. NOT applied during decode —
290
+ * cannot be used to JIT-migrate database fields. See file-level
291
+ * note.
292
+ */
293
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => new Map()))),
294
+ /**
295
+ * Decode-time default `new Map()`. **Discouraged for persisted
296
+ * data:** a missing field may be data corruption, not an old-shape
297
+ * document; silently substituting an empty map hides the problem.
298
+ * Prefer an explicit, preferably versioned migration over a
299
+ * decode-time fallback. See file-level note.
300
+ */
301
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => new Map())))
302
+ }));
303
+ /** Like the default Schema `NullOr` but with default helpers. */
304
+ export const NullOr = (self) => pipe(S.NullOr(self), (s) => Object.assign(s, {
305
+ /**
306
+ * Construction-only default `null`. Applied only when the field is
307
+ * omitted from `.make(...)` input. NOT applied during decode —
308
+ * cannot be used to JIT-migrate database fields. See file-level
309
+ * note.
310
+ */
311
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.succeed(null))),
312
+ /**
313
+ * Decode-time default `null`. **Discouraged for persisted data:** a
314
+ * missing field may be data corruption, not an old-shape document;
315
+ * silently substituting `null` hides the problem. Prefer an
316
+ * explicit, preferably versioned migration over a decode-time
317
+ * fallback. See file-level note.
318
+ */
319
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.succeed(null)))
320
+ }));
321
+ /**
322
+ * Attach a `withConstructorDefault` of `new Date()` to any schema.
323
+ *
324
+ * **Construction-only.** Applied only when the field is omitted from
325
+ * `.make(...)` input. NOT applied during decode — cannot be used to
326
+ * JIT-migrate database fields. See file-level note.
327
+ */
328
+ export const defaultDate = (schema) => schema.pipe(S.withConstructorDefault(Effect.sync(() => new global.Date())));
329
+ /**
330
+ * Attach a `withConstructorDefault` of `false` to any schema.
331
+ *
332
+ * **Construction-only.** Applied only when the field is omitted from
333
+ * `.make(...)` input. NOT applied during decode — cannot be used to
334
+ * JIT-migrate database fields. See file-level note.
335
+ */
336
+ export const defaultBool = (schema) => schema.pipe(S.withConstructorDefault(Effect.succeed(false)));
337
+ /**
338
+ * Attach a `withConstructorDefault` of `null` to any schema.
339
+ *
340
+ * **Construction-only.** Applied only when the field is omitted from
341
+ * `.make(...)` input. NOT applied during decode — cannot be used to
342
+ * JIT-migrate database fields. See file-level note.
343
+ */
344
+ export const defaultNullable = (schema) => schema.pipe(S.withConstructorDefault(Effect.succeed(null)));
64
345
  /**
65
- * Like the default Schema `ReadonlyMap` but with `withDefault` => new Map()
346
+ * Attach a `withConstructorDefault` of `[]` to any schema.
347
+ *
348
+ * **Construction-only.** Applied only when the field is omitted from
349
+ * `.make(...)` input. NOT applied during decode — cannot be used to
350
+ * JIT-migrate database fields. See file-level note.
66
351
  */
67
- export const ReadonlyMap = (pair) => pipe(S.ReadonlyMap(pair.key, pair.value), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => new Map())) }));
352
+ export const defaultArray = (schema) => schema.pipe(S.withConstructorDefault(Effect.sync(() => [])));
68
353
  /**
69
- * Like the default Schema `NullOr` but with `withDefault` => null
354
+ * Attach a `withConstructorDefault` of `new Map()` to any schema.
355
+ *
356
+ * **Construction-only.** Applied only when the field is omitted from
357
+ * `.make(...)` input. NOT applied during decode — cannot be used to
358
+ * JIT-migrate database fields. See file-level note.
70
359
  */
71
- export const NullOr = (self) => pipe(S.NullOr(self), (s) => Object.assign(s, { withDefault: s.pipe(withDefaultConstructor(() => null)) }));
72
- export const defaultDate = (schema) => schema.pipe(withDefaultConstructor(() => new global.Date()));
73
- export const defaultBool = (schema) => schema.pipe(withDefaultConstructor(() => false));
74
- export const defaultNullable = (schema) => schema.pipe(withDefaultConstructor(() => null));
75
- export const defaultArray = (schema) => schema.pipe(withDefaultConstructor(() => []));
76
- export const defaultMap = (schema) => schema.pipe(withDefaultConstructor(() => new Map()));
77
- export const defaultSet = (schema) => schema.pipe(withDefaultConstructor(() => new Set()));
360
+ export const defaultMap = (schema) => schema.pipe(S.withConstructorDefault(Effect.sync(() => new Map())));
361
+ /**
362
+ * Attach a `withConstructorDefault` of `new Set()` to any schema.
363
+ *
364
+ * **Construction-only.** Applied only when the field is omitted from
365
+ * `.make(...)` input. NOT applied during decode — cannot be used to
366
+ * JIT-migrate database fields. See file-level note.
367
+ */
368
+ export const defaultSet = (schema) => schema.pipe(S.withConstructorDefault(Effect.sync(() => new Set())));
78
369
  export const withDefaultMake = (s) => {
79
370
  const a = Object.assign(S.decodeSync(s), s);
80
371
  Object.setPrototypeOf(a, s);
@@ -93,7 +384,23 @@ export const withDefaultMake = (s) => {
93
384
  // }[keyof P[B.BrandTypeId]]
94
385
  // export type UnionToIntersection3<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I
95
386
  // : never
96
- export const inputDate = extendM(S.Union([S.DateValid, S.Date]), (s) => ({ withDefault: s.pipe(withDefaultConstructor(() => new globalThis.Date())) }));
387
+ /** Union of `DateValid` and `Date`, with default helpers. */
388
+ export const inputDate = extendM(S.Union([S.DateValid, Date]), (s) => ({
389
+ /**
390
+ * Construction-only default `new Date()`. Applied only when the field is
391
+ * omitted from `.make(...)` input. NOT applied during decode — cannot be
392
+ * used to JIT-migrate database fields. See file-level note.
393
+ */
394
+ withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => new globalThis.Date()))),
395
+ /**
396
+ * Decode-time default `new Date()`. **Discouraged for persisted data:** a
397
+ * missing field may be data corruption, not an old-shape document;
398
+ * silently substituting `new Date()` hides the problem. Prefer an
399
+ * explicit, preferably versioned migration over a decode-time fallback.
400
+ * See file-level note.
401
+ */
402
+ withDecodingDefaultType: s.pipe(S.withDecodingDefaultType(Effect.sync(() => new globalThis.Date())))
403
+ }));
97
404
  // TODO: v4 migration — makeOpt used internal PropertySignature types that are removed in v4
98
405
  // Simplified to use v4's S.optional / S.optionalKey directly
99
406
  export function makeOptional(t) {
@@ -102,9 +409,41 @@ export function makeOptional(t) {
102
409
  return prev;
103
410
  }, {});
104
411
  }
412
+ // `replaceContext` is `@internal` in `effect/SchemaAST` (stripped from its public types, though the
413
+ // export itself still ships in the compiled JS). Effect's own `withConstructorDefault` goes through the
414
+ // same function internally, so this mirrors an existing code path rather than reaching for something
415
+ // novel, but it's still an internal API that could move or disappear without a signal.
416
+ const SchemaASTInternal = SchemaAST;
417
+ /**
418
+ * A `Struct.Lambda` that removes a field's `withConstructorDefault`, if any.
419
+ * Compose with `Struct.pick`/`Struct.omit` via `Struct.map` to derive a
420
+ * partial-update schema from a "create" schema without inheriting defaults
421
+ * that would resurrect omitted fields in `.make(...)` output:
422
+ *
423
+ * ```ts
424
+ * import { flow } from "effect/Function"
425
+ * import * as Struct from "effect/Struct"
426
+ * import * as S from "effect-app/Schema"
427
+ *
428
+ * const Person = S.Struct({
429
+ * id: S.String,
430
+ * name: S.String.pipe(S.optionalKey, S.withConstructorDefault(() => ""))
431
+ * })
432
+ *
433
+ * const UpdatePerson = Person.mapFields(
434
+ * flow(Struct.omit(["id"]), Struct.map(S.dropConstructorDefault))
435
+ * )
436
+ * ```
437
+ */
438
+ export const dropConstructorDefault = Struct.lambda((schema) => {
439
+ const context = schema.ast.context;
440
+ if (!context?.defaultValue)
441
+ return schema;
442
+ return schema.rebuild(SchemaASTInternal.replaceContext(schema.ast, new SchemaAST.Context(context.isOptional, context.isMutable, undefined, context.annotations)));
443
+ });
105
444
  export function makeExactOptional(t) {
106
445
  return typedKeysOf(t).reduce((prev, cur) => {
107
- prev[cur] = S.optionalKey(t[cur]);
446
+ prev[cur] = dropConstructorDefault(S.optionalKey(t[cur]));
108
447
  return prev;
109
448
  }, {});
110
449
  }
@@ -115,15 +454,15 @@ export const transformTo = (from, to, decode) => from.pipe(S.decodeTo(to, Schema
115
454
  })));
116
455
  /** A version of transformOrFail which is only a one way mapping of From->To */
117
456
  export const transformToOrFail = (from, to, decode) => from.pipe(S.decodeTo(to, SchemaTransformation.transformOrFail({
118
- decode: decode,
457
+ decode,
119
458
  encode: (i) => Effect.fail(new SchemaIssue.Forbidden(Option.some(i), { message: "One way schema transformation, encoding is not allowed" }))
120
459
  })));
121
- export const provide = (self, context) => {
460
+ export const provide = Function.dual(2, (self, context) => {
122
461
  const prov = Effect.provide(context);
123
462
  return self.pipe(S.middlewareDecoding((effect) => prov(effect)), S.middlewareEncoding((effect) => prov(effect)));
124
- };
125
- export const contextFromServices = (self, ...services) => Effect.gen(function* () {
126
- const context = ServiceMap.pick(...services)(yield* Effect.services());
463
+ });
464
+ export const contextFromServices = Effect.fnUntraced(function* (self, ...services) {
465
+ const context = Context.pick(...services)(yield* Effect.context());
127
466
  return provide(self, context);
128
467
  });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFrQixZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNsSSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUVsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQVVsRCwyRkFBMkY7QUFDM0YscUdBQXFHO0FBQ3JHLHVHQUF1RztBQUN2Ryw0R0FBNEc7QUFDNUcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsV0FBNkIsRUFDN0IsRUFBRSxDQUNKLENBQXFCLElBQVUsRUFBZ0UsRUFBRTtJQUUvRixPQUFPLENBQUMsQ0FBQyxzQkFBc0IsQ0FDN0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQStCLENBQUMsQ0FDOUQsQ0FBQyxJQUFnQixDQUFDLENBQUE7QUFDckIsQ0FBQyxDQUFBO0FBRUQsdUVBQXVFO0FBQ3ZFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7SUFDN0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUU7SUFDM0IsTUFBTSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztDQUN2RCxDQUFDLENBQ0gsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENB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
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1NjaGVtYS9leHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUN2QyxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNDLE9BQU8sS0FBSyxXQUFXLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxLQUFLLG9CQUFvQixNQUFNLDZCQUE2QixDQUFBO0FBQ25FLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBRXZDLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFBO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0saUJBQWlCLENBQUE7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFVbEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUN2QyxNQUFNO0tBQ0gsT0FBTyxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQztLQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQ2pGLENBQUE7QUFFRCxNQUFNLENBQUMs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