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

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,799 @@
1
+ import * as Arr from "../Array.js"
2
+ import type * as Config from "../Config.js"
3
+ import type * as ConfigError from "../ConfigError.js"
4
+ import type * as ConfigProvider from "../ConfigProvider.js"
5
+ import type * as PathPatch from "../ConfigProviderPathPatch.js"
6
+ import * as Context from "../Context.js"
7
+ import type * as Effect from "../Effect.js"
8
+ import * as Either from "../Either.js"
9
+ import type { LazyArg } from "../Function.js"
10
+ import { dual, pipe } from "../Function.js"
11
+ import * as HashMap from "../HashMap.js"
12
+ import * as HashSet from "../HashSet.js"
13
+ import * as number from "../Number.js"
14
+ import * as Option from "../Option.js"
15
+ import { pipeArguments } from "../Pipeable.js"
16
+ import * as Predicate from "../Predicate.js"
17
+ import * as regexp from "../RegExp.js"
18
+ import type * as _config from "./config.js"
19
+ import * as configError from "./configError.js"
20
+ import * as pathPatch from "./configProvider/pathPatch.js"
21
+ import * as core from "./core.js"
22
+ import * as OpCodes from "./opCodes/config.js"
23
+ import * as StringUtils from "./string-utils.js"
24
+
25
+ type KeyComponent = ConfigProvider.ConfigProvider.KeyComponent
26
+
27
+ const concat = <A, B>(l: ReadonlyArray<A>, r: ReadonlyArray<B>): ReadonlyArray<A | B> => [...l, ...r]
28
+
29
+ /** @internal */
30
+ const ConfigProviderSymbolKey = "effect/ConfigProvider"
31
+
32
+ /** @internal */
33
+ export const ConfigProviderTypeId: ConfigProvider.ConfigProviderTypeId = Symbol.for(
34
+ ConfigProviderSymbolKey
35
+ ) as ConfigProvider.ConfigProviderTypeId
36
+
37
+ /** @internal */
38
+ export const configProviderTag: Context.Tag<ConfigProvider.ConfigProvider, ConfigProvider.ConfigProvider> = Context
39
+ .GenericTag(
40
+ "effect/ConfigProvider"
41
+ )
42
+
43
+ /** @internal */
44
+ const FlatConfigProviderSymbolKey = "effect/ConfigProviderFlat"
45
+
46
+ /** @internal */
47
+ export const FlatConfigProviderTypeId: ConfigProvider.FlatConfigProviderTypeId = Symbol.for(
48
+ FlatConfigProviderSymbolKey
49
+ ) as ConfigProvider.FlatConfigProviderTypeId
50
+
51
+ /** @internal */
52
+ export const make = (
53
+ options: {
54
+ readonly load: <A>(config: Config.Config<A>) => Effect.Effect<A, ConfigError.ConfigError>
55
+ readonly flattened: ConfigProvider.ConfigProvider.Flat
56
+ }
57
+ ): ConfigProvider.ConfigProvider => ({
58
+ [ConfigProviderTypeId]: ConfigProviderTypeId,
59
+ pipe() {
60
+ return pipeArguments(this, arguments)
61
+ },
62
+ ...options
63
+ })
64
+
65
+ /** @internal */
66
+ export const makeFlat = (
67
+ options: {
68
+ readonly load: <A>(
69
+ path: ReadonlyArray<string>,
70
+ config: Config.Config.Primitive<A>,
71
+ split: boolean
72
+ ) => Effect.Effect<Array<A>, ConfigError.ConfigError>
73
+ readonly enumerateChildren: (
74
+ path: ReadonlyArray<string>
75
+ ) => Effect.Effect<HashSet.HashSet<string>, ConfigError.ConfigError>
76
+ readonly patch: PathPatch.PathPatch
77
+ }
78
+ ): ConfigProvider.ConfigProvider.Flat => ({
79
+ [FlatConfigProviderTypeId]: FlatConfigProviderTypeId,
80
+ patch: options.patch,
81
+ load: (path, config, split = true) => options.load(path, config, split),
82
+ enumerateChildren: options.enumerateChildren
83
+ })
84
+
85
+ /** @internal */
86
+ export const fromFlat = (flat: ConfigProvider.ConfigProvider.Flat): ConfigProvider.ConfigProvider =>
87
+ make({
88
+ load: (config) =>
89
+ core.flatMap(fromFlatLoop(flat, Arr.empty(), config, false), (chunk) =>
90
+ Option.match(Arr.head(chunk), {
91
+ onNone: () =>
92
+ core.fail(
93
+ configError.MissingData(
94
+ Arr.empty(),
95
+ `Expected a single value having structure: ${config}`
96
+ )
97
+ ),
98
+ onSome: core.succeed
99
+ })),
100
+ flattened: flat
101
+ })
102
+
103
+ /** @internal */
104
+ export const fromEnv = (
105
+ options?: Partial<ConfigProvider.ConfigProvider.FromEnvConfig>
106
+ ): ConfigProvider.ConfigProvider => {
107
+ const { pathDelim, seqDelim } = Object.assign({}, { pathDelim: "_", seqDelim: "," }, options)
108
+ const makePathString = (path: ReadonlyArray<string>): string => pipe(path, Arr.join(pathDelim))
109
+ const unmakePathString = (pathString: string): ReadonlyArray<string> => pathString.split(pathDelim)
110
+
111
+ const getEnv = () =>
112
+ typeof process !== "undefined" && "env" in process && typeof process.env === "object" ? process.env : {}
113
+
114
+ const load = <A>(
115
+ path: ReadonlyArray<string>,
116
+ primitive: Config.Config.Primitive<A>,
117
+ split = true
118
+ ): Effect.Effect<Array<A>, ConfigError.ConfigError> => {
119
+ const pathString = makePathString(path)
120
+ const current = getEnv()
121
+ const valueOpt = pathString in current ? Option.some(current[pathString]!) : Option.none()
122
+ return pipe(
123
+ valueOpt,
124
+ core.mapError(() => configError.MissingData(path, `Expected ${pathString} to exist in the process context`)),
125
+ core.flatMap((value) => parsePrimitive(value, path, primitive, seqDelim, split))
126
+ )
127
+ }
128
+
129
+ const enumerateChildren = (
130
+ path: ReadonlyArray<string>
131
+ ): Effect.Effect<HashSet.HashSet<string>, ConfigError.ConfigError> =>
132
+ core.sync(() => {
133
+ const current = getEnv()
134
+ const keys = Object.keys(current)
135
+ const keyPaths = keys.map((value) => unmakePathString(value.toUpperCase()))
136
+ const filteredKeyPaths = keyPaths.filter((keyPath) => {
137
+ for (let i = 0; i < path.length; i++) {
138
+ const pathComponent = pipe(path, Arr.unsafeGet(i))
139
+ const currentElement = keyPath[i]
140
+ if (currentElement === undefined || pathComponent !== currentElement) {
141
+ return false
142
+ }
143
+ }
144
+ return true
145
+ }).flatMap((keyPath) => keyPath.slice(path.length, path.length + 1))
146
+ return HashSet.fromIterable(filteredKeyPaths)
147
+ })
148
+
149
+ return fromFlat(makeFlat({ load, enumerateChildren, patch: pathPatch.empty }))
150
+ }
151
+
152
+ /** @internal */
153
+ export const fromMap = (
154
+ map: Map<string, string>,
155
+ config?: Partial<ConfigProvider.ConfigProvider.FromMapConfig>
156
+ ): ConfigProvider.ConfigProvider => {
157
+ const { pathDelim, seqDelim } = Object.assign({ seqDelim: ",", pathDelim: "." }, config)
158
+ const makePathString = (path: ReadonlyArray<string>): string => pipe(path, Arr.join(pathDelim))
159
+ const unmakePathString = (pathString: string): ReadonlyArray<string> => pathString.split(pathDelim)
160
+ const mapWithIndexSplit = splitIndexInKeys(
161
+ map,
162
+ (str) => unmakePathString(str),
163
+ makePathString
164
+ )
165
+ const load = <A>(
166
+ path: ReadonlyArray<string>,
167
+ primitive: Config.Config.Primitive<A>,
168
+ split = true
169
+ ): Effect.Effect<Array<A>, ConfigError.ConfigError> => {
170
+ const pathString = makePathString(path)
171
+ const valueOpt = mapWithIndexSplit.has(pathString) ?
172
+ Option.some(mapWithIndexSplit.get(pathString)!) :
173
+ Option.none()
174
+ return pipe(
175
+ valueOpt,
176
+ core.mapError(() => configError.MissingData(path, `Expected ${pathString} to exist in the provided map`)),
177
+ core.flatMap((value) => parsePrimitive(value, path, primitive, seqDelim, split))
178
+ )
179
+ }
180
+ const enumerateChildren = (
181
+ path: ReadonlyArray<string>
182
+ ): Effect.Effect<HashSet.HashSet<string>, ConfigError.ConfigError> =>
183
+ core.sync(() => {
184
+ const keyPaths = Arr.fromIterable(mapWithIndexSplit.keys()).map(unmakePathString)
185
+ const filteredKeyPaths = keyPaths.filter((keyPath) => {
186
+ for (let i = 0; i < path.length; i++) {
187
+ const pathComponent = pipe(path, Arr.unsafeGet(i))
188
+ const currentElement = keyPath[i]
189
+ if (currentElement === undefined || pathComponent !== currentElement) {
190
+ return false
191
+ }
192
+ }
193
+ return true
194
+ }).flatMap((keyPath) => keyPath.slice(path.length, path.length + 1))
195
+ return HashSet.fromIterable(filteredKeyPaths)
196
+ })
197
+
198
+ return fromFlat(makeFlat({ load, enumerateChildren, patch: pathPatch.empty }))
199
+ }
200
+
201
+ const extend = <A, B>(
202
+ leftDef: (n: number) => A,
203
+ rightDef: (n: number) => B,
204
+ left: ReadonlyArray<A>,
205
+ right: ReadonlyArray<B>
206
+ ): [ReadonlyArray<A>, ReadonlyArray<B>] => {
207
+ const leftPad = Arr.unfold(
208
+ left.length,
209
+ (index) =>
210
+ index >= right.length ?
211
+ Option.none() :
212
+ Option.some([leftDef(index), index + 1])
213
+ )
214
+ const rightPad = Arr.unfold(
215
+ right.length,
216
+ (index) =>
217
+ index >= left.length ?
218
+ Option.none() :
219
+ Option.some([rightDef(index), index + 1])
220
+ )
221
+ const leftExtension = concat(left, leftPad)
222
+ const rightExtension = concat(right, rightPad)
223
+ return [leftExtension, rightExtension]
224
+ }
225
+
226
+ const appendConfigPath = (path: ReadonlyArray<string>, config: Config.Config<unknown>): ReadonlyArray<string> => {
227
+ let op = config as _config.ConfigPrimitive
228
+ if (op._tag === "Nested") {
229
+ const out = path.slice()
230
+ while (op._tag === "Nested") {
231
+ out.push(op.name)
232
+ op = op.config as _config.ConfigPrimitive
233
+ }
234
+ return out
235
+ }
236
+ return path
237
+ }
238
+
239
+ const fromFlatLoop = <A>(
240
+ flat: ConfigProvider.ConfigProvider.Flat,
241
+ prefix: ReadonlyArray<string>,
242
+ config: Config.Config<A>,
243
+ split: boolean
244
+ ): Effect.Effect<Array<A>, ConfigError.ConfigError> => {
245
+ const op = config as _config.ConfigPrimitive
246
+ switch (op._tag) {
247
+ case OpCodes.OP_CONSTANT: {
248
+ return core.succeed(Arr.of(op.value)) as Effect.Effect<Array<A>, ConfigError.ConfigError>
249
+ }
250
+ case OpCodes.OP_DESCRIBED: {
251
+ return core.suspend(
252
+ () => fromFlatLoop(flat, prefix, op.config, split)
253
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
254
+ }
255
+ case OpCodes.OP_FAIL: {
256
+ return core.fail(configError.MissingData(prefix, op.message)) as Effect.Effect<
257
+ Array<A>,
258
+ ConfigError.ConfigError
259
+ >
260
+ }
261
+ case OpCodes.OP_FALLBACK: {
262
+ return pipe(
263
+ core.suspend(() => fromFlatLoop(flat, prefix, op.first, split)),
264
+ core.catchAll((error1) => {
265
+ if (op.condition(error1)) {
266
+ return pipe(
267
+ fromFlatLoop(flat, prefix, op.second, split),
268
+ core.catchAll((error2) => core.fail(configError.Or(error1, error2)))
269
+ )
270
+ }
271
+ return core.fail(error1)
272
+ })
273
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
274
+ }
275
+ case OpCodes.OP_LAZY: {
276
+ return core.suspend(() => fromFlatLoop(flat, prefix, op.config(), split)) as Effect.Effect<
277
+ Array<A>,
278
+ ConfigError.ConfigError
279
+ >
280
+ }
281
+ case OpCodes.OP_MAP_OR_FAIL: {
282
+ return core.suspend(() =>
283
+ pipe(
284
+ fromFlatLoop(flat, prefix, op.original, split),
285
+ core.flatMap(
286
+ core.forEachSequential((a) =>
287
+ pipe(
288
+ op.mapOrFail(a),
289
+ core.mapError(configError.prefixed(appendConfigPath(prefix, op.original)))
290
+ )
291
+ )
292
+ )
293
+ )
294
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
295
+ }
296
+ case OpCodes.OP_NESTED: {
297
+ return core.suspend(() =>
298
+ fromFlatLoop(
299
+ flat,
300
+ concat(prefix, Arr.of(op.name)),
301
+ op.config,
302
+ split
303
+ )
304
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
305
+ }
306
+ case OpCodes.OP_PRIMITIVE: {
307
+ return pipe(
308
+ pathPatch.patch(prefix, flat.patch),
309
+ core.flatMap((prefix) =>
310
+ pipe(
311
+ flat.load(prefix, op, split),
312
+ core.flatMap((values) => {
313
+ if (values.length === 0) {
314
+ const name = pipe(Arr.last(prefix), Option.getOrElse(() => "<n/a>"))
315
+ return core.fail(configError.MissingData([], `Expected ${op.description} with name ${name}`))
316
+ }
317
+ return core.succeed(values)
318
+ })
319
+ )
320
+ )
321
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
322
+ }
323
+ case OpCodes.OP_SEQUENCE: {
324
+ return pipe(
325
+ pathPatch.patch(prefix, flat.patch),
326
+ core.flatMap((patchedPrefix) =>
327
+ pipe(
328
+ flat.enumerateChildren(patchedPrefix),
329
+ core.flatMap(indicesFrom),
330
+ core.flatMap((indices) => {
331
+ if (indices.length === 0) {
332
+ return core.suspend(() =>
333
+ core.map(fromFlatLoop(flat, prefix, op.config, true), Arr.of)
334
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
335
+ }
336
+ return pipe(
337
+ core.forEachSequential(
338
+ indices,
339
+ (index) => fromFlatLoop(flat, Arr.append(prefix, `[${index}]`), op.config, true)
340
+ ),
341
+ core.map((chunkChunk) => {
342
+ const flattened = Arr.flatten(chunkChunk)
343
+ if (flattened.length === 0) {
344
+ return Arr.of(Arr.empty<A>())
345
+ }
346
+ return Arr.of(flattened)
347
+ })
348
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
349
+ })
350
+ )
351
+ )
352
+ )
353
+ }
354
+ case OpCodes.OP_HASHMAP: {
355
+ return core.suspend(() =>
356
+ pipe(
357
+ pathPatch.patch(prefix, flat.patch),
358
+ core.flatMap((prefix) =>
359
+ pipe(
360
+ flat.enumerateChildren(prefix),
361
+ core.flatMap((keys) => {
362
+ return pipe(
363
+ keys,
364
+ core.forEachSequential((key) =>
365
+ fromFlatLoop(
366
+ flat,
367
+ concat(prefix, Arr.of(key)),
368
+ op.valueConfig,
369
+ split
370
+ )
371
+ ),
372
+ core.map((matrix) => {
373
+ if (matrix.length === 0) {
374
+ return Arr.of(HashMap.empty())
375
+ }
376
+ return pipe(
377
+ transpose(matrix),
378
+ Arr.map((values) => HashMap.fromIterable(Arr.zip(Arr.fromIterable(keys), values)))
379
+ )
380
+ })
381
+ )
382
+ })
383
+ )
384
+ )
385
+ )
386
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
387
+ }
388
+ case OpCodes.OP_ZIP_WITH: {
389
+ return core.suspend(() =>
390
+ pipe(
391
+ fromFlatLoop(flat, prefix, op.left, split),
392
+ core.either,
393
+ core.flatMap((left) =>
394
+ pipe(
395
+ fromFlatLoop(flat, prefix, op.right, split),
396
+ core.either,
397
+ core.flatMap((right) => {
398
+ if (Either.isLeft(left) && Either.isLeft(right)) {
399
+ return core.fail(configError.And(left.left, right.left))
400
+ }
401
+ if (Either.isLeft(left) && Either.isRight(right)) {
402
+ return core.fail(left.left)
403
+ }
404
+ if (Either.isRight(left) && Either.isLeft(right)) {
405
+ return core.fail(right.left)
406
+ }
407
+ if (Either.isRight(left) && Either.isRight(right)) {
408
+ const path = pipe(prefix, Arr.join("."))
409
+ const fail = fromFlatLoopFail(prefix, path)
410
+ const [lefts, rights] = extend(
411
+ fail,
412
+ fail,
413
+ pipe(left.right, Arr.map(Either.right)),
414
+ pipe(right.right, Arr.map(Either.right))
415
+ )
416
+ return pipe(
417
+ lefts,
418
+ Arr.zip(rights),
419
+ core.forEachSequential(([left, right]) =>
420
+ pipe(
421
+ core.zip(left, right),
422
+ core.map(([left, right]) => op.zip(left, right))
423
+ )
424
+ )
425
+ )
426
+ }
427
+ throw new Error(
428
+ "BUG: ConfigProvider.fromFlatLoop - please report an issue at https://github.com/Effect-TS/effect/issues"
429
+ )
430
+ })
431
+ )
432
+ )
433
+ )
434
+ ) as unknown as Effect.Effect<Array<A>, ConfigError.ConfigError>
435
+ }
436
+ }
437
+ }
438
+
439
+ const fromFlatLoopFail =
440
+ (prefix: ReadonlyArray<string>, path: string) => (index: number): Either.Either<unknown, ConfigError.ConfigError> =>
441
+ Either.left(
442
+ configError.MissingData(
443
+ prefix,
444
+ `The element at index ${index} in a sequence at path "${path}" was missing`
445
+ )
446
+ )
447
+
448
+ /** @internal */
449
+ export const mapInputPath = dual<
450
+ (f: (path: string) => string) => (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider,
451
+ (self: ConfigProvider.ConfigProvider, f: (path: string) => string) => ConfigProvider.ConfigProvider
452
+ >(2, (self, f) => fromFlat(mapInputPathFlat(self.flattened, f)))
453
+
454
+ const mapInputPathFlat = (
455
+ self: ConfigProvider.ConfigProvider.Flat,
456
+ f: (path: string) => string
457
+ ): ConfigProvider.ConfigProvider.Flat =>
458
+ makeFlat({
459
+ load: (path, config, split = true) => self.load(path, config, split),
460
+ enumerateChildren: (path) => self.enumerateChildren(path),
461
+ patch: pathPatch.mapName(self.patch, f)
462
+ })
463
+
464
+ /** @internal */
465
+ export const nested = dual<
466
+ (name: string) => (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider,
467
+ (self: ConfigProvider.ConfigProvider, name: string) => ConfigProvider.ConfigProvider
468
+ >(2, (self, name) =>
469
+ fromFlat(makeFlat({
470
+ load: (path, config) => self.flattened.load(path, config, true),
471
+ enumerateChildren: (path) => self.flattened.enumerateChildren(path),
472
+ patch: pathPatch.nested(self.flattened.patch, name)
473
+ })))
474
+
475
+ /** @internal */
476
+ export const unnested = dual<
477
+ (name: string) => (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider,
478
+ (self: ConfigProvider.ConfigProvider, name: string) => ConfigProvider.ConfigProvider
479
+ >(2, (self, name) =>
480
+ fromFlat(makeFlat({
481
+ load: (path, config) => self.flattened.load(path, config, true),
482
+ enumerateChildren: (path) => self.flattened.enumerateChildren(path),
483
+ patch: pathPatch.unnested(self.flattened.patch, name)
484
+ })))
485
+
486
+ /** @internal */
487
+ export const orElse = dual<
488
+ (
489
+ that: LazyArg<ConfigProvider.ConfigProvider>
490
+ ) => (
491
+ self: ConfigProvider.ConfigProvider
492
+ ) => ConfigProvider.ConfigProvider,
493
+ (
494
+ self: ConfigProvider.ConfigProvider,
495
+ that: LazyArg<ConfigProvider.ConfigProvider>
496
+ ) => ConfigProvider.ConfigProvider
497
+ >(2, (self, that) => fromFlat(orElseFlat(self.flattened, () => that().flattened)))
498
+
499
+ const orElseFlat = (
500
+ self: ConfigProvider.ConfigProvider.Flat,
501
+ that: LazyArg<ConfigProvider.ConfigProvider.Flat>
502
+ ): ConfigProvider.ConfigProvider.Flat =>
503
+ makeFlat({
504
+ load: (path, config, split) =>
505
+ pipe(
506
+ pathPatch.patch(path, self.patch),
507
+ core.flatMap((patch) => self.load(patch, config, split)),
508
+ core.catchAll((error1) =>
509
+ pipe(
510
+ core.sync(that),
511
+ core.flatMap((that) =>
512
+ pipe(
513
+ pathPatch.patch(path, that.patch),
514
+ core.flatMap((patch) => that.load(patch, config, split)),
515
+ core.catchAll((error2) => core.fail(configError.Or(error1, error2)))
516
+ )
517
+ )
518
+ )
519
+ )
520
+ ),
521
+ enumerateChildren: (path) =>
522
+ pipe(
523
+ pathPatch.patch(path, self.patch),
524
+ core.flatMap((patch) => self.enumerateChildren(patch)),
525
+ core.either,
526
+ core.flatMap((left) =>
527
+ pipe(
528
+ core.sync(that),
529
+ core.flatMap((that) =>
530
+ pipe(
531
+ pathPatch.patch(path, that.patch),
532
+ core.flatMap((patch) => that.enumerateChildren(patch)),
533
+ core.either,
534
+ core.flatMap((right) => {
535
+ if (Either.isLeft(left) && Either.isLeft(right)) {
536
+ return core.fail(configError.And(left.left, right.left))
537
+ }
538
+ if (Either.isLeft(left) && Either.isRight(right)) {
539
+ return core.succeed(right.right)
540
+ }
541
+ if (Either.isRight(left) && Either.isLeft(right)) {
542
+ return core.succeed(left.right)
543
+ }
544
+ if (Either.isRight(left) && Either.isRight(right)) {
545
+ return core.succeed(pipe(left.right, HashSet.union(right.right)))
546
+ }
547
+ throw new Error(
548
+ "BUG: ConfigProvider.orElseFlat - please report an issue at https://github.com/Effect-TS/effect/issues"
549
+ )
550
+ })
551
+ )
552
+ )
553
+ )
554
+ )
555
+ ),
556
+ patch: pathPatch.empty
557
+ })
558
+
559
+ /** @internal */
560
+ export const constantCase = (self: ConfigProvider.ConfigProvider): ConfigProvider.ConfigProvider =>
561
+ mapInputPath(self, StringUtils.constantCase)
562
+
563
+ /** @internal */
564
+ export const kebabCase = (self: ConfigProvider.ConfigProvider): ConfigProvider.ConfigProvider =>
565
+ mapInputPath(self, StringUtils.kebabCase)
566
+
567
+ /** @internal */
568
+ export const lowerCase = (self: ConfigProvider.ConfigProvider): ConfigProvider.ConfigProvider =>
569
+ mapInputPath(self, StringUtils.lowerCase)
570
+
571
+ /** @internal */
572
+ export const snakeCase = (self: ConfigProvider.ConfigProvider): ConfigProvider.ConfigProvider =>
573
+ mapInputPath(self, StringUtils.snakeCase)
574
+
575
+ /** @internal */
576
+ export const upperCase = (self: ConfigProvider.ConfigProvider): ConfigProvider.ConfigProvider =>
577
+ mapInputPath(self, StringUtils.upperCase)
578
+
579
+ /** @internal */
580
+ export const within = dual<
581
+ (
582
+ path: ReadonlyArray<string>,
583
+ f: (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider
584
+ ) => (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider,
585
+ (
586
+ self: ConfigProvider.ConfigProvider,
587
+ path: ReadonlyArray<string>,
588
+ f: (self: ConfigProvider.ConfigProvider) => ConfigProvider.ConfigProvider
589
+ ) => ConfigProvider.ConfigProvider
590
+ >(3, (self, path, f) => {
591
+ const unnest = Arr.reduce(path, self, (provider, name) => unnested(provider, name))
592
+ const nest = Arr.reduceRight(path, f(unnest), (provider, name) => nested(provider, name))
593
+ return orElse(nest, () => self)
594
+ })
595
+
596
+ const splitPathString = (text: string, delim: string): Array<string> => {
597
+ const split = text.split(new RegExp(`\\s*${regexp.escape(delim)}\\s*`))
598
+ return split
599
+ }
600
+
601
+ const parsePrimitive = <A>(
602
+ text: string,
603
+ path: ReadonlyArray<string>,
604
+ primitive: Config.Config.Primitive<A>,
605
+ delimiter: string,
606
+ split: boolean
607
+ ): Effect.Effect<Array<A>, ConfigError.ConfigError> => {
608
+ if (!split) {
609
+ return pipe(
610
+ primitive.parse(text),
611
+ core.mapBoth({
612
+ onFailure: configError.prefixed(path),
613
+ onSuccess: Arr.of
614
+ })
615
+ )
616
+ }
617
+ return pipe(
618
+ splitPathString(text, delimiter),
619
+ core.forEachSequential((char) => primitive.parse(char.trim())),
620
+ core.mapError(configError.prefixed(path))
621
+ )
622
+ }
623
+
624
+ const transpose = <A>(array: ReadonlyArray<ReadonlyArray<A>>): Array<Array<A>> => {
625
+ return Object.keys(array[0]).map((column) => array.map((row) => row[column as any]))
626
+ }
627
+
628
+ const indicesFrom = (quotedIndices: HashSet.HashSet<string>): Effect.Effect<Array<number>> =>
629
+ pipe(
630
+ core.forEachSequential(quotedIndices, parseQuotedIndex),
631
+ core.mapBoth({
632
+ onFailure: () => Arr.empty<number>(),
633
+ onSuccess: Arr.sort(number.Order)
634
+ }),
635
+ core.either,
636
+ core.map(Either.merge)
637
+ )
638
+
639
+ const STR_INDEX_REGEX = /(^.+)(\[(\d+)\])$/
640
+ const QUOTED_INDEX_REGEX = /^(\[(\d+)\])$/
641
+
642
+ const parseQuotedIndex = (str: string): Option.Option<number> => {
643
+ const match = str.match(QUOTED_INDEX_REGEX)
644
+ if (match !== null) {
645
+ const matchedIndex = match[2]
646
+ return pipe(
647
+ matchedIndex !== undefined && matchedIndex.length > 0 ?
648
+ Option.some(matchedIndex) :
649
+ Option.none(),
650
+ Option.flatMap(parseInteger)
651
+ )
652
+ }
653
+ return Option.none()
654
+ }
655
+
656
+ const splitIndexInKeys = (
657
+ map: Map<string, string>,
658
+ unmakePathString: (str: string) => ReadonlyArray<string>,
659
+ makePathString: (chunk: ReadonlyArray<string>) => string
660
+ ): Map<string, string> => {
661
+ const newMap: Map<string, string> = new Map()
662
+ for (const [pathString, value] of map) {
663
+ const keyWithIndex = pipe(
664
+ unmakePathString(pathString),
665
+ Arr.flatMap((key) =>
666
+ Option.match(splitIndexFrom(key), {
667
+ onNone: () => Arr.of(key),
668
+ onSome: ([key, index]) => Arr.make(key, `[${index}]`)
669
+ })
670
+ )
671
+ )
672
+ newMap.set(makePathString(keyWithIndex), value)
673
+ }
674
+ return newMap
675
+ }
676
+
677
+ const splitIndexFrom = (key: string): Option.Option<[string, number]> => {
678
+ const match = key.match(STR_INDEX_REGEX)
679
+ if (match !== null) {
680
+ const matchedString = match[1]
681
+ const matchedIndex = match[3]
682
+ const optionalString = matchedString !== undefined && matchedString.length > 0 ?
683
+ Option.some(matchedString) :
684
+ Option.none()
685
+ const optionalIndex = pipe(
686
+ matchedIndex !== undefined && matchedIndex.length > 0 ?
687
+ Option.some(matchedIndex) :
688
+ Option.none(),
689
+ Option.flatMap(parseInteger)
690
+ )
691
+ return Option.all([optionalString, optionalIndex])
692
+ }
693
+ return Option.none()
694
+ }
695
+
696
+ const parseInteger = (str: string): Option.Option<number> => {
697
+ const parsedIndex = Number.parseInt(str)
698
+ return Number.isNaN(parsedIndex) ?
699
+ Option.none() :
700
+ Option.some(parsedIndex)
701
+ }
702
+
703
+ const keyName = (name: string): KeyComponent => ({
704
+ _tag: "KeyName",
705
+ name
706
+ })
707
+
708
+ const keyIndex = (index: number): KeyComponent => ({
709
+ _tag: "KeyIndex",
710
+ index
711
+ })
712
+
713
+ interface JsonMap {
714
+ [member: string]: string | number | boolean | null | JsonArray | JsonMap
715
+ }
716
+ interface JsonArray extends Array<string | number | boolean | null | JsonArray | JsonMap> {}
717
+
718
+ /** @internal */
719
+ export const fromJson = (json: unknown): ConfigProvider.ConfigProvider => {
720
+ const hiddenDelimiter = "\ufeff"
721
+ const indexedEntries = Arr.map(
722
+ getIndexedEntries(json as JsonMap),
723
+ ([key, value]): [string, string] => [configPathToString(key).join(hiddenDelimiter), value]
724
+ )
725
+ return fromMap(new Map(indexedEntries), {
726
+ pathDelim: hiddenDelimiter,
727
+ seqDelim: hiddenDelimiter
728
+ })
729
+ }
730
+
731
+ const configPathToString = (path: ReadonlyArray<KeyComponent>): ReadonlyArray<string> => {
732
+ const output: Array<string> = []
733
+ let i = 0
734
+ while (i < path.length) {
735
+ const component = path[i]
736
+ if (component._tag === "KeyName") {
737
+ if (i + 1 < path.length) {
738
+ const nextComponent = path[i + 1]
739
+ if (nextComponent._tag === "KeyIndex") {
740
+ output.push(`${component.name}[${nextComponent.index}]`)
741
+ i += 2
742
+ } else {
743
+ output.push(component.name)
744
+ i += 1
745
+ }
746
+ } else {
747
+ output.push(component.name)
748
+ i += 1
749
+ }
750
+ }
751
+ }
752
+ return output
753
+ }
754
+
755
+ const getIndexedEntries = (
756
+ config: JsonMap
757
+ ): ReadonlyArray<[path: ReadonlyArray<KeyComponent>, value: string]> => {
758
+ const loopAny = (
759
+ path: ReadonlyArray<KeyComponent>,
760
+ value: string | number | boolean | JsonMap | JsonArray | null
761
+ ): ReadonlyArray<[path: ReadonlyArray<KeyComponent>, value: string]> => {
762
+ if (typeof value === "string") {
763
+ return Arr.make([path, value] as [ReadonlyArray<KeyComponent>, string])
764
+ }
765
+ if (typeof value === "number" || typeof value === "boolean") {
766
+ return Arr.make([path, String(value)] as [ReadonlyArray<KeyComponent>, string])
767
+ }
768
+ if (Arr.isArray(value)) {
769
+ return loopArray(path, value)
770
+ }
771
+ if (typeof value === "object" && value !== null) {
772
+ return loopObject(path, value)
773
+ }
774
+ return Arr.empty<[ReadonlyArray<KeyComponent>, string]>()
775
+ }
776
+ const loopArray = (
777
+ path: ReadonlyArray<KeyComponent>,
778
+ values: JsonArray
779
+ ): ReadonlyArray<[path: ReadonlyArray<KeyComponent>, value: string]> =>
780
+ Arr.match(values, {
781
+ onEmpty: () => Arr.make([path, "<nil>"] as [ReadonlyArray<KeyComponent>, string]),
782
+ onNonEmpty: Arr.flatMap((value, index) => loopAny(Arr.append(path, keyIndex(index)), value))
783
+ })
784
+ const loopObject = (
785
+ path: ReadonlyArray<KeyComponent>,
786
+ value: JsonMap
787
+ ): ReadonlyArray<[path: ReadonlyArray<KeyComponent>, value: string]> =>
788
+ Object.entries(value)
789
+ .filter(([, value]) => Predicate.isNotNullable(value))
790
+ .flatMap(([key, value]) => {
791
+ const newPath = Arr.append(path, keyName(key))
792
+ const result = loopAny(newPath, value)
793
+ if (Arr.isEmptyReadonlyArray(result)) {
794
+ return Arr.make([newPath, ""] as [ReadonlyArray<KeyComponent>, string])
795
+ }
796
+ return result
797
+ })
798
+ return loopObject(Arr.empty(), config)
799
+ }