@clayroach/effect 3.19.14-source-capture.8 → 3.19.14-source-trace.1

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 (452) hide show
  1. package/SourceLocation/package.json +6 -0
  2. package/dist/cjs/Effect.js +2 -28
  3. package/dist/cjs/Effect.js.map +1 -1
  4. package/dist/cjs/FiberRef.js +12 -1
  5. package/dist/cjs/FiberRef.js.map +1 -1
  6. package/dist/cjs/Layer.js +2 -24
  7. package/dist/cjs/Layer.js.map +1 -1
  8. package/dist/cjs/RuntimeFlags.js +1 -29
  9. package/dist/cjs/RuntimeFlags.js.map +1 -1
  10. package/dist/cjs/SourceLocation.js +60 -0
  11. package/dist/cjs/SourceLocation.js.map +1 -0
  12. package/dist/cjs/Tracer.js +1 -15
  13. package/dist/cjs/Tracer.js.map +1 -1
  14. package/dist/cjs/Utils.js +1 -1
  15. package/dist/cjs/Utils.js.map +1 -1
  16. package/dist/cjs/index.js +3 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/internal/clock.js +1 -1
  19. package/dist/cjs/internal/clock.js.map +1 -1
  20. package/dist/cjs/internal/core.js +17 -50
  21. package/dist/cjs/internal/core.js.map +1 -1
  22. package/dist/cjs/internal/effect/circular.js +18 -30
  23. package/dist/cjs/internal/effect/circular.js.map +1 -1
  24. package/dist/cjs/internal/fiberRuntime.js +16 -65
  25. package/dist/cjs/internal/fiberRuntime.js.map +1 -1
  26. package/dist/cjs/internal/layer/circular.js +1 -5
  27. package/dist/cjs/internal/layer/circular.js.map +1 -1
  28. package/dist/cjs/internal/layer.js +1 -3
  29. package/dist/cjs/internal/layer.js.map +1 -1
  30. package/dist/cjs/internal/logger.js +25 -2
  31. package/dist/cjs/internal/logger.js.map +1 -1
  32. package/dist/cjs/internal/runtimeFlags.js +2 -11
  33. package/dist/cjs/internal/runtimeFlags.js.map +1 -1
  34. package/dist/cjs/internal/tracer.js +1 -114
  35. package/dist/cjs/internal/tracer.js.map +1 -1
  36. package/dist/dts/Config.d.ts +2 -2
  37. package/dist/dts/Config.d.ts.map +1 -1
  38. package/dist/dts/Effect.d.ts +8 -29
  39. package/dist/dts/Effect.d.ts.map +1 -1
  40. package/dist/dts/FiberRef.d.ts +12 -0
  41. package/dist/dts/FiberRef.d.ts.map +1 -1
  42. package/dist/dts/Layer.d.ts +0 -22
  43. package/dist/dts/Layer.d.ts.map +1 -1
  44. package/dist/dts/RuntimeFlags.d.ts +0 -28
  45. package/dist/dts/RuntimeFlags.d.ts.map +1 -1
  46. package/dist/dts/SourceLocation.d.ts +88 -0
  47. package/dist/dts/SourceLocation.d.ts.map +1 -0
  48. package/dist/dts/Tracer.d.ts +0 -15
  49. package/dist/dts/Tracer.d.ts.map +1 -1
  50. package/dist/dts/index.d.ts +6 -0
  51. package/dist/dts/index.d.ts.map +1 -1
  52. package/dist/dts/internal/core.d.ts.map +1 -1
  53. package/dist/dts/internal/layer.d.ts.map +1 -1
  54. package/dist/dts/internal/runtimeFlags.d.ts.map +1 -1
  55. package/dist/esm/Effect.js +0 -26
  56. package/dist/esm/Effect.js.map +1 -1
  57. package/dist/esm/FiberRef.js +11 -0
  58. package/dist/esm/FiberRef.js.map +1 -1
  59. package/dist/esm/Layer.js +0 -22
  60. package/dist/esm/Layer.js.map +1 -1
  61. package/dist/esm/RuntimeFlags.js +0 -28
  62. package/dist/esm/RuntimeFlags.js.map +1 -1
  63. package/dist/esm/SourceLocation.js +51 -0
  64. package/dist/esm/SourceLocation.js.map +1 -0
  65. package/dist/esm/Tracer.js +0 -14
  66. package/dist/esm/Tracer.js.map +1 -1
  67. package/dist/esm/Utils.js +1 -1
  68. package/dist/esm/Utils.js.map +1 -1
  69. package/dist/esm/index.js +6 -0
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/internal/clock.js +1 -1
  72. package/dist/esm/internal/clock.js.map +1 -1
  73. package/dist/esm/internal/core.js +12 -45
  74. package/dist/esm/internal/core.js.map +1 -1
  75. package/dist/esm/internal/effect/circular.js +18 -30
  76. package/dist/esm/internal/effect/circular.js.map +1 -1
  77. package/dist/esm/internal/fiberRuntime.js +13 -60
  78. package/dist/esm/internal/fiberRuntime.js.map +1 -1
  79. package/dist/esm/internal/layer/circular.js +0 -4
  80. package/dist/esm/internal/layer/circular.js.map +1 -1
  81. package/dist/esm/internal/layer.js +0 -2
  82. package/dist/esm/internal/layer.js.map +1 -1
  83. package/dist/esm/internal/logger.js +25 -2
  84. package/dist/esm/internal/logger.js.map +1 -1
  85. package/dist/esm/internal/runtimeFlags.js +1 -9
  86. package/dist/esm/internal/runtimeFlags.js.map +1 -1
  87. package/dist/esm/internal/tracer.js +0 -111
  88. package/dist/esm/internal/tracer.js.map +1 -1
  89. package/package.json +12 -1
  90. package/src/Arbitrary.ts +1101 -0
  91. package/src/Array.ts +3589 -0
  92. package/src/BigDecimal.ts +1349 -0
  93. package/src/BigInt.ts +643 -0
  94. package/src/Boolean.ts +287 -0
  95. package/src/Brand.ts +360 -0
  96. package/src/Cache.ts +281 -0
  97. package/src/Cause.ts +1555 -0
  98. package/src/Channel.ts +2355 -0
  99. package/src/ChildExecutorDecision.ts +146 -0
  100. package/src/Chunk.ts +1495 -0
  101. package/src/Clock.ts +111 -0
  102. package/src/Config.ts +542 -0
  103. package/src/ConfigError.ts +270 -0
  104. package/src/ConfigProvider.ts +333 -0
  105. package/src/ConfigProviderPathPatch.ts +100 -0
  106. package/src/Console.ts +226 -0
  107. package/src/Context.ts +585 -0
  108. package/src/Cron.ts +706 -0
  109. package/src/Data.ts +596 -0
  110. package/src/DateTime.ts +1686 -0
  111. package/src/DefaultServices.ts +34 -0
  112. package/src/Deferred.ts +301 -0
  113. package/src/Differ.ts +450 -0
  114. package/src/Duration.ts +1000 -0
  115. package/src/Effect.ts +14817 -0
  116. package/src/Effectable.ts +107 -0
  117. package/src/Either.ts +1040 -0
  118. package/src/Encoding.ts +195 -0
  119. package/src/Equal.ts +98 -0
  120. package/src/Equivalence.ts +235 -0
  121. package/src/ExecutionPlan.ts +308 -0
  122. package/src/ExecutionStrategy.ts +119 -0
  123. package/src/Exit.ts +467 -0
  124. package/src/FastCheck.ts +9 -0
  125. package/src/Fiber.ts +744 -0
  126. package/src/FiberHandle.ts +540 -0
  127. package/src/FiberId.ts +195 -0
  128. package/src/FiberMap.ts +656 -0
  129. package/src/FiberRef.ts +444 -0
  130. package/src/FiberRefs.ts +204 -0
  131. package/src/FiberRefsPatch.ts +105 -0
  132. package/src/FiberSet.ts +491 -0
  133. package/src/FiberStatus.ts +108 -0
  134. package/src/Function.ts +1222 -0
  135. package/src/GlobalValue.ts +53 -0
  136. package/src/Graph.ts +3732 -0
  137. package/src/GroupBy.ts +103 -0
  138. package/src/HKT.ts +45 -0
  139. package/src/Hash.ts +195 -0
  140. package/src/HashMap.ts +519 -0
  141. package/src/HashRing.ts +317 -0
  142. package/src/HashSet.ts +2346 -0
  143. package/src/Inspectable.ts +287 -0
  144. package/src/Iterable.ts +1119 -0
  145. package/src/JSONSchema.ts +1044 -0
  146. package/src/KeyedPool.ts +167 -0
  147. package/src/Layer.ts +1228 -0
  148. package/src/LayerMap.ts +436 -0
  149. package/src/List.ts +977 -0
  150. package/src/LogLevel.ts +285 -0
  151. package/src/LogSpan.ts +25 -0
  152. package/src/Logger.ts +702 -0
  153. package/src/Mailbox.ts +268 -0
  154. package/src/ManagedRuntime.ts +180 -0
  155. package/src/Match.ts +1477 -0
  156. package/src/MergeDecision.ts +95 -0
  157. package/src/MergeState.ts +172 -0
  158. package/src/MergeStrategy.ts +107 -0
  159. package/src/Metric.ts +780 -0
  160. package/src/MetricBoundaries.ts +69 -0
  161. package/src/MetricHook.ts +151 -0
  162. package/src/MetricKey.ts +224 -0
  163. package/src/MetricKeyType.ts +262 -0
  164. package/src/MetricLabel.ts +47 -0
  165. package/src/MetricPair.ts +71 -0
  166. package/src/MetricPolling.ts +148 -0
  167. package/src/MetricRegistry.ts +48 -0
  168. package/src/MetricState.ts +257 -0
  169. package/src/Micro.ts +4405 -0
  170. package/src/ModuleVersion.ts +18 -0
  171. package/src/MutableHashMap.ts +411 -0
  172. package/src/MutableHashSet.ts +706 -0
  173. package/src/MutableList.ts +297 -0
  174. package/src/MutableQueue.ts +227 -0
  175. package/src/MutableRef.ts +202 -0
  176. package/src/NonEmptyIterable.ts +32 -0
  177. package/src/Number.ts +1071 -0
  178. package/src/Option.ts +2170 -0
  179. package/src/Order.ts +373 -0
  180. package/src/Ordering.ts +111 -0
  181. package/src/ParseResult.ts +2031 -0
  182. package/src/PartitionedSemaphore.ts +200 -0
  183. package/src/Pipeable.ts +566 -0
  184. package/src/Pool.ts +204 -0
  185. package/src/Predicate.ts +1405 -0
  186. package/src/Pretty.ts +205 -0
  187. package/src/PrimaryKey.ts +23 -0
  188. package/src/PubSub.ts +182 -0
  189. package/src/Queue.ts +644 -0
  190. package/src/Random.ts +204 -0
  191. package/src/RateLimiter.ts +138 -0
  192. package/src/RcMap.ts +141 -0
  193. package/src/RcRef.ts +122 -0
  194. package/src/Readable.ts +93 -0
  195. package/src/Record.ts +1274 -0
  196. package/src/RedBlackTree.ts +421 -0
  197. package/src/Redacted.ts +144 -0
  198. package/src/Ref.ts +180 -0
  199. package/src/RegExp.ts +38 -0
  200. package/src/Reloadable.ts +127 -0
  201. package/src/Request.ts +347 -0
  202. package/src/RequestBlock.ts +118 -0
  203. package/src/RequestResolver.ts +366 -0
  204. package/src/Resource.ts +119 -0
  205. package/src/Runtime.ts +383 -0
  206. package/src/RuntimeFlags.ts +336 -0
  207. package/src/RuntimeFlagsPatch.ts +183 -0
  208. package/src/STM.ts +2045 -0
  209. package/src/Schedule.ts +2219 -0
  210. package/src/ScheduleDecision.ts +62 -0
  211. package/src/ScheduleInterval.ts +151 -0
  212. package/src/ScheduleIntervals.ts +122 -0
  213. package/src/Scheduler.ts +353 -0
  214. package/src/Schema.ts +10914 -0
  215. package/src/SchemaAST.ts +3043 -0
  216. package/src/Scope.ts +204 -0
  217. package/src/ScopedCache.ts +151 -0
  218. package/src/ScopedRef.ts +117 -0
  219. package/src/Secret.ts +88 -0
  220. package/src/SingleProducerAsyncInput.ts +67 -0
  221. package/src/Sink.ts +1461 -0
  222. package/src/SortedMap.ts +287 -0
  223. package/src/SortedSet.ts +390 -0
  224. package/src/SourceLocation.ts +108 -0
  225. package/src/Stream.ts +6468 -0
  226. package/src/StreamEmit.ts +136 -0
  227. package/src/StreamHaltStrategy.ts +123 -0
  228. package/src/Streamable.ts +45 -0
  229. package/src/String.ts +778 -0
  230. package/src/Struct.ts +243 -0
  231. package/src/Subscribable.ts +100 -0
  232. package/src/SubscriptionRef.ts +298 -0
  233. package/src/Supervisor.ts +240 -0
  234. package/src/Symbol.ts +29 -0
  235. package/src/SynchronizedRef.ts +270 -0
  236. package/src/TArray.ts +495 -0
  237. package/src/TDeferred.ts +100 -0
  238. package/src/TMap.ts +515 -0
  239. package/src/TPriorityQueue.ts +223 -0
  240. package/src/TPubSub.ts +200 -0
  241. package/src/TQueue.ts +432 -0
  242. package/src/TRandom.ts +129 -0
  243. package/src/TReentrantLock.ts +224 -0
  244. package/src/TRef.ts +178 -0
  245. package/src/TSemaphore.ts +129 -0
  246. package/src/TSet.ts +365 -0
  247. package/src/TSubscriptionRef.ts +192 -0
  248. package/src/Take.ts +258 -0
  249. package/src/TestAnnotation.ts +158 -0
  250. package/src/TestAnnotationMap.ts +119 -0
  251. package/src/TestAnnotations.ts +117 -0
  252. package/src/TestClock.ts +556 -0
  253. package/src/TestConfig.ts +47 -0
  254. package/src/TestContext.ts +36 -0
  255. package/src/TestLive.ts +53 -0
  256. package/src/TestServices.ts +390 -0
  257. package/src/TestSized.ts +55 -0
  258. package/src/Tracer.ts +182 -0
  259. package/src/Trie.ts +840 -0
  260. package/src/Tuple.ts +305 -0
  261. package/src/Types.ts +353 -0
  262. package/src/Unify.ts +113 -0
  263. package/src/UpstreamPullRequest.ts +117 -0
  264. package/src/UpstreamPullStrategy.ts +121 -0
  265. package/src/Utils.ts +809 -0
  266. package/src/index.ts +1568 -0
  267. package/src/internal/array.ts +8 -0
  268. package/src/internal/blockedRequests.ts +520 -0
  269. package/src/internal/cache.ts +733 -0
  270. package/src/internal/cause.ts +1050 -0
  271. package/src/internal/channel/channelExecutor.ts +1200 -0
  272. package/src/internal/channel/channelState.ts +134 -0
  273. package/src/internal/channel/childExecutorDecision.ts +96 -0
  274. package/src/internal/channel/continuation.ts +200 -0
  275. package/src/internal/channel/mergeDecision.ts +113 -0
  276. package/src/internal/channel/mergeState.ts +120 -0
  277. package/src/internal/channel/mergeStrategy.ts +72 -0
  278. package/src/internal/channel/singleProducerAsyncInput.ts +259 -0
  279. package/src/internal/channel/subexecutor.ts +229 -0
  280. package/src/internal/channel/upstreamPullRequest.ts +84 -0
  281. package/src/internal/channel/upstreamPullStrategy.ts +87 -0
  282. package/src/internal/channel.ts +2603 -0
  283. package/src/internal/clock.ts +95 -0
  284. package/src/internal/completedRequestMap.ts +9 -0
  285. package/src/internal/concurrency.ts +54 -0
  286. package/src/internal/config.ts +716 -0
  287. package/src/internal/configError.ts +304 -0
  288. package/src/internal/configProvider/pathPatch.ts +97 -0
  289. package/src/internal/configProvider.ts +799 -0
  290. package/src/internal/console.ts +153 -0
  291. package/src/internal/context.ts +337 -0
  292. package/src/internal/core-effect.ts +2293 -0
  293. package/src/internal/core-stream.ts +998 -0
  294. package/src/internal/core.ts +3189 -0
  295. package/src/internal/data.ts +36 -0
  296. package/src/internal/dataSource.ts +327 -0
  297. package/src/internal/dateTime.ts +1277 -0
  298. package/src/internal/defaultServices/console.ts +100 -0
  299. package/src/internal/defaultServices.ts +163 -0
  300. package/src/internal/deferred.ts +46 -0
  301. package/src/internal/differ/chunkPatch.ts +211 -0
  302. package/src/internal/differ/contextPatch.ts +232 -0
  303. package/src/internal/differ/hashMapPatch.ts +220 -0
  304. package/src/internal/differ/hashSetPatch.ts +176 -0
  305. package/src/internal/differ/orPatch.ts +311 -0
  306. package/src/internal/differ/readonlyArrayPatch.ts +210 -0
  307. package/src/internal/differ.ts +200 -0
  308. package/src/internal/doNotation.ts +80 -0
  309. package/src/internal/effect/circular.ts +895 -0
  310. package/src/internal/effectable.ts +131 -0
  311. package/src/internal/either.ts +110 -0
  312. package/src/internal/encoding/base64.ts +286 -0
  313. package/src/internal/encoding/base64Url.ts +29 -0
  314. package/src/internal/encoding/common.ts +51 -0
  315. package/src/internal/encoding/hex.ts +315 -0
  316. package/src/internal/errors.ts +7 -0
  317. package/src/internal/executionPlan.ts +114 -0
  318. package/src/internal/executionStrategy.ts +74 -0
  319. package/src/internal/fiber.ts +388 -0
  320. package/src/internal/fiberId.ts +267 -0
  321. package/src/internal/fiberMessage.ts +82 -0
  322. package/src/internal/fiberRefs/patch.ts +144 -0
  323. package/src/internal/fiberRefs.ts +297 -0
  324. package/src/internal/fiberRuntime.ts +3842 -0
  325. package/src/internal/fiberScope.ts +71 -0
  326. package/src/internal/fiberStatus.ts +119 -0
  327. package/src/internal/groupBy.ts +530 -0
  328. package/src/internal/hashMap/array.ts +49 -0
  329. package/src/internal/hashMap/bitwise.ts +32 -0
  330. package/src/internal/hashMap/config.ts +14 -0
  331. package/src/internal/hashMap/keySet.ts +8 -0
  332. package/src/internal/hashMap/node.ts +391 -0
  333. package/src/internal/hashMap.ts +586 -0
  334. package/src/internal/hashSet.ts +323 -0
  335. package/src/internal/keyedPool.ts +244 -0
  336. package/src/internal/layer/circular.ts +214 -0
  337. package/src/internal/layer.ts +1483 -0
  338. package/src/internal/logSpan.ts +20 -0
  339. package/src/internal/logger-circular.ts +24 -0
  340. package/src/internal/logger.ts +522 -0
  341. package/src/internal/mailbox.ts +561 -0
  342. package/src/internal/managedRuntime/circular.ts +6 -0
  343. package/src/internal/managedRuntime.ts +134 -0
  344. package/src/internal/matcher.ts +652 -0
  345. package/src/internal/metric/boundaries.ts +75 -0
  346. package/src/internal/metric/hook.ts +483 -0
  347. package/src/internal/metric/key.ts +167 -0
  348. package/src/internal/metric/keyType.ts +238 -0
  349. package/src/internal/metric/label.ts +41 -0
  350. package/src/internal/metric/pair.ts +48 -0
  351. package/src/internal/metric/polling.ts +149 -0
  352. package/src/internal/metric/registry.ts +187 -0
  353. package/src/internal/metric/state.ts +290 -0
  354. package/src/internal/metric.ts +577 -0
  355. package/src/internal/opCodes/cause.ts +35 -0
  356. package/src/internal/opCodes/channel.ts +83 -0
  357. package/src/internal/opCodes/channelChildExecutorDecision.ts +17 -0
  358. package/src/internal/opCodes/channelMergeDecision.ts +11 -0
  359. package/src/internal/opCodes/channelMergeState.ts +17 -0
  360. package/src/internal/opCodes/channelMergeStrategy.ts +11 -0
  361. package/src/internal/opCodes/channelState.ts +23 -0
  362. package/src/internal/opCodes/channelUpstreamPullRequest.ts +11 -0
  363. package/src/internal/opCodes/channelUpstreamPullStrategy.ts +11 -0
  364. package/src/internal/opCodes/config.ts +65 -0
  365. package/src/internal/opCodes/configError.ts +35 -0
  366. package/src/internal/opCodes/continuation.ts +11 -0
  367. package/src/internal/opCodes/deferred.ts +11 -0
  368. package/src/internal/opCodes/effect.ts +89 -0
  369. package/src/internal/opCodes/layer.ts +59 -0
  370. package/src/internal/opCodes/streamHaltStrategy.ts +23 -0
  371. package/src/internal/option.ts +80 -0
  372. package/src/internal/pool.ts +432 -0
  373. package/src/internal/pubsub.ts +1762 -0
  374. package/src/internal/query.ts +204 -0
  375. package/src/internal/queue.ts +766 -0
  376. package/src/internal/random.ts +161 -0
  377. package/src/internal/rateLimiter.ts +93 -0
  378. package/src/internal/rcMap.ts +285 -0
  379. package/src/internal/rcRef.ts +192 -0
  380. package/src/internal/redBlackTree/iterator.ts +200 -0
  381. package/src/internal/redBlackTree/node.ts +68 -0
  382. package/src/internal/redBlackTree.ts +1245 -0
  383. package/src/internal/redacted.ts +73 -0
  384. package/src/internal/ref.ts +171 -0
  385. package/src/internal/reloadable.ts +140 -0
  386. package/src/internal/request.ts +177 -0
  387. package/src/internal/resource.ts +76 -0
  388. package/src/internal/ringBuffer.ts +68 -0
  389. package/src/internal/runtime.ts +558 -0
  390. package/src/internal/runtimeFlags.ts +178 -0
  391. package/src/internal/runtimeFlagsPatch.ts +103 -0
  392. package/src/internal/schedule/decision.ts +47 -0
  393. package/src/internal/schedule/interval.ts +101 -0
  394. package/src/internal/schedule/intervals.ts +180 -0
  395. package/src/internal/schedule.ts +2199 -0
  396. package/src/internal/schema/errors.ts +191 -0
  397. package/src/internal/schema/schemaId.ts +106 -0
  398. package/src/internal/schema/util.ts +50 -0
  399. package/src/internal/scopedCache.ts +644 -0
  400. package/src/internal/scopedRef.ts +118 -0
  401. package/src/internal/secret.ts +89 -0
  402. package/src/internal/singleShotGen.ts +35 -0
  403. package/src/internal/sink.ts +2120 -0
  404. package/src/internal/stack.ts +10 -0
  405. package/src/internal/stm/core.ts +817 -0
  406. package/src/internal/stm/entry.ts +59 -0
  407. package/src/internal/stm/journal.ts +123 -0
  408. package/src/internal/stm/opCodes/stm.ts +71 -0
  409. package/src/internal/stm/opCodes/stmState.ts +17 -0
  410. package/src/internal/stm/opCodes/strategy.ts +17 -0
  411. package/src/internal/stm/opCodes/tExit.ts +29 -0
  412. package/src/internal/stm/opCodes/tryCommit.ts +11 -0
  413. package/src/internal/stm/stm.ts +1453 -0
  414. package/src/internal/stm/stmState.ts +136 -0
  415. package/src/internal/stm/tArray.ts +550 -0
  416. package/src/internal/stm/tDeferred.ts +81 -0
  417. package/src/internal/stm/tExit.ts +190 -0
  418. package/src/internal/stm/tMap.ts +824 -0
  419. package/src/internal/stm/tPriorityQueue.ts +267 -0
  420. package/src/internal/stm/tPubSub.ts +551 -0
  421. package/src/internal/stm/tQueue.ts +393 -0
  422. package/src/internal/stm/tRandom.ts +140 -0
  423. package/src/internal/stm/tReentrantLock.ts +352 -0
  424. package/src/internal/stm/tRef.ts +195 -0
  425. package/src/internal/stm/tSemaphore.ts +113 -0
  426. package/src/internal/stm/tSet.ts +259 -0
  427. package/src/internal/stm/tSubscriptionRef.ts +286 -0
  428. package/src/internal/stm/tryCommit.ts +34 -0
  429. package/src/internal/stm/txnId.ts +14 -0
  430. package/src/internal/stm/versioned.ts +4 -0
  431. package/src/internal/stream/debounceState.ts +57 -0
  432. package/src/internal/stream/emit.ts +123 -0
  433. package/src/internal/stream/haltStrategy.ts +94 -0
  434. package/src/internal/stream/handoff.ts +187 -0
  435. package/src/internal/stream/handoffSignal.ts +59 -0
  436. package/src/internal/stream/pull.ts +34 -0
  437. package/src/internal/stream/sinkEndReason.ts +30 -0
  438. package/src/internal/stream/zipAllState.ts +88 -0
  439. package/src/internal/stream/zipChunksState.ts +56 -0
  440. package/src/internal/stream.ts +8801 -0
  441. package/src/internal/string-utils.ts +107 -0
  442. package/src/internal/subscriptionRef.ts +138 -0
  443. package/src/internal/supervisor/patch.ts +190 -0
  444. package/src/internal/supervisor.ts +303 -0
  445. package/src/internal/synchronizedRef.ts +114 -0
  446. package/src/internal/take.ts +199 -0
  447. package/src/internal/testing/sleep.ts +27 -0
  448. package/src/internal/testing/suspendedWarningData.ts +85 -0
  449. package/src/internal/testing/warningData.ts +94 -0
  450. package/src/internal/tracer.ts +150 -0
  451. package/src/internal/trie.ts +722 -0
  452. package/src/internal/version.ts +7 -0
@@ -0,0 +1,716 @@
1
+ import type * as Brand from "../Brand.js"
2
+ import * as Chunk from "../Chunk.js"
3
+ import type * as Config from "../Config.js"
4
+ import * as ConfigError from "../ConfigError.js"
5
+ import * as Duration from "../Duration.js"
6
+ import * as Either from "../Either.js"
7
+ import type { LazyArg } from "../Function.js"
8
+ import { constTrue, dual, pipe } from "../Function.js"
9
+ import type * as HashMap from "../HashMap.js"
10
+ import * as HashSet from "../HashSet.js"
11
+ import { formatUnknown } from "../Inspectable.js"
12
+ import type * as LogLevel from "../LogLevel.js"
13
+ import * as Option from "../Option.js"
14
+ import { hasProperty, type Predicate, type Refinement } from "../Predicate.js"
15
+ import type * as Redacted from "../Redacted.js"
16
+ import type * as Secret from "../Secret.js"
17
+ import * as configError from "./configError.js"
18
+ import * as core from "./core.js"
19
+ import * as defaultServices from "./defaultServices.js"
20
+ import * as effectable from "./effectable.js"
21
+ import * as OpCodes from "./opCodes/config.js"
22
+ import * as redacted_ from "./redacted.js"
23
+ import * as InternalSecret from "./secret.js"
24
+
25
+ const ConfigSymbolKey = "effect/Config"
26
+
27
+ /** @internal */
28
+ export const ConfigTypeId: Config.ConfigTypeId = Symbol.for(
29
+ ConfigSymbolKey
30
+ ) as Config.ConfigTypeId
31
+
32
+ /** @internal */
33
+ export type ConfigPrimitive =
34
+ | Constant
35
+ | Described
36
+ | Fallback
37
+ | Fail
38
+ | Lazy
39
+ | MapOrFail
40
+ | Nested
41
+ | Primitive
42
+ | Sequence
43
+ | Table
44
+ | Zipped
45
+
46
+ const configVariance = {
47
+ /* c8 ignore next */
48
+ _A: (_: never) => _
49
+ }
50
+
51
+ const proto = {
52
+ ...effectable.CommitPrototype,
53
+ [ConfigTypeId]: configVariance,
54
+ commit(this: Config.Config<unknown>) {
55
+ return defaultServices.config(this)
56
+ }
57
+ }
58
+
59
+ /** @internal */
60
+ export type Op<Tag extends string, Body = {}> = Config.Config<never> & Body & {
61
+ readonly _tag: Tag
62
+ }
63
+
64
+ /** @internal */
65
+ export interface Constant extends
66
+ Op<OpCodes.OP_CONSTANT, {
67
+ readonly value: unknown
68
+ parse(text: string): Either.Either<unknown, ConfigError.ConfigError>
69
+ }>
70
+ {}
71
+
72
+ /** @internal */
73
+ export interface Described extends
74
+ Op<OpCodes.OP_DESCRIBED, {
75
+ readonly config: Config.Config<unknown>
76
+ readonly description: string
77
+ }>
78
+ {}
79
+
80
+ /** @internal */
81
+ export interface Fallback extends
82
+ Op<OpCodes.OP_FALLBACK, {
83
+ readonly first: Config.Config<unknown>
84
+ readonly second: Config.Config<unknown>
85
+ readonly condition: Predicate<ConfigError.ConfigError>
86
+ }>
87
+ {}
88
+
89
+ /** @internal */
90
+ export interface Fail extends
91
+ Op<OpCodes.OP_FAIL, {
92
+ readonly message: string
93
+ parse(text: string): Either.Either<unknown, ConfigError.ConfigError>
94
+ }>
95
+ {}
96
+
97
+ /** @internal */
98
+ export interface Lazy extends
99
+ Op<OpCodes.OP_LAZY, {
100
+ config(): Config.Config<unknown>
101
+ }>
102
+ {}
103
+
104
+ /** @internal */
105
+ export interface MapOrFail extends
106
+ Op<OpCodes.OP_MAP_OR_FAIL, {
107
+ readonly original: Config.Config<unknown>
108
+ mapOrFail(value: unknown): Either.Either<unknown, ConfigError.ConfigError>
109
+ }>
110
+ {}
111
+
112
+ /** @internal */
113
+ export interface Nested extends
114
+ Op<OpCodes.OP_NESTED, {
115
+ readonly name: string
116
+ readonly config: Config.Config<unknown>
117
+ }>
118
+ {}
119
+
120
+ /** @internal */
121
+ export interface Primitive extends
122
+ Op<OpCodes.OP_PRIMITIVE, {
123
+ readonly description: string
124
+ parse(text: string): Either.Either<unknown, ConfigError.ConfigError>
125
+ }>
126
+ {}
127
+
128
+ /** @internal */
129
+ export interface Sequence extends
130
+ Op<OpCodes.OP_SEQUENCE, {
131
+ readonly config: Config.Config<unknown>
132
+ }>
133
+ {}
134
+
135
+ /** @internal */
136
+ export interface Table extends
137
+ Op<OpCodes.OP_HASHMAP, {
138
+ readonly op: OpCodes.OP_HASHMAP
139
+ readonly valueConfig: Config.Config<unknown>
140
+ }>
141
+ {}
142
+
143
+ /** @internal */
144
+ export interface Zipped extends
145
+ Op<OpCodes.OP_ZIP_WITH, {
146
+ readonly op: OpCodes.OP_ZIP_WITH
147
+ readonly left: Config.Config<unknown>
148
+ readonly right: Config.Config<unknown>
149
+ zip(a: unknown, b: unknown): unknown
150
+ }>
151
+ {}
152
+
153
+ /** @internal */
154
+ export const boolean = (name?: string): Config.Config<boolean> => {
155
+ const config = primitive(
156
+ "a boolean property",
157
+ (text) => {
158
+ switch (text) {
159
+ case "true":
160
+ case "yes":
161
+ case "on":
162
+ case "1": {
163
+ return Either.right(true)
164
+ }
165
+ case "false":
166
+ case "no":
167
+ case "off":
168
+ case "0": {
169
+ return Either.right(false)
170
+ }
171
+ default: {
172
+ const error = configError.InvalidData(
173
+ [],
174
+ `Expected a boolean value but received ${formatUnknown(text)}`
175
+ )
176
+ return Either.left(error)
177
+ }
178
+ }
179
+ }
180
+ )
181
+ return name === undefined ? config : nested(config, name)
182
+ }
183
+
184
+ /** @internal */
185
+ export const url = (name?: string): Config.Config<URL> => {
186
+ const config = primitive(
187
+ "an URL property",
188
+ (text) =>
189
+ Either.try({
190
+ try: () => new URL(text),
191
+ catch: (_) => configError.InvalidData([], `Expected an URL value but received ${formatUnknown(text)}`)
192
+ })
193
+ )
194
+ return name === undefined ? config : nested(config, name)
195
+ }
196
+
197
+ /** @internal */
198
+ export const port = (name?: string): Config.Config<number> => {
199
+ const config = primitive(
200
+ "a network port property",
201
+ (text) => {
202
+ const result = Number(text)
203
+
204
+ if (
205
+ Number.isNaN(result) ||
206
+ result.toString() !== text.toString() ||
207
+ !Number.isInteger(result) ||
208
+ result < 1 ||
209
+ result > 65535
210
+ ) {
211
+ return Either.left(
212
+ configError.InvalidData(
213
+ [],
214
+ `Expected a network port value but received ${formatUnknown(text)}`
215
+ )
216
+ )
217
+ }
218
+ return Either.right(result)
219
+ }
220
+ )
221
+ return name === undefined ? config : nested(config, name)
222
+ }
223
+
224
+ /** @internal */
225
+ export const array = <A>(config: Config.Config<A>, name?: string): Config.Config<Array<A>> => {
226
+ return pipe(chunk(config, name), map(Chunk.toArray))
227
+ }
228
+
229
+ /** @internal */
230
+ export const chunk = <A>(config: Config.Config<A>, name?: string): Config.Config<Chunk.Chunk<A>> => {
231
+ return map(name === undefined ? repeat(config) : nested(repeat(config), name), Chunk.unsafeFromArray)
232
+ }
233
+
234
+ /** @internal */
235
+ export const date = (name?: string): Config.Config<Date> => {
236
+ const config = primitive(
237
+ "a date property",
238
+ (text) => {
239
+ const result = Date.parse(text)
240
+ if (Number.isNaN(result)) {
241
+ return Either.left(
242
+ configError.InvalidData(
243
+ [],
244
+ `Expected a Date value but received ${formatUnknown(text)}`
245
+ )
246
+ )
247
+ }
248
+ return Either.right(new Date(result))
249
+ }
250
+ )
251
+ return name === undefined ? config : nested(config, name)
252
+ }
253
+
254
+ /** @internal */
255
+ export const fail = (message: string): Config.Config<never> => {
256
+ const fail = Object.create(proto)
257
+ fail._tag = OpCodes.OP_FAIL
258
+ fail.message = message
259
+ fail.parse = () => Either.left(configError.Unsupported([], message))
260
+ return fail
261
+ }
262
+
263
+ /** @internal */
264
+ export const number = (name?: string): Config.Config<number> => {
265
+ const config = primitive(
266
+ "a number property",
267
+ (text) => {
268
+ const result = Number(text)
269
+ if (Number.isNaN(result)) {
270
+ return Either.left(
271
+ configError.InvalidData(
272
+ [],
273
+ `Expected a number value but received ${formatUnknown(text)}`
274
+ )
275
+ )
276
+ }
277
+ return Either.right(result)
278
+ }
279
+ )
280
+ return name === undefined ? config : nested(config, name)
281
+ }
282
+
283
+ /** @internal */
284
+ export const integer = (name?: string): Config.Config<number> => {
285
+ const config = primitive(
286
+ "an integer property",
287
+ (text) => {
288
+ const result = Number(text)
289
+ if (!Number.isInteger(result)) {
290
+ return Either.left(
291
+ configError.InvalidData(
292
+ [],
293
+ `Expected an integer value but received ${formatUnknown(text)}`
294
+ )
295
+ )
296
+ }
297
+ return Either.right(result)
298
+ }
299
+ )
300
+ return name === undefined ? config : nested(config, name)
301
+ }
302
+
303
+ /** @internal */
304
+ export const literal = <Literals extends ReadonlyArray<Config.LiteralValue>>(...literals: Literals) =>
305
+ (
306
+ name?: string
307
+ ): Config.Config<Literals[number]> => {
308
+ const valuesString = literals.map(String).join(", ")
309
+ const config = primitive(`one of (${valuesString})`, (text) => {
310
+ const found = literals.find((value) => String(value) === text)
311
+ if (found === undefined) {
312
+ return Either.left(
313
+ configError.InvalidData(
314
+ [],
315
+ `Expected one of (${valuesString}) but received ${formatUnknown(text)}`
316
+ )
317
+ )
318
+ }
319
+ return Either.right(found)
320
+ })
321
+ return name === undefined ? config : nested(config, name)
322
+ }
323
+
324
+ /** @internal */
325
+ export const logLevel = (name?: string): Config.Config<LogLevel.LogLevel> => {
326
+ const config = mapOrFail(string(), (value) => {
327
+ const label = value.toUpperCase()
328
+ const level = core.allLogLevels.find((level) => level.label === label)
329
+ return level === undefined
330
+ ? Either.left(
331
+ configError.InvalidData([], `Expected a log level but received ${formatUnknown(value)}`)
332
+ )
333
+ : Either.right(level)
334
+ })
335
+ return name === undefined ? config : nested(config, name)
336
+ }
337
+
338
+ /** @internal */
339
+ export const duration = (name?: string): Config.Config<Duration.Duration> => {
340
+ const config = mapOrFail(string(), (value) => {
341
+ const duration = Duration.decodeUnknown(value)
342
+ return Either.fromOption(
343
+ duration,
344
+ () => configError.InvalidData([], `Expected a duration but received ${formatUnknown(value)}`)
345
+ )
346
+ })
347
+ return name === undefined ? config : nested(config, name)
348
+ }
349
+
350
+ /** @internal */
351
+ export const map = dual<
352
+ <A, B>(f: (a: A) => B) => (self: Config.Config<A>) => Config.Config<B>,
353
+ <A, B>(self: Config.Config<A>, f: (a: A) => B) => Config.Config<B>
354
+ >(2, (self, f) => mapOrFail(self, (a) => Either.right(f(a))))
355
+
356
+ /** @internal */
357
+ export const mapAttempt = dual<
358
+ <A, B>(f: (a: A) => B) => (self: Config.Config<A>) => Config.Config<B>,
359
+ <A, B>(self: Config.Config<A>, f: (a: A) => B) => Config.Config<B>
360
+ >(2, (self, f) =>
361
+ mapOrFail(self, (a) => {
362
+ try {
363
+ return Either.right(f(a))
364
+ } catch (error) {
365
+ return Either.left(
366
+ configError.InvalidData(
367
+ [],
368
+ error instanceof Error ? error.message : `${error}`
369
+ )
370
+ )
371
+ }
372
+ }))
373
+
374
+ /** @internal */
375
+ export const mapOrFail = dual<
376
+ <A, B>(f: (a: A) => Either.Either<B, ConfigError.ConfigError>) => (self: Config.Config<A>) => Config.Config<B>,
377
+ <A, B>(self: Config.Config<A>, f: (a: A) => Either.Either<B, ConfigError.ConfigError>) => Config.Config<B>
378
+ >(2, (self, f) => {
379
+ const mapOrFail = Object.create(proto)
380
+ mapOrFail._tag = OpCodes.OP_MAP_OR_FAIL
381
+ mapOrFail.original = self
382
+ mapOrFail.mapOrFail = f
383
+ return mapOrFail
384
+ })
385
+
386
+ /** @internal */
387
+ export const nested = dual<
388
+ (name: string) => <A>(self: Config.Config<A>) => Config.Config<A>,
389
+ <A>(self: Config.Config<A>, name: string) => Config.Config<A>
390
+ >(2, (self, name) => {
391
+ const nested = Object.create(proto)
392
+ nested._tag = OpCodes.OP_NESTED
393
+ nested.name = name
394
+ nested.config = self
395
+ return nested
396
+ })
397
+
398
+ /** @internal */
399
+ export const orElse = dual<
400
+ <A2>(that: LazyArg<Config.Config<A2>>) => <A>(self: Config.Config<A>) => Config.Config<A | A2>,
401
+ <A, A2>(self: Config.Config<A>, that: LazyArg<Config.Config<A2>>) => Config.Config<A | A2>
402
+ >(2, (self, that) => {
403
+ const fallback = Object.create(proto)
404
+ fallback._tag = OpCodes.OP_FALLBACK
405
+ fallback.first = self
406
+ fallback.second = suspend(that)
407
+ fallback.condition = constTrue
408
+ return fallback
409
+ })
410
+
411
+ /** @internal */
412
+ export const orElseIf = dual<
413
+ <A2>(
414
+ options: {
415
+ readonly if: Predicate<ConfigError.ConfigError>
416
+ readonly orElse: LazyArg<Config.Config<A2>>
417
+ }
418
+ ) => <A>(self: Config.Config<A>) => Config.Config<A | A2>,
419
+ <A, A2>(
420
+ self: Config.Config<A>,
421
+ options: {
422
+ readonly if: Predicate<ConfigError.ConfigError>
423
+ readonly orElse: LazyArg<Config.Config<A2>>
424
+ }
425
+ ) => Config.Config<A | A2>
426
+ >(2, (self, options) => {
427
+ const fallback = Object.create(proto)
428
+ fallback._tag = OpCodes.OP_FALLBACK
429
+ fallback.first = self
430
+ fallback.second = suspend(options.orElse)
431
+ fallback.condition = options.if
432
+ return fallback
433
+ })
434
+
435
+ /** @internal */
436
+ export const option = <A>(self: Config.Config<A>): Config.Config<Option.Option<A>> => {
437
+ return pipe(
438
+ self,
439
+ map(Option.some),
440
+ orElseIf({ orElse: () => succeed(Option.none()), if: ConfigError.isMissingDataOnly })
441
+ )
442
+ }
443
+
444
+ /** @internal */
445
+ export const primitive = <A>(
446
+ description: string,
447
+ parse: (text: string) => Either.Either<A, ConfigError.ConfigError>
448
+ ): Config.Config<A> => {
449
+ const primitive = Object.create(proto)
450
+ primitive._tag = OpCodes.OP_PRIMITIVE
451
+ primitive.description = description
452
+ primitive.parse = parse
453
+ return primitive
454
+ }
455
+
456
+ /** @internal */
457
+ export const repeat = <A>(self: Config.Config<A>): Config.Config<Array<A>> => {
458
+ const repeat = Object.create(proto)
459
+ repeat._tag = OpCodes.OP_SEQUENCE
460
+ repeat.config = self
461
+ return repeat
462
+ }
463
+
464
+ /** @internal */
465
+ export const secret = (name?: string): Config.Config<Secret.Secret> => {
466
+ const config = primitive(
467
+ "a secret property",
468
+ (text) => Either.right(InternalSecret.fromString(text))
469
+ )
470
+ return name === undefined ? config : nested(config, name)
471
+ }
472
+
473
+ /** @internal */
474
+ export const redacted = <A>(
475
+ nameOrConfig?: string | Config.Config<A>
476
+ ): Config.Config<Redacted.Redacted<A | string>> => {
477
+ const config: Config.Config<A | string> = isConfig(nameOrConfig) ? nameOrConfig : string(nameOrConfig)
478
+ return map(config, redacted_.make)
479
+ }
480
+
481
+ /** @internal */
482
+ export const branded: {
483
+ <A, B extends Brand.Branded<A, any>>(
484
+ constructor: Brand.Brand.Constructor<B>
485
+ ): (config: Config.Config<A>) => Config.Config<B>
486
+ <B extends Brand.Branded<string, any>>(
487
+ name: string | undefined,
488
+ constructor: Brand.Brand.Constructor<B>
489
+ ): Config.Config<B>
490
+ <A, B extends Brand.Branded<A, any>>(
491
+ config: Config.Config<A>,
492
+ constructor: Brand.Brand.Constructor<B>
493
+ ): Config.Config<B>
494
+ } = dual(2, <A, B extends Brand.Brand.Constructor<any>>(
495
+ nameOrConfig: Config.Config<NoInfer<A>> | string | undefined,
496
+ constructor: B
497
+ ) => {
498
+ const config: Config.Config<string | A> = isConfig(nameOrConfig) ? nameOrConfig : string(nameOrConfig)
499
+
500
+ return mapOrFail(config, (a) =>
501
+ constructor.either(a).pipe(
502
+ Either.mapLeft((brandErrors) =>
503
+ configError.InvalidData([], brandErrors.map((brandError) => brandError.message).join("\n"))
504
+ )
505
+ ))
506
+ })
507
+
508
+ /** @internal */
509
+ export const hashSet = <A>(config: Config.Config<A>, name?: string): Config.Config<HashSet.HashSet<A>> => {
510
+ const newConfig = map(chunk(config), HashSet.fromIterable)
511
+ return name === undefined ? newConfig : nested(newConfig, name)
512
+ }
513
+
514
+ /** @internal */
515
+ export const string = (name?: string): Config.Config<string> => {
516
+ const config = primitive(
517
+ "a text property",
518
+ Either.right
519
+ )
520
+ return name === undefined ? config : nested(config, name)
521
+ }
522
+
523
+ /** @internal */
524
+ export const nonEmptyString = (name?: string): Config.Config<string> => {
525
+ const config = primitive(
526
+ "a non-empty text property",
527
+ Either.liftPredicate((text) => text.length > 0, () => configError.MissingData([], "Expected a non-empty string"))
528
+ )
529
+
530
+ return name === undefined ? config : nested(config, name)
531
+ }
532
+
533
+ /** @internal */
534
+ export const all = <const Arg extends Iterable<Config.Config<any>> | Record<string, Config.Config<any>>>(
535
+ arg: Arg
536
+ ): Config.Config<
537
+ [Arg] extends [ReadonlyArray<Config.Config<any>>] ? {
538
+ -readonly [K in keyof Arg]: [Arg[K]] extends [Config.Config<infer A>] ? A : never
539
+ }
540
+ : [Arg] extends [Iterable<Config.Config<infer A>>] ? Array<A>
541
+ : [Arg] extends [Record<string, Config.Config<any>>] ? {
542
+ -readonly [K in keyof Arg]: [Arg[K]] extends [Config.Config<infer A>] ? A : never
543
+ }
544
+ : never
545
+ > => {
546
+ if (Array.isArray(arg)) {
547
+ return tuple(arg) as any
548
+ } else if (Symbol.iterator in arg) {
549
+ return tuple([...(arg as Iterable<Config.Config<any>>)]) as any
550
+ }
551
+ return struct(arg) as any
552
+ }
553
+
554
+ const struct = <NER extends Record<string, Config.Config<any>>>(r: NER): Config.Config<
555
+ {
556
+ [K in keyof NER]: [NER[K]] extends [{ [ConfigTypeId]: { _A: (_: never) => infer A } }] ? A : never
557
+ }
558
+ > => {
559
+ const entries = Object.entries(r)
560
+ let result = pipe(entries[0][1], map((value) => ({ [entries[0][0]]: value })))
561
+ if (entries.length === 1) {
562
+ return result as any
563
+ }
564
+ const rest = entries.slice(1)
565
+ for (const [key, config] of rest) {
566
+ result = pipe(
567
+ result,
568
+ zipWith(config, (record, value) => ({ ...record, [key]: value }))
569
+ )
570
+ }
571
+ return result as any
572
+ }
573
+
574
+ /** @internal */
575
+ export const succeed = <A>(value: A): Config.Config<A> => {
576
+ const constant = Object.create(proto)
577
+ constant._tag = OpCodes.OP_CONSTANT
578
+ constant.value = value
579
+ constant.parse = () => Either.right(value)
580
+ return constant
581
+ }
582
+
583
+ /** @internal */
584
+ export const suspend = <A>(config: LazyArg<Config.Config<A>>): Config.Config<A> => {
585
+ const lazy = Object.create(proto)
586
+ lazy._tag = OpCodes.OP_LAZY
587
+ lazy.config = config
588
+ return lazy
589
+ }
590
+
591
+ /** @internal */
592
+ export const sync = <A>(value: LazyArg<A>): Config.Config<A> => {
593
+ return suspend(() => succeed(value()))
594
+ }
595
+
596
+ /** @internal */
597
+ export const hashMap = <A>(config: Config.Config<A>, name?: string): Config.Config<HashMap.HashMap<string, A>> => {
598
+ const table = Object.create(proto)
599
+ table._tag = OpCodes.OP_HASHMAP
600
+ table.valueConfig = config
601
+ return name === undefined ? table : nested(table, name)
602
+ }
603
+
604
+ /** @internal */
605
+ export const isConfig = (u: unknown): u is Config.Config<unknown> => hasProperty(u, ConfigTypeId)
606
+
607
+ /** @internal */
608
+ const tuple = <T extends ArrayLike<Config.Config<any>>>(tuple: T): Config.Config<
609
+ {
610
+ [K in keyof T]: [T[K]] extends [Config.Config<infer A>] ? A : never
611
+ }
612
+ > => {
613
+ if (tuple.length === 0) {
614
+ return succeed([]) as any
615
+ }
616
+ if (tuple.length === 1) {
617
+ return map(tuple[0], (x) => [x]) as any
618
+ }
619
+ let result = map(tuple[0], (x) => [x])
620
+ for (let i = 1; i < tuple.length; i++) {
621
+ const config = tuple[i]
622
+ result = pipe(
623
+ result,
624
+ zipWith(config, (tuple, value) => [...tuple, value])
625
+ ) as any
626
+ }
627
+ return result as any
628
+ }
629
+
630
+ /**
631
+ * @internal
632
+ */
633
+ export const unwrap = <A>(wrapped: Config.Config.Wrap<A>): Config.Config<A> => {
634
+ if (isConfig(wrapped)) {
635
+ return wrapped
636
+ }
637
+ return struct(
638
+ Object.fromEntries(
639
+ Object.entries(wrapped).map(([k, a]) => [k, unwrap(a as any)])
640
+ )
641
+ ) as any
642
+ }
643
+
644
+ /** @internal */
645
+ export const validate = dual<
646
+ {
647
+ <A, B extends A>(options: {
648
+ readonly message: string
649
+ readonly validation: Refinement<A, B>
650
+ }): (self: Config.Config<A>) => Config.Config<B>
651
+ <A>(options: {
652
+ readonly message: string
653
+ readonly validation: Predicate<A>
654
+ }): (self: Config.Config<A>) => Config.Config<A>
655
+ },
656
+ {
657
+ <A, B extends A>(self: Config.Config<A>, options: {
658
+ readonly message: string
659
+ readonly validation: Refinement<A, B>
660
+ }): Config.Config<B>
661
+ <A>(self: Config.Config<A>, options: {
662
+ readonly message: string
663
+ readonly validation: Predicate<A>
664
+ }): Config.Config<A>
665
+ }
666
+ >(2, <A>(self: Config.Config<A>, { message, validation }: {
667
+ readonly message: string
668
+ readonly validation: Predicate<A>
669
+ }) =>
670
+ mapOrFail(self, (a) => {
671
+ if (validation(a)) {
672
+ return Either.right(a)
673
+ }
674
+ return Either.left(configError.InvalidData([], message))
675
+ }))
676
+
677
+ /** @internal */
678
+ export const withDefault = dual<
679
+ <const A2>(def: A2) => <A>(self: Config.Config<A>) => Config.Config<A | A2>,
680
+ <A, const A2>(self: Config.Config<A>, def: A2) => Config.Config<A | A2>
681
+ >(2, (self, def) =>
682
+ orElseIf(self, {
683
+ orElse: () => succeed(def),
684
+ if: ConfigError.isMissingDataOnly
685
+ }))
686
+
687
+ /** @internal */
688
+ export const withDescription = dual<
689
+ (description: string) => <A>(self: Config.Config<A>) => Config.Config<A>,
690
+ <A>(self: Config.Config<A>, description: string) => Config.Config<A>
691
+ >(2, (self, description) => {
692
+ const described = Object.create(proto)
693
+ described._tag = OpCodes.OP_DESCRIBED
694
+ described.config = self
695
+ described.description = description
696
+ return described
697
+ })
698
+
699
+ /** @internal */
700
+ export const zip = dual<
701
+ <B>(that: Config.Config<B>) => <A>(self: Config.Config<A>) => Config.Config<[A, B]>,
702
+ <A, B>(self: Config.Config<A>, that: Config.Config<B>) => Config.Config<[A, B]>
703
+ >(2, (self, that) => zipWith(self, that, (a, b) => [a, b]))
704
+
705
+ /** @internal */
706
+ export const zipWith = dual<
707
+ <B, A, C>(that: Config.Config<B>, f: (a: A, b: B) => C) => (self: Config.Config<A>) => Config.Config<C>,
708
+ <A, B, C>(self: Config.Config<A>, that: Config.Config<B>, f: (a: A, b: B) => C) => Config.Config<C>
709
+ >(3, (self, that, f) => {
710
+ const zipWith = Object.create(proto)
711
+ zipWith._tag = OpCodes.OP_ZIP_WITH
712
+ zipWith.left = self
713
+ zipWith.right = that
714
+ zipWith.zip = f
715
+ return zipWith
716
+ })